我有一个表datavalue
与数据几乎一年的每client
在间隔eventtime
15分钟。我想创建另一个表datavalue_by_hour
,我将以1小时的间隔存储datavalue
的数据。为此我需要:高效的查询来计算和计算卡桑德拉的平均值
- 获取截然不同的值为
client
和eventhour
; - 对于上述结果的每一行,计算
client
和eventhour
的avg(activepower)
; - 计算以上平均函数中使用的
activepower
值的数量。
问题是,在mysql或postgres中,这可以通过几乎一条指令轻松完成。有了卡桑德拉我想唯一的方法是通过循环遍历每个结果并应用另一个查询,直到达到最终结果。这看起来效率很低,有没有其他方式可以更高效地实现这样的结构?
AFH0AEE00A0BHC 2016-05-24 18:00:00+0000 0.067 4
AFH0AEE00AGCEC 2016-05-24 19:00:00+0000 0.081 4
AFH0ADE0ACDAAE 2016-05-24 20:00:00+0000 0.068 3
AFH0AEE00AGFEC 2016-05-24 21:00:00+0000 0.032 4
我最初datavalue表有这样的结构:
CREATE TABLE datavalue (
client text,
eventhour bigint,
eventtime timestamp,
activepower double,
activepowerclassification double,
dstoffset double,
PRIMARY KEY ((pt, eventhour), eventtime));
而且在datavalue
表中的数据集的例子(千万行):
AFH0AEE00BFEFB 1473847200 2016-09-14 10:00:00+0000 0.042 0.0 1.0
AFH0AEE00BFEFB 1473847200 2016-09-14 10:15:00+0000 0.056 0.0 1.0
AFH0AEE00BFEFB 1473847200 2016-09-14 10:30:00+0000 0.075 0.0 1.0
AFH0AEE00BFEFB 1473847200 2016-09-14 10:45:00+0000 0.102 0.0 1.0
A0C0AEAFIFEAHE 1472882400 2016-09-03 06:00:00+0000 0.0 0.0 1.0
A0C0AEAFIFEAHE 1472882400 2016-09-03 06:15:00+0000 0.0 0.0 1.0
A0C0AEAFIFEAHE 1472882400 2016-09-03 06:30:00+0000 0.0 0.0 1.0
A0C0AEAFIFEAHE 1472882400 2016-09-03 06:45:00+0000 0.0 0.0 1.0
AFH0ACFB00CD0F 1452693600 2016-01-13 14:00:00+0000 0.244 0.0 0.0
AFH0ACFB00CD0F 1452693600 2016-01-13 14:15:00+0000 0.244 0.0 0.0
AFH0ACFB00CD0F 1452693600 2016-01-13 14:30:00+0000 0.242 0.0 0.0
AFH0ACFB00CD0F 1452693600 2016-01-13 14:45:00+0000 0.244 0.0 0.0
A0C0AEAFIEE0DC 1466319600 2016-06-19 07:00:00+0000 0.036 0.0 1.0
似乎不错!我会尝试应用这个并让你知道结果!非常感谢 –
试试这个,让我知道 –