如何使用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。没有人似乎有这种能力(虽然也许有一个查询可以针对模板运行?)
Thrift列族的行键没有明确的名称。
如果您使用的是CQL表,则构成主键的列具有名称,但Hector可能不适合访问它们,因为它是在CQL成为数据建模的主要方式之前开发的。无论哪种情况,如果您使用的是Cassandra 1.2+,我强烈建议您在https://github.com/datastax/java-driver处查看Datastax驱动程序。
是的,我有一个与Datastax :)的工作版本。我只是希望将它全部放在Hector中,因为这是我公司/组织的其他用途。 –
行按其名称由其键和列标识。也许你可以澄清你的意思是“键列”的名字? –
包含KEY值的列的名称。例如,它可以是“id”,也可以是“UUID” - 它不存在于我的命令生成的HC列的值中。 –