【问题标题】:How to write Cassandra query with discontinuous values for a column in the where clause如何为 where 子句中的列编写具有不连续值的 Cassandra 查询
【发布时间】:2020-05-13 19:48:20
【问题描述】:

我有几年间隔 1 分钟的 power_drawl 时间序列数据。也就是说,每天将有 1440 个(60 分钟 * 24 小时)值。

这是我的桌子,

CREATE TABLE power_drawl (date date, time time, x_power_mw float, PRIMARY KEY(date, time)) WITH CLUSTERING ORDER BY (time ASC); 




SELECT * FROM power_drawl WHERE date='2016-01-01' and time>='00:00:00' and time<='00:10:00' ALLOW FILTERING ;   

 date       | time               | x_power_mw
------------+--------------------+--------------------------------
 2016-01-01 | 00:00:00.000000000 |                          23.95
 2016-01-01 | 00:01:00.000000000 |                          24.17
 2016-01-01 | 00:02:00.000000000 |                          23.52
 2016-01-01 | 00:03:00.000000000 |                          21.17
 2016-01-01 | 00:04:00.000000000 |                          24.53
 2016-01-01 | 00:05:00.000000000 |                          25.06
 2016-01-01 | 00:06:00.000000000 |                           28.5
 2016-01-01 | 00:07:00.000000000 |                          25.52
 2016-01-01 | 00:08:00.000000000 |                          25.66
 2016-01-01 | 00:09:00.000000000 |                           25.4
 2016-01-01 | 00:10:00.000000000 |                          23.25

现在我有这样的查询
“2011 年至 2015 年 1 月每天下午 12 点至下午 2 点之间,x_power_mwmax 值是多少,何时发生”
“在上面的查询中,如果我想查询 2011 年和 2015 年而不是 2011 年到 2015 年(不连续值)怎么办?”

对我来说,为这些查询编写单个 cql 查询似乎是不可能的。
1) 如何编写带有where 子句的cql 查询,其年份为2011 年和2015 年而不是2011 年至2015 年?

2) 每年分别查询并在客户端计算最大值是个好主意吗?

3) 我的data model 对于这些查询是否正确,如果不是正确的(我应该将年份与日期分开以添加为复合集群键)?

【问题讨论】:

    标签: nosql datastax cassandra-3.0


    【解决方案1】:
    1. 因为在您的情况下,您有一个 date 作为分区键,您需要生成 2011-2015 年 1 月所有天的所有可能值,并并行执行查询(不是建议在分区键上使用IN,因为它会使协调节点过载)。在您的情况下,您将执行 155 个查询。

    2. 1234563 .但是可以在客户端执行过滤,因为您只传输 120 个值(每分钟 1 个)。
    3. 理论上,您可以使用年份作为分区键并使用 timestamp 而不是 time 作为集群列,但在这种情况下,每个分区将获得约 50 万个单元格,高于建议的最大值 100k /划分。您仍然可以使用日期,但将其截断为月份,因此每个分区将获得约 45k 单元格,并继续使用 timestamp 作为聚类列。但它可能无助于每天只选择特定范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 2019-09-02
      • 2015-08-15
      • 2019-08-08
      • 2018-12-12
      • 2019-08-01
      • 1970-01-01
      相关资源
      最近更新 更多