ИЛИ операция в cassandra cqlsh

SELECT * FROM sample WHERE id = '2' OR uid = '1';

Я получил ошибку в cqlsh

Bad Request: line 1:36 missing EOF at 'OR'

Возможно ли для оператора or в Cassandra использовать клиент cqlsh?


person Hari Haran    schedule 25.09.2013    source источник


Ответы (2)


@Хари

Операция ИЛИ не поддерживается CQL. Поддерживается только операция И с некоторыми ограничениями.

Так или иначе, язык CQL похож на SQL, но семантика сильно отличается. Я предлагаю ознакомиться с документацией< /strong> для более подробной информации.

person doanduyhai    schedule 25.09.2013
comment
Затем, как я могу выполнить операцию ИЛИ (например, SQL) в CQL - person Hari Haran; 25.09.2013
comment
Вы должны инициировать 2 запроса, а затем объединить результаты (коллекцию) на стороне клиента. Другого пути сейчас нет. - person doanduyhai; 25.09.2013
comment
может предложить мне любой пример для этого, потому что я очень новичок в кассандре - person Hari Haran; 25.09.2013
comment
Как сказал @doanduyhai, просто запустите два отдельных запроса и объедините результаты на стороне клиента: SELECT * FROM sample WHERE id = '2'; и SELECT * FROM sample WHERE uid = '1'; - person Ike Walker; 25.09.2013
comment
спасибо, @doanduyhai прав, но я боюсь, насколько это эффективно при слиянии двух результирующих запросов. Если я объединим два результирующих запроса, я подумал, что это может стать сложным, потому что у меня много данных в таблице. - person Hari Haran; 26.09.2013

Хотя doanduyhai в принципе прав, есть оператор IN, если вам нужно ограничить один и тот же столбец:

cqlsh:demodb> SELECT * FROM sample WHERE id IN ('2','1');

Взгляните на документация.

Тип доступной вам операции сильно зависит от модели данных. Я настоятельно рекомендую раздел модели данных в документации datastax.

person John    schedule 25.09.2013
comment
Осторожно, предложение WHERE не применяется к одному и тому же столбцу: WHERE id = '2' OR uid = '1';. Первое условие применяется к столбцу id, второе условие применяется к столбцу uid. Предложение IN здесь не работает - person doanduyhai; 25.09.2013
comment
Я добавил акцент на предложенный вариант использования. Ваш запрос кажется немного странным и предполагает, что необходима дополнительная работа над моделью данных. Если вам нужно запросить два совершенно разных индекса, вы можете создать два по-разному организованных семейства таблиц/столбцов для оптимальной производительности чтения. - person John; 25.09.2013
comment
@omnibear спасибо за ваш ответ .. Но в вашем случае вы сравнивали значения с одним именем столбца в качестве идентификатора. И мне нужно сравнить два столбца как ID и UID. И doanduyhai прав, но я боюсь, насколько он эффективен при слиянии с двумя результирующими запросами. Если я объединим два результирующих запроса, я подумал, что это может стать сложным, потому что у меня много данных в таблице. - person Hari Haran; 26.09.2013
comment
@HariHaran Не могли бы вы обновить свой вопрос и дать нам пример использования? Это помогло бы лучше понять проблему и, возможно, найти другое решение. - person John; 26.09.2013
comment
идентификатор | жидкость | истек | значение ----+------+--------+----- 4 | бабу | хари | как дела 3 | хари | бабу | как дела 5 | бабу | хари | это тестовый пример 2 | хари | бабу | как дела 1 | хари | бабу | как дела ВЫБЕРИТЕ значение ИЗ теста, ГДЕ id = 'babu' OR expid = 'babu'; я хочу результат, если babu в значении результата uid или expid. если я использую два запроса выбора, это означает, что я получу результат отдельно, я не могу объединить чат значений - person Hari Haran; 26.09.2013
comment
@HariHaran, пожалуйста, отредактируйте исходный вопрос и добавьте дополнительную информацию (комментарии для этого не годятся). Пожалуйста, опишите ваш вариант использования / какую информацию ваше приложение должно хранить в Cassandra и какие запросы вы хотите выполнять на абстрактном уровне. - person John; 26.09.2013