условный запрос не работает в cql 3.0.0

я пытаюсь выполнить условный запрос в cassandra CQL, но он дает мне ошибку, например

cqlsh:events> select * from standardevents where name=ActivityPg_view;

я выполняю вышеуказанный запрос, он выдает ошибку ниже

Неверный запрос: строка 1:55 не имеет жизнеспособной альтернативы при вводе ';' Возможно, вы хотели использовать CQL 2? Попробуйте использовать опцию -2 при запуске cqlsh.

cqlsh:events> выберите * из стандартных событий, где name='ActivityPg_view';

я выполняю вышеуказанный запрос, он выдает ошибку ниже

Неверный запрос: в предложении по столбцам с оператором Equal нет индексированных столбцов.

когда я пытаюсь выполнить с помощью CQL 2

cqlsh:events> select * from standardevents where name=ActivityPg_view;

это дает мне следующую ошибку,

Неверный запрос: нет индексированных столбцов в предложении by-columns с оператором «равно»

cqlsh:events> выберите * из стандартных событий, где name='ActivityPg_view';

это дает мне следующую ошибку,

Неверный запрос: нет индексированных столбцов в предложении by-columns с оператором «равно». Возможно, вы хотели использовать CQL 3? Попробуйте использовать параметр -3 при запуске cqlsh.

так может ли кто-нибудь предложить проблему и как решить эту проблему и выполнить условный запрос?

cqlsh> DESCRIBE COLUMNFAMILY events.standardevents;

CREATE TABLE standardevents (
    uuid timeuuid PRIMARY KEY,
    data text,
    name text,
    time text,
    tracker text,
    type text,
    userid text
  ) WITH bloom_filter_fp_chance=0.010000
    AND caching='KEYS_ONLY'
    AND comment=''
    AND dclocal_read_repair_chance=0.000000
    AND gc_grace_seconds=864000
    AND read_repair_chance=0.100000
    AND replicate_on_write='true'
    AND populate_io_cache_on_flush='false'
    AND compaction={'class': 'SizeTieredCompactionStrategy'}
    AND compression={'sstable_compression': 'SnappyCompressor'};

person Helping Hand..    schedule 06.01.2014    source источник
comment
Пожалуйста, включите вывод из DESCRIBE COLUMNFAMILY events.standardevents   -  person AndySavage    schedule 06.01.2014
comment
@AndySavage: я отредактировал свой вопрос.   -  person Helping Hand..    schedule 06.01.2014


Ответы (2)


В вашей таблице (CF) нет поля с именем courseid (отсюда и ошибка «Неопределенное имя courseid в предложении where»). Вы не можете запросить то, чего не существует.

Вы ожидали там это поле? (Ваш PK для этой таблицы называется «uuid», если это поможет) Вы запрашиваете правильную таблицу? Больше нечего предложить.

Изменить: после обновления

В вашей попытке CQL3 отсутствуют кавычки вокруг имени, но это в стороне ... В Cassandra вы не можете произвольно запрашивать неключевые столбцы. Cassandra - это секционированное хранилище строк, и на самом деле оно не предназначено для выполнения запросов так, как вы пытаетесь.

Вы можете добавить вторичный индекс, чтобы исправить это, но вы должны знать, что это не так, как в традиционном SQL. Наличие 2-го индекса должно поразить все узлы в кластере, чтобы выполнить запрос. Также не идеально, если ваши данные имеют большое количество элементов.

В Cassandra общая предпосылка заключается в том, что хранилище дешево, и вы должны основывать свою модель на своем запросе, а не на ваших данных. Денормализация всего. Например, если вам нужно извлекать события по имени, вам следует создать таблицу с ключами по имени и включать все необходимые данные о событиях. Таким образом, их чтение (по сути) и операция O (1).

person AndySavage    schedule 06.01.2014
comment
@Спасибо, AndySavage, но это то же самое, даже если поле присутствует, я отредактировал свой вопрос с полем, которое присутствует, но результат тот же .. вы можете посмотреть еще раз? - person Helping Hand..; 07.01.2014

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

Пример:

CREATE INDEX standardevents_index ON standardevents (name);
person user3008287    schedule 07.01.2014