【发布时间】:2017-05-19 09:16:55
【问题描述】:
我有一张每分钟完成的事件表。我希望能够按时间段过滤这些事件,并汇总小时/天/等的数据。
我的数据模型:
create table min_dev_data (
device TEXT,
event_time BIGINT,
hour BIGINT,
day BIGINT,
value DOUBLE,
PRIMARY KEY ((device), event_time)
)
CREATE MATERIALIZED VIEW hour_dev_data AS
SELECT device, event_time, hour, value
FROM min_dev_data
WHERE hour IS NOT NULL AND value IS NOT NULL
and event_time IS NOT NULL AND device IS NOT NULL
PRIMARY KEY ((device), hour, event_time)
我的查询是
select hour, sum(value)
from hour_dev_data
where device = 'tst' and event_time < 149000000 group by device, hour;
因错误而失败 code=2200 [无效查询] message="PRIMARY KEY 列 "event_time" 不能被限制,因为前列 "hour" 不受限制"
使其工作的唯一方法是添加 ALLOW FILTERING,这是不可预测的。
如何更改我的数据模型以解决我的查询并避免 ALLOW FILTERING 模式?
【问题讨论】:
-
小时是否在 0-23 范围内?或者它是一个小时开始的unix时间?
-
是unix时间戳。小时是小时的结束 - 像小时 = event_time + (3600 - event_time % 3600) 计算它
-
您要回答的问题是什么?它看起来像“这些时间之间特定
device按小时分组的value的总和”。我不确定您要查询的确切时间范围是多少。是某个特定小时,还是某个时间段内的某个小时范围,还是某个时间之后的所有小时? -
要回答的问题 - “显示特定设备 (device = 'tst') 在特定时间段内 (event_time 介于 1 和 149000000 之间) 的汇总汇总值 (sum(value)) 并具有指定的粒度(分钟/小时/天)”
标签: cassandra