Получить строки из таблицы Cassandra, которая соответствует column1 = '123' или column2 = '123' - PullRequest
1 голос
/ 27 мая 2020

Я узнал, что Cassandra не поддерживает OR в предложении where, но мне нужен эквивалент для следующего запроса:

select * from table where column1 = '123' or column2 = '123';

Поскольку OR не поддерживается в Cassandra, могу ли я использовать пакетные запросы, например следующее и объедините результат в программе, и насколько он эффективен?

[ select * from table where column1 = '123' , select * from table where column2 = '123']

Если нет, есть ли способ достичь вышеуказанного простого logi c.

В моем случае, оба столбца column1 и column2 вместе являются первичным ключом. т.е. составной ключ раздела.

Могу ли я объединить столбец1 и столбец2 в виде списка [столбец1, столбец2] и запрос, например:

select * from table where list contains '123';

и создание вторичного индекса в списке

1 Ответ

1 голос
/ 27 мая 2020

Как вы сказали, вы не можете выполнять запросы с помощью или, также вы не можете выполнить эти два запроса без использования вторичного индекса или разрешить фильтрацию .

select * from table where column1 = '123' 
select * from table where column2 = '123'

в соответствии с этими запросами Возможные варианты:

  • column1 или column2 - ключ раздела
  • column1 и column2 - ключ раздела
  • один из них - раздел key и other - это ключ кластеризации.

, и вы не можете запросить их в соответствии с этими возможностями. Если вы хотите запросить их без allow filtering, вам необходимо создать вторичный индекс. После этого вы можете сделать два запроса и сравнить их на уровне вашего приложения. Вторичный индекс - это не серебряная пуля, есть недостатки, которые хорошо объяснены в здесь и здесь .

Если вам нужен этот тип запросов or, тогда он может быть лучше изменить дизайн ваших таблиц в соответствии с запросами, чтобы избежать вторичных индексов, подобных этим, или разрешить фильтрацию.

...