Cassandra CQL выбирает строки со значениями, разными в двух столбцах

Я создаю таблицу:

CREATE TABLE T (
            I int PRIMARY KEY,
            A text,
            B text
);

Затем я добавляю два столбца X и Y, используя:

ALTER TABLE T ADD X int;
CREATE INDEX ON T (X);
ALTER TABLE T ADD Y int;
CREATE INDEX ON T (Y);

Я поместил некоторые данные, и теперь я хотел бы подсчитать строки, которые имеют разные значения для X и Y (даже XY было бы хорошо). Я пробовал что-то вроде этого:

select COUNT(*) from T where X < Y ;

Это также не работает без COUNT — просто *.

Но я получаю ошибку no viable alternative at input ';' Есть ли у вас какие-либо предложения, как преодолеть эту ошибку? Я пытался использовать счетчики вместо целых чисел, но они заставили меня помещать все данные, не являющиеся счетчиками, в первичный ключ, что в моем случае было плохой идеей...

Я использую Cassandra 1.2.6 и CQL 3.

PS могу ли я выполнить UPDATE для всех строк? без пункта WHERE или с каким-то фиктивным?


person kkonrad    schedule 17.07.2013    source источник
comment
ваша переменная Y не индексируется. Вы пытались создать индекс на Y, а затем запустить запрос.   -  person Sayed Jalil Hassan    schedule 17.07.2013
comment
Они проиндексированы.. только что представил пример, как я их добавляю и как я устанавливаю индекс для одной таблицы..   -  person kkonrad    schedule 17.07.2013
comment
вы можете взглянуть на ссылку CQL. я думаю, что такой реляционный запрос не поддерживается. для получения дополнительной информации, пожалуйста, прочитайте: cassandra.apache.org/doc/cql3/CQL.html #выберитеStmt   -  person Sayed Jalil Hassan    schedule 17.07.2013
comment
Боюсь, ты прав :/   -  person kkonrad    schedule 24.07.2013


Ответы (1)


Поскольку Cassandra предпочитает простое чтение, Cassandra-способ сделать это - вставить столбец с логическим флагом при обновлении/вставке. С (вторичным) индексом вы также можете быстрее запрашивать чтение.

person Daniel Schulz    schedule 03.05.2014