Php Cassandra中计算平均值的高效查询
我有一个表Php Cassandra中计算平均值的高效查询,php,cassandra,Php,Cassandra,我有一个表datavalue,每个client的数据间隔eventtime为15分钟。我想按小时创建另一个表datavalue\u,我将以1小时的间隔存储datavalue中的数据。为此,我需要: 为客户端和事件小时获取不同的值 计算client的avg(activepower),以及上述结果每行的eventhour 计算上述平均函数中使用的activepower值的数量 问题是,在mysql或postgres中,几乎只需一条指令就可以轻松做到这一点。对于Cassandra,我想唯一的方法是循环
datavalue
,每个client
的数据间隔eventtime
为15分钟。我想按小时创建另一个表datavalue\u
,我将以1小时的间隔存储datavalue
中的数据。为此,我需要:
客户端
和事件小时
获取不同的值李>
client
的avg(activepower)
,以及上述结果每行的eventhour
李>
activepower
值的数量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
我的初始数据值表具有以下结构:
CREATE TABLE datavalue (
client text,
eventhour bigint,
eventtime timestamp,
activepower double,
activepowerclassification double,
dstoffset double,
PRIMARY KEY (( pt, eventhour ), eventtime));
以及datavalue
表中的数据集示例(+10000000行):
更新您的模式添加dstCount、dstSum和dstAvg:
CREATE TABLE datavalue (
client text,
eventhour bigint,
eventtime timestamp,
activepower double,
activepowerclassification double,
dstoffset double,
powerCount bigint static,
powerSum double static,
powerAvg double static,
PRIMARY KEY (( client, eventhour ), eventtime));
我用的是静态列,这里是文档
静态列是由同一分区的所有行共享的特殊列。让我们举一个例子:假设我们想要存储每个用户需要支付的账单,并保持每个用户剩余的余额。我们希望保持不变的是,余额始终是所有未付账单的总和:
在插入新记录之前,请使用此查询为特定客户端和eventhour选择当前的powerCount和powerSum
让您插入记录
client eventhour eventtime activepower
AFH0AEE00BFEFB 1473847200 2016-09-14 10:00:00+0000 0.040
查询将被删除
SELECT powerCount,powerSum
FROM datavalue
WHERE client = 'AFH0AEE00BFEFB' AND eventhour = 1473847200 LIMIT 1;
现在,您可以获得当前的powerCount和powerSum
让powerCount=4,powerSum=0.275
所以更新了数据
powerSum = powerSum + 0.040 = 0.315
powerCount = powerCount + 1 = 5
powerAvg = powerSum/powerCount = 0.063
现在将该记录与新的powerSum、powerCount和powerAvg一起插入,看起来不错!我会尝试应用这个,并让你知道结果!很多人对此表示感谢并让我知道
powerSum = powerSum + 0.040 = 0.315
powerCount = powerCount + 1 = 5
powerAvg = powerSum/powerCount = 0.063