как использовать sstableloader с CQL 3.0

Я пытаюсь использовать sstableloader для таблицы, созданной с помощью CQL 3.0. Я создал таблицу в Cassandra с CQL 3 следующим образом:

CREATE TABLE users1 (
  id text PRIMARY KEY,
  firstname text,
  lastname text, 
) WITH
compaction={'class': 'SizeTieredCompactionStrategy'} AND
 compression={'sstable_compression': 'SnappyCompressor'};

Я создаю sstables с помощью SSTableSimpleUnsortedWriter следующим образом:

IPartitioner partitioner = new Murmur3Partitioner();
SSTableSimpleUnsortedWriter usersWriter = new SSTableSimpleUnsortedWriter(  
        directory, partitioner,keyspace,"users1",AsciiType.instance, null,64);
    long timestamp = System.currentTimeMillis() * 1000;
    ByteBuffer id = bytes("a11");
    usersWriter.newRow(id);
    usersWriter.addColumn(bytes("firstname"), bytes("Ticho"), timestamp);
    usersWriter.addColumn(bytes("lastname"), bytes("Richie"), timestamp);
    usersWriter.close();
    System.exit(0);

Хотя sstables сгенерированы, и я успешно загрузил sstables в кластер из 4 узлов в EC2. Но я не могу их запросить. Он просто ждет и в конце концов выдает ошибку тайм-аута RPC. Я мог бы успешно выполнить загрузку и запрос с помощью семейства столбцов, созданного с помощью CLI, как показано в Блоге разработчиков Datastax< /а>.

Пожалуйста, посоветуйте мне, как правильно использовать SSTableSimpleUnsortedWriter с CQL....

Моя конечная цель — создать семейство столбцов с составными ключами в CQL (реплицируя таблицу SQL) и загрузить данные с помощью SSTableLoader из очень большого файла экспорта csv.


person eldho    schedule 23.07.2013    source источник


Ответы (2)


Вот вывод cli DESCRIBE для вашего cf:

Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type
Default column value validator: org.apache.cassandra.db.marshal.BytesType
Columns sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type)

У вас как минимум три проблемы:

  • Вы используете AsciiType вместо UTF8Type для валидатора ключа раздела. Вам не нужно ничего делать с вашими вызовами ByteBufferUtil.bytes(String), поскольку они кодируются в UTF8.
  • Имена столбцов в CQL всегда являются составными типами, поэтому (пока вы не используете коллекции) вам необходимо создавать имена столбцов с помощью db.marshal.CompositeType, где последним типом в составном списке является UTF8.
  • Проверьте вывод cli LIST для вашей таблицы, он включает столбец с пустым именем и значением, которое вам нужно добавить, например:

    RowKey: 123 => (столбец =, значение =, отметка времени = 1376298826474000) => (столбец = имя, значение = 416c6578, отметка времени = 1376298826474000) => (столбец = фамилия, значение = 4861736c656875727374, отметка времени = 132647048)

person axle_h    schedule 12.08.2013

Кроме того, вы можете выполнить массовую загрузку в таблицу «статические столбцы», обратно совместимую со старым форматом семейства столбцов:

CREATE TABLE users1 (
  id text PRIMARY KEY,
  firstname text,
  lastname text, 
) WITH COMPACT STORAGE;

Примеры SSTableLoader должны работать со старым форматом pre-CQL.

person PLAMEN VASILEV ALEKSANDROV    schedule 25.11.2013