Фильтр для пары ключ-значение в широких рядах кассандры

Я пытаюсь смоделировать данные временных рядов со многими датчиками (> 50 КБ) с помощью кассандры. Поскольку я хотел бы выполнять фильтрацию по нескольким датчикам одновременно, я подумал, что может подойти следующая схема (широкая строка):

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

Если бы каждое значение датчика было столбцом в СУБД, мой запрос в идеале должен выглядеть так:

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

В переводе на мою схему Кассандры я предположил, что запрос может выглядеть так:

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

У меня сейчас две проблемы:

  1. Кассандра говорит мне, что я могу фильтровать столбец датчика только один раз:

датчик не может быть ограничен более чем одним отношением, если он включает в себя

  1. Очевидно, что фильтр значения не имеет смысла в данный момент. Я не знаю, как выразить отношение между датчиком и значением в запросе, чтобы отфильтровать несколько столбцов в одной (широкой) строке.

Я знаю, что решение первого вопроса было бы использовать CQL IN пункт. Это, однако, не решает вторую проблему.

Этот сценарий даже подходит для Кассандры?

Спасибо заранее.

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
Другие вопросы по тегам