Я использую Cassandra и хочу создать браузер данных, который показывает содержимое любого семейства столбцов. Мне нужно получить имена столбцов для настройки сетки пользовательского интерфейса. Можно ли собрать имена столбцов во всех строках?
Как перечислить все имена столбцов в семействе столбцов в Cassandra?
Ответы (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
SELECT column_name FROM system.schema_columns WHERE keyspace_name = ? AND columnfamily_name = ?
- person Andrew Charneski; 30.01.2014
Этот ответ состоит из нескольких частей.
Во-первых, чтобы ответить на ваш конкретный вопрос, вы должны использовать 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';