如何在Cassandra中列出列族中的所有列名?

时间:2012-07-09 11:13:40

标签: java cassandra hector

我正在使用Cassandra,我想创建一个显示任何列族内容的数据浏览器。我需要获取列名来配置UI网格。是否可以收集所有行中列的名称?

3 个答案:

答案 0 :(得分:8)

最佳方式,如果您使用的是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

答案 1 :(得分:1)

这个答案有几个部分。

首先,要回答您的具体问题,您应该使用sliceQuery来连续获取所有列。将空的ByteBuffer作为起始值和结束值传递,以有效地请求所有列:

ByteBuffer empty = ByteBufferUtil.EMPTY_BYTE_BUFFER;       
sliceQuery.setRange(empty,empty,false,100);

其次,您需要假设存储在列族中的数据模型。

如果数据模型是静态的(每个对象一行,每个属性一列),那么您获取的列名应该是您要显示的列名。但是,如果数据以动态方式存储(每列一个对象,所有具有相同主键的对象存储在同一行中) - 例如在时间序列中 - 那么您需要了解列的方式需要解释名称(可能是复合的)。动态方法的另一个常见用法是通过CQL定义列族的持久化方式。

我应该补充说,没有办法告诉如何使用列族来存储对象。您可以查询架构,但这只会告诉您在数据持久化时如何格式化数据,而不是如何序列化和反序列化数据(和属性名称)。

答案 2 :(得分:0)

试试这个:

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