InvalidQueryException, несмотря на наличие вторичного индекса?

У меня есть семейство столбцов, описанное ниже. У меня есть вторичный ключ для столбца имени.

CREATE TABLE group (
      pid timeuuid,
      members map<bigint, boolean>,
      name text,
      PRIMARY KEY ((pid))
    ) WITH
      bloom_filter_fp_chance=0.010000 AND
      caching='KEYS_ONLY' AND
      comment='' AND
      dclocal_read_repair_chance=0.100000 AND
      gc_grace_seconds=864000 AND
      index_interval=128 AND
      read_repair_chance=0.000000 AND
      replicate_on_write='true' AND
      populate_io_cache_on_flush='false' AND
      default_time_to_live=0 AND
      speculative_retry='99.0PERCENTILE' AND
      memtable_flush_period_in_ms=0 AND
      compaction={'class': 'SizeTieredCompactionStrategy'} AND
      compression={'sstable_compression': 'LZ4Compressor'};

    CREATE INDEX pidx ON group(name);

Но query при равенстве столбца name из java-драйвера дает мне

com.datastax.driver.core.exceptions.InvalidQueryException: No indexed columns present in by-columns clause with Equal operator

Мой запрос, как показано ниже. Все результаты поиска в Google касаются либо отсутствия secondary index, либо использования некоторых реляционных операторов, не связанных с равенством.

В чем причина этой ошибки, несмотря на наличие вторичного индекса?

Вот мой запрос: SELECT * FROM group WHERE name ='Name'

Обновление: та же схема работает на моем локальном сервере cassandra, но не на сервере, предоставленном нашей компанией.

В любом случае он работает из окна cqlsh, но в случае удаленного сервера он не работает через драйвер java datastax. Другие типы запросов работают нормально.

Спасибо.


person pinkpanther    schedule 25.11.2014    source источник
comment
даже не комментарий? кажется....   -  person pinkpanther    schedule 25.11.2014
comment
Я просто следовал вашим точным шагам, и это сработало для меня в cqlsh. Можете ли вы повторить шаг создания индекса?   -  person BrianC    schedule 25.11.2014
comment
Я даже пробовал это на своем локальном сервере, он работает .... но я нахожусь в рабочей среде, я говорю об удаленном сервере, предоставленном нашей компанией, где хранятся пространства ключей.   -  person pinkpanther    schedule 25.11.2014
comment
Это происходит для каждого семейства столбцов, из cqlsh он работает, но из java он не работает...   -  person pinkpanther    schedule 25.11.2014
comment
@BrianC Есть ли шанс, что это связано с конфигурацией пространств ключей cassandra нашей компании?   -  person pinkpanther    schedule 25.11.2014
comment
У вас есть CREATE разрешения в вашей рабочей среде?   -  person Aaron    schedule 25.11.2014
comment
Я надеюсь Да. Я создал таблицу, выше приведена версия таблицы описания. Задача была назначена одна. Другие запросы работали, например, операторы select * или insert.   -  person pinkpanther    schedule 25.11.2014
comment
Является ли кластер удаленных серверов одним узлом или несколькими узлами? Возможно (но маловероятно), что индекс неправильно распространился на все узлы и что cqlsh и ваше Java-приложение подключаются к разным узлам. Кроме того, какая версия драйвера Java и Cassandra используются, и совпадают ли локальная и удаленная версии Cassandra?   -  person BrianC    schedule 25.11.2014
comment
Насколько я могу судить: Несколько узлов, версия драйвера 2.1.0 (но я пробовал с новой версией с тем же результатом). Это произошло со многими семействами столбцов, над которыми работали другие, поэтому это не может быть случайной проблемой распространения.   -  person pinkpanther    schedule 25.11.2014


Ответы (1)


Только что пробежался по твоему коду. Создал упомянутую выше таблицу (используя копирование и вставку только для того, чтобы убедиться, что все, что вы сделали правильно), создал файл index. Все работает. Это приводит к одному из двух выводов:

  • Не удалось создать индекс, что привело к сообщению об ошибке, которое вы видите. (мои деньги на этом...)
  • Возможно, вы используете неправильное пространство ключей.
person Lyuben Todorov    schedule 25.11.2014
comment
Я даже пробовал это на своем локальном сервере, он работает .... но я нахожусь в рабочей среде, я говорю об удаленном сервере, предоставленном нашей компанией, где хранятся пространства ключей. - person pinkpanther; 25.11.2014
comment
Проблема одинакова для всех пространств столбцов. Если создание индекса является проблемой, я думаю, что это не должно работать из клиента cqlsh. Он работает из cqlsh, он не работает из java-программы. - person pinkpanther; 25.11.2014
comment
@pinkpanther Я думаю, это единичный случай. Попробуйте заново создать пару ks.cf с индексом в тестовой таблице, чтобы посмотреть, что произойдет. - person Lyuben Todorov; 25.11.2014