我正在尝试将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上传数据。
答案 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)
你至少有三个问题:
查看您的表的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前格式。