如何使用Hector检索Cassandra keyspace/columnfamily中的密钥列的名称?

问题描述:

我想将Cassandra keyspace/columnfamily行转换为JSON字符串。我当前的代码(片段):如何使用Hector检索Cassandra keyspace/columnfamily中的密钥列的名称?

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(); 

从该行中,我可以很容易地得到所有的列名/值(我用的是杰克逊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。没有人似乎有这种能力(虽然也许有一个查询可以针对模板运行?)

+0

行按其名称由其键和列标识。也许你可以澄清你的意思是“键列”的名字? –

+0

包含KEY值的列的名称。例如,它可以是“id”,也可以是“UUID” - 它不存在于我的命令生成的HC列的值中。 –

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

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

+0

是的,我有一个与Datastax :)的工作版本。我只是希望将它全部放在Hector中,因为这是我公司/组织的其他用途。 –