如何使用Hector检索Cassandra键空间/列系列中的键列名称?

时间:2015-01-17 01:56:22

标签: java json cassandra cql hector

我想将Cassandra键空间/ columnfamily行转换为JSON字符串。我目前的代码(片段):

RangeSlicesQuery<K, N, V> rangeSlicesQuery = HFactory
    .createRangeSlicesQuery(this.keyspace, this.kSerializer, this.nSerializer, this.vSerializer)
    .setColumnFamily(this.columnFamily)
    .setRange(null, null, false, 100)
    .setRowCount(1000);

this.results = this.rangeSlicesQuery.execute();
this.resultRows = this.results.get();
this.resultRowsIterator = this.resultRows.iterator();

Row<K, N, V> row = this.resultRowsIterator.next();

从行开始,我可以轻松获取所有列名/值(我使用Jackson JSON API创建JSON):

List<HColumn<N, V>> columns = row.getColumnSlice().getColumns();

for(HColumn<N, V> column : columns) {
    node.put(column.getName().toString(), column.getValue().toString());
}
System.out.println(node.toString());

我的问题是,如何获取密钥列名称?我知道我可以通过以下方式获得行的关键值:

row.getKey();

但我还没有找到任何方法来获取关键列的名称,例如row.getKeyColumnName()。我已经尝试过查看KeySpaceDefinition,ColumnFamilyDefinition,ColumnDefinition和ColumnFamilyTemplate。他们似乎都没有这种能力(虽然可能有一个可以针对模板运行的查询?)

1 个答案:

答案 0 :(得分:1)

Thrift列族的行键没有明确的名称。

如果你正在使用CQL表,构成主键的列有名称,但是Hector可能不适合访问它们,因为它是在CQL成为建模数据的主要方式之前开发的。在任何一种情况下,如果您使用Cassandra 1.2 +,我强烈建议您在https://github.com/datastax/java-driver查看Datastax驱动程序。