2016-04-06 2 views
1

Учитывая этот пример схемы таблицы:Поддерживает ли CQL3 вложенными И и ИЛИ

CREATE TABLE foo (
pk1 text, 
pk2 text, 
pk3 text, 
pk4 text, 
data map<text, text>, 
PRIMARY KEY ((pk1, pk2, pk3), pk4) 
); 

Интересно, если это возможно, чтобы иметь запрос, который выбирает различные комбинации pk2, pk3, pk4 с фиксированным pk1. Что-то вроде:

SELECT * FROM foo WHERE pk1 = 'abc' AND 
((pk2 = 'x' AND pk3 = 'y' AND pk4 = 'z') OR ((pk2 = 'd' AND pk3 = 'e' AND pk4 = 'f')); 

Я не получаю эту работу. У меня есть набор pk2, pk3, pk4 кортежей и фиксированный pk1 и вы можете выбрать все подходящие строки, используя один запрос, если это возможно (Cassandra 2.2.x).

ответ

2

Интересно, если это возможно, чтобы иметь запрос, который выбирает различные комбинации PK2, Пк3, РК4 с фиксированным ПК1.

Нет, это не так.

Как указал Доан, OR не поддерживается (пока). Это оставит вас с AND, что делает вложения WHERE условиями лишними.

Кроме того, добавление парсеров вокруг ваших AND частей также не поддерживается. Без скобок это работает, но не с ними:

[email protected]:stackoverflow> SELECT * FROM row_historical_game_outcome_data 
WHERE customer_id=123123 AND (game_id=673 AND game_time = '2015-07-01 05:01:42+0000'); 

SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:89 missing ')' at 'AND' (...=123123 AND (game_id=673 [AND] game_time...)"> 

Это, как говорится, IN предикат будет работать либо на последний раздел или последнего ключа кластеризации. Но использование его на ключ раздела считается анти-шаблоном. В любом случае, в вашем случае это будет работать (синтаксический):

SELECT * FROM foo WHERE pk1 = 'abc' AND pk2 = 'x' AND pk3 = 'y' AND pk4 IN ('z','f'); 
1

CQL поддерживает И предикат на колонках

  • , которые принадлежат к PRIMARY KEY
  • , которые индексируются вторичной системы индекса

ИЛИ предикат не поддерживается. Она будет поддерживаться в будущем усилении новой SASI secondary index

+0

Хорошо, я предполагаю, что объясняет, почему не был '.or' метода в' QueryBuilder' от datastax водителя :) – reikje

 Смежные вопросы

  • Нет связанных вопросов^_^