2015-01-17 1 views
0

Я хочу, чтобы преобразовать строку cassandra keyspace/columnfamily в строку JSON. Мой текущий код (фрагменты):Как получить имя столбца ключа в пространстве ключей Cassandra/columnfamily с помощью Hector?

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

Из строки, я могу получить все имена столбцов/значения легко (я использую API Jackson JSON для создания 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» - он отсутствует в значениях HColumn, сгенерированных моими командами. –

ответ

1

Ключи строк в семействах столбцов Trrift не имеют явных имен.

Если вы используете таблицу CQL, то столбцы, которые составляют ваш первичный ключ, имеют имена, но Hector, возможно, не подходит для доступа к ним, поскольку он был разработан до того, как CQL стал доминирующим способом моделирования данных. В любом случае я настоятельно рекомендую посмотреть драйвер Datastax на https://github.com/datastax/java-driver, если вы используете Cassandra 1.2+.

+0

Да, у меня рабочая версия с Datastax :). Я просто надеялся сохранить все это в Гекторе, так как это то, что использует остальная часть моей компании/организации. –