gpt4 book ai didi

cassandra - 基于统计在 cassandra 中获取数据点

转载 作者:行者123 更新时间:2023-12-01 02:06:22 26 4
gpt4 key购买 nike

我正在测试 Cassandra (2.0) 作为存储我们的时间序列数据的可能替代品。

我制作了一个简单的表格并将我们的一些数据转储到其中:

CREATE TABLE DataRaw(
channelId int,
sampleTime timestamp,
value double,
PRIMARY KEY (channelId, sampleTime)
) WITH CLUSTERING ORDER BY (sampleTime ASC);

我可以很容易地执行最常用的查询,如第一个值、最后一个值(当前)并通过最大值、最小值、计数、平均值等获取统计信息。

但我不仅需要获取范围内的最大值,还需要获取该值所在的采样时间。

对于给定的数据:
sampleTime          value
2015-08-28 00:00 10
2015-08-28 01:00 15
2015-08-28 02:00 13

我希望查询返回 2015-08-28 01:00 和 15

我试过这样的事情:
select sampletime, value from dataraw where channelid=865 and sampletime >= '2014-01-01 00:00' and sampleTime < '2014-01-02 00:00' and value = (select max(value) from dataraw where channelid=865 and sampletime >= '2014-01-01 00:00' and sampleTime < '2014-01-02 00:00');

这将在“普通”SQL 中工作,但 Cassandra 不喜欢它。

有任何想法吗?

最佳答案

您可以在 Cassandra 2.2 中执行此类查询。较旧的 2.0 分支已经过时并且比 2.2 具有更少的查询选项。

在 2.2 中,它看起来像这样:

cqlsh:test> SELECT  * from dataraw ;

channelid | sampletime | value
-----------+--------------------------+-------
1 | 2015-08-28 06:20:38-0400 | 10
1 | 2015-08-28 06:20:49-0400 | 15
1 | 2015-08-28 06:20:57-0400 | 13

cqlsh:test> SELECT sampletime, max(value) FROM dataraw
WHERE channelid=1 AND sampletime >= '2015-08-28 06:20:38-0400'
AND sampletime <= '2015-08-28 06:20:57-0400';

sampletime | system.max(value)
--------------------------+-------------------
2015-08-28 06:20:38-0400 | 15

更多的背景知识,尽管 CQL(Cassandra 查询语言)看起来与 SQL 相似,但它对您可以执行的查询类型有很多限制。见 this .

所以你有几个选择:
  • 设置模式和查询以在 CQL 的限制范围内工作,有时依赖客户端中的代码对您实际感兴趣的行的超集进行过滤/分析。
  • 您可以创建 UDF(用户定义的函数)和用户定义的聚合函数来对查询协调器执行一些额外的工作(即使用集群资源而不是客户端资源)。
  • 您可以将 Cassandra 与 Apache Spark 配对,后者可以执行比 CQL 复杂得多的分析(但设置和使用有些复杂)。
  • 在 Cassandra 3.0 中有一个称为物化 View 的新功能,它允许您为数据定义备用主键,以支持数据集上与基表支持的不同查询模式。 Cassandra 3.0 目前处于测试版。

  • Cassandra 2.2 在 CQL 中添加了 min、max、avg 和 sum 函数,以及用户定义的函数,因此比 2.0 更强大。我认为随着时间的推移,CQL 会慢慢获得更多的 SQL 功能,但是一些传统的 SQL 操作在分布式模型中是困难的,并且需要时间来实现。

    关于cassandra - 基于统计在 cassandra 中获取数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266927/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com