1

我正在尝试使用 cassandra 对具有许多传感器(> 50k)的时间序列数据进行建模。由于我想同时对多个传感器进行过滤,我认为使用以下(宽行)模式可能是合适的:

CREATE TABLE data(
 time timestamp, 
 session_id int, 
 sensor text, 
 value float, 
 PRIMARY KEY((time, session_id), sensor)
);

如果每个传感器值都是 RDBMS 中的一列,我的查询理想情况下如下所示:

SELECT * FROM data WHERE sensor_1 > 10 AND sensor_2 < 2;

翻译成我的 cassandra 模式,我假设查询可能如下所示:

SELECT * FROM data 
WHERE 
  sensor = 'sensor_1' AND 
  value > 10 AND 
  sensor = 'sensor_2' AND 
  value < 2;

我现在有两个问题:

  1. cassandra 告诉我,我只能在传感器列上过滤一次:

如果传感器包含 Equal,则传感器不能受多个关系的限制

  1. 显然,价值过滤目前没有意义。我不知道如何在查询中表达传感器和值之间的关系,以便过滤同一(宽)行中的多个列。

我知道第一个问题的解决方案是使用 CQL 的IN子句。然而,这并不能解决第二个问题。

这种情况甚至适合 cassandra 吗?

提前谢谢了。

4

1 回答 1

1

您可以尝试在此处使用 IN 子句。所以你的查询会是这样的:

SELECT * FROM data 
WHERE time = <time> and session_id = <session id> 
    AND sensor IN ('sensor_1', 'sensor_2') 
    AND value > 10 AND value < 2
于 2017-08-08T18:08:15.847 回答