Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cassandra中计算平均值的高效查询_Php_Cassandra - Fatal编程技术网

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
    值的数量
  • 问题是,在mysql或postgres中,几乎只需一条指令就可以轻松做到这一点。对于Cassandra,我想唯一的方法是循环遍历每个结果并应用另一个查询,直到获得最终结果。。?这似乎效率很低,有没有其他更有效的方法来实现这样的结构

    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