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

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

最好的方法,如果你使用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';