Кассандра Фильтр две колонны - PullRequest
0 голосов
/ 06 февраля 2019

Есть ли способ фильтрации больше, чем один столбец и меньше, чем другой, или для моделирования соответствующим образом?

create table foo (id int, low int, high int, primary key (id, low, high));

Эти запросы работают:

select * from foo;
select * from foo where id = 1 and  low < 0;

Но этот запрос не:

select * from foo where id = 1 and  low < 0 and high >10;

и приводит к:

InvalidRequest: Ошибка от сервера: code = 2200 [Invalid query] message = "Столбец кластеризации" высокий "не может быть ограничен (предыдущий столбец" низкий "ограничен отношением не-EQ)"

Iв настоящее время прибегают к разрешению фильтрации.Он находится на одном разделе, и трассировки для сценариев, которые намного превышают ожидаемые сценарии, выполняются в приемлемых диапазонах, но мне интересно, есть ли лучший способ смоделировать таблицу, чтобы все получали информацию, не приводя к фильтрации?

1 Ответ

0 голосов
/ 07 февраля 2019

Единственное, что, на мой взгляд, вы могли бы сделать, это выполнить фильтрацию в материализованном представлении для значения high следующим образом:

CREATE MATERIALIZED VIEW IF NOT EXISTS foo_high_first 
AS SELECT id, low, high FROM foo
WHERE id IS NOT NULL AND low IS NOT NULL AND high IS NOT NULL
PRIMARY KEY (id, high, low);

Затем вы можете выполнить следующий запрос:

cqlsh:my_keyspace> select * from foo_high_first where id = 1 and high > 3;

 id | high | low
----+------+-----
  1 |    6 |   1

В приложении необходимо выполнить пересечение между низкими и высокими значениями.

Кроме того, имейте в виду, что вы можете заказать столбцы кластеризации, таким образом отсортировав старшие и младшие числа.

...