Как перечислить все имена столбцов в семействе столбцов в Cassandra?


Я использую Cassandra, и я хочу сделать браузер данных, который показывает содержимое любого семейства столбцов. Мне нужно получить имена столбцов, чтобы настроить сетку пользовательского интерфейса. Можно ли собрать имена столбцов во всех строках?

3 4

3 ответа:

Лучший способ, если вы используете Cassandra 1.1:

SELECT column_name FROM system.schema_columnfamilies WHERE keyspace_name = X AND columnfamily_name = Y

См. также http://www.datastax.com/dev/blog/schema-in-cassandra-1-1

Этот ответ состоит из нескольких частей.

Во-первых, чтобы ответить на ваш конкретный вопрос, вы должны использовать sliceQuery, чтобы получить все столбцы в строке. Передайте пустой ByteBuffer в качестве начального и конечного значений, чтобы эффективно запросить все столбцы:
ByteBuffer empty = ByteBufferUtil.EMPTY_BYTE_BUFFER;       
sliceQuery.setRange(empty,empty,false,100);
Во-вторых, необходимо сделать предположение о том, что модель данных хранится в семействе столбцов.

Если модель данных статична (одна строка на объект, один столбец на атрибут), то имена столбцов, которые вы получаете обратно, должны быть имена столбцов, которые вы хотите отобразить. Однако если данные хранятся в динамическом режиме (один объект в столбце, все объекты с одинаковым первичным ключом, хранящиеся в одной строке) - например, во временном ряду, - то необходимо понять, как следует интерпретировать имена столбцов (возможно, составные). Еще одно очень распространенное использование динамического подхода-это способ сохранения семейств столбцов при определении через CQL.

Я должен добавить, что нет способа сказать, как семейство столбцов используется для хранения объектов. Существует схема, которую можно запросить, но она только говорит вам, как данные должны быть отформатированы, когда они сохраняются, а не как данные (и имена атрибутов) сериализуются и десериализуются.

Попробуйте это:

select columnfamily_name from system.schema_columnfamilies where keyspace_name=‘mykeyspace';