Новое в Cassandra - SliceQuery выдает ошибку Недостаточно байтов для чтения значения компонента 0

У меня возникли проблемы с запросом семейства столбцов (CF) с составным ключом из двух столбцов: comment_key и prattle_key.

Вот определение КФ:

CREATE TABLE comments (
  comment_key text,
  prattle_key text,
  parent_key text,
  depth int,
  author text,
  date_created timestamp,
  body text,
  PRIMARY KEY (comment_key, prattle_key)
) WITH
  comment='' AND
  caching='KEYS_ONLY' AND
  read_repair_chance=0.100000 AND
  gc_grace_seconds=864000 AND
  replicate_on_write='true' AND
  compaction_strategy_class='SizeTieredCompactionStrategy' AND
  compression_parameters:sstable_compression='SnappyCompressor';

Вот мой Java-код:

Composite key = new Composite();
key.addComponent(prattleKey, StringSerializer.get());
key.addComponent(commentKey, StringSerializer.get());

SliceQuery<Composite, String, String> query = HFactory.createSliceQuery(keyspace, CompositeSerializer.get(), StringSerializer.get(), StringSerializer.get());

query.setColumnFamily("comments").setKey(key).setColumnNames("parent_key", "body", "depth", "date", "author");

QueryResult<ColumnSlice<String, String>> queryResult = query.execute();
ColumnSlice<String, String> cs = queryResult.get();

Я получаю следующее сообщение об ошибке:

InvalidRequestException(why:Not enough bytes to read value of component 0)

Используя утилиту командной строки CQL, я могу просто выбрать все 3 строки в ColumnFamily, поэтому я знаю, что там есть данные.

Будем очень благодарны любой помощи! Спасибо!


person avrao    schedule 03.12.2012    source источник


Ответы (1)


При использовании составного первичного ключа первый ключ используется в качестве ключа строки (или раздела), а остальные первичные ключи используются как часть заголовков столбцов для неключевых столбцов. Например, в вашем случае имя столбца для тела столбца CQL представляет собой составное значение, состоящее из значения значения prattle_key и строки «тело». Это также означает, что строка семейства столбцов может содержать несколько строк CQL, имеющих одинаковое значение comment_key, но разные значения prattle_key.

Я думаю, что ошибка, которую вы получаете, связана с тем, что вы пытались обработать значение rowkey, которое имело только comment_key с составным типом, состоящим из двух компонентов. Измените значение ключа так, чтобы это был просто comment_key, и найдите имена столбцов, которые возвращаются с первым компонентом, равным значению prattle_key.

person Chris Gerken    schedule 28.05.2013