2013-04-17 41 views

回答

8

您可以使用system密钥空间要做到这一点:

SELECT column_name FROM system.schema_columnfamilies 
    WHERE keyspace_name = 'testks' AND columnfamily_name = 'testcf'; 

产出cqlsh(使用cql3):

column_name 
------------- 
    password 

您可以制定出关键该列使用:

SELECT key_aliases FROM system.schema_columnfamilies WHERE keyspace_name='testks' 
AND columnfamily_name='testcf'; 

输出:

key_aliases 
-------------- 
["username"] 
+0

非常感谢,这是真正的帮助! – user2090879

+0

@Lyuben我可以在与列的切片类似的列名上做一个范围吗?例如,如果日期是列名,则在两个日期之间获取列名称 – Peter

9

如果你想获得一个特定的表的列名与CQL3那么我想试试这个

select * from system.schema_columns WHERE keyspace_name='#KS' AND columnfamily_name='#CF' allow filtering;

注:keyspace_name在where子句是可选。它主要用于更好的过滤目的(比如说,在多个按键空间中同名的表)

+0

非常感谢!其实我不知道女巫的答案,以验证这两个是正确的和有益的,再次感谢;) – user2090879

+0

其实这适用于Cassandra 2,CQL3但不是上述,获取所有列名... –

+0

更改*为column_name,我只会得到列系列中所有列的名称 –

3

从我最近的测试中,我们应该使用schema_columns而不是schema_columnfamilies来获取所有列名。 schema_columnfamilies可用于获取表名称。

  1. 获得列名:

    SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName'; 
    
  2. 取得列的姓氏,即表名:

    select columnfamily_name from system.schema_columnfamilies where keyspace_name='KeySpaceName';