4

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

4

3 回答 3

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

于 2012-07-09T15:19:46.937 回答
1

这个答案有几个部分。

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

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

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

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

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

于 2012-07-09T12:05:15.963 回答
0

尝试这个:

select columnfamily_name from system.schema_columnfamilies where keyspace_name=‘mykeyspace';
于 2014-05-01T15:36:46.353 回答