5

我想知道 CQL3 中是否有一个查询允许您获取具有静态模式的特定列族的列名?
提前致谢 :)

4

4 回答 4

12

如果您想使用CQL3获取特定表的列名,那么我想试试这个

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

注意: where 子句中的keyspace_name是可选的。它主要用于更好的过滤目的(例如,多个键空间中具有相同名称的表)

于 2013-04-17T11:44:58.773 回答
10

您可以使用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"]
于 2013-04-17T09:41:35.280 回答
6

根据我最近的测试,我们应该使用 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';
    
于 2015-11-02T22:15:59.587 回答
6

根据 Cassandra 3.x 的最新文档,以上所有答案都不起作用,现在显示列的查询将是这样的。

SELECT * FROM system_schema.columns WHERE keyspace_name = 'xxxx' AND table_name = 'xxx';
于 2018-07-26T08:39:46.810 回答