Фильтр для пары ключ-значение в широких рядах кассандры
Я пытаюсь смоделировать данные временных рядов со многими датчиками (> 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;
У меня сейчас две проблемы:
- Кассандра говорит мне, что я могу фильтровать столбец датчика только один раз:
датчик не может быть ограничен более чем одним отношением, если он включает в себя
- Очевидно, что фильтр значения не имеет смысла в данный момент. Я не знаю, как выразить отношение между датчиком и значением в запросе, чтобы отфильтровать несколько столбцов в одной (широкой) строке.
Я знаю, что решение первого вопроса было бы использовать 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