2015-01-17 34 views
0

我想將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列的值中。 –

回答

1

Thrift列族的行鍵沒有明確的名稱。

如果您使用的是CQL表,則構成主鍵的列具有名稱,但Hector可能不適合訪問它們,因爲它是在CQL成爲數據建模的主要方式之前開發的。無論哪種情況,如果您使用的是Cassandra 1.2+,我強烈建議您在https://github.com/datastax/java-driver處查看Datastax驅動程序。

+0

是的,我有一個與Datastax :)的工作版本。我只是希望將它全部放在Hector中,因爲這是我公司/組織的其他用途。 –

相關問題