2012-06-25 2 views
5

У меня есть семья колонки AllLog создать чтоВставить столбец Cassandra семейство с композитным ключом

create column family LogData 
    with column_type = 'Standard' 
    and comparator = 'CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)' 
    and default_validation_class = 'UTF8Type' 
    and key_validation_class = 'CompositeType(UTF8Type,UTF8Type)'; 

, но когда я использую мутатор для вставки:

String key0 = "key0"; 
    String key1 = "key1"; 

    Composite compositeKey = new Composite(); 
    compositeKey.addComponent(key0, StringSerializer.get()); 
    compositeKey.addComponent(key1, StringSerializer.get()); 

    // add 
    mutator.addInsertion(compositeKey, columnFamilyName, HFactory.createColumn("name", "value")); 
    mutator.execute(); 

всегда через исключение:

me.prettyprint.hector.api.exceptions.HInvalidRequestException: 
InvalidRequestException(why:Not enough bytes to read value of component 0) 

Пожалуйста, помогите мне, где моя ошибка в этом коде?

ответ

2

Схема указывает компаратор как составной тип, но вставка создает столбец с одной строкой («имя»).

+0

да, я знаю это, но мне интересно, что: есть ли какое-либо решение, которое я могу создать таблицу с составным ключом, а другие колонки используют тип UTF8 ???? Я пытаюсь использовать его в cql3, но в hector я не могу вставить данные в такую ​​таблицу :(:( –

+0

Не знаете, что вы здесь задаете ... с указанной схемой, вы должны обновить код, поэтому createColumn использует Композитное имя, еще раз пересмотрите схему, чтобы сделать компаратор utf8. – libjack