如何在CQL 3.0中使用sstableloader

时间:2013-07-23 06:29:28

标签: cassandra bulkloader cql3 cassandra-cli

我正在尝试将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'};

我使用SSTableSimpleUnsortedWriter创建sstables,如下所示:

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加载到EC2中的4节点集群中。但我无法查询它们。它只是等待并最终给出RPC超时错误。 我可以使用CLI创建的columnfamily成功上传和查询,如Datastax Developer Blog所示。

请告诉我如何使用CQL正确使用SSTableSimpleUnsortedWriter ....

我的最终目标是使用CQL中的复合键创建一个列家族(复制一个SQL表),并使用一个非常大的csv导出文件从SSTableLoader上传数据。

2 个答案:

答案 0 :(得分:1)

以下是cf的cli DESCRIBE输出:

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作为分区密钥验证程序。在编码为UTF8时,您不需要对ByteBufferUtil.bytes(String)调用执行任何操作。
  • CQL中的列名始终是复合类型(只要您不使用集合),您需要使用db.marshal.CompositeType构建列名,其中复合列表中的最后一个类型是UTF8。
  • 查看您的表的cli LIST输出,它包含一个空白名称和值的列,您需要添加,例如:

    RowKey:123 => (column =,value =,timestamp = 1376298826474000) => (column = firstname,value = 416c6578,timestamp = 1376298826474000) => (column = lastname,value = 4861736c656875727374,timestamp = 1376298826474000)

答案 1 :(得分:0)

或者,您可以批量加载到与旧列族格式向后兼容的“静态列”表中:

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

SSTableLoader示例应该使用旧式的CQL前格式。