Cassandra:获取列家族的列名?

use*_*879 5 cql cassandra cql3

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

abh*_*bhi 11

如果你想用CQL3获取特定表的列名,那么我想尝试一下

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

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


Lyu*_*rov 10

您可以使用system键空间执行此操作:

SELECT column_name FROM system.schema_columnfamilies 
  WHERE keyspace_name = 'testks' AND columnfamily_name = 'testcf';
Run Code Online (Sandbox Code Playgroud)

在cqlsh中输出(使用cql3):

 column_name
-------------
    password
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法计算列的键:

SELECT key_aliases FROM system.schema_columnfamilies WHERE keyspace_name='testks' 
AND columnfamily_name='testcf';
Run Code Online (Sandbox Code Playgroud)

输出:

 key_aliases
--------------
 ["username"]
Run Code Online (Sandbox Code Playgroud)


Pat*_*ick 6

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

  1. 获取列名称:

    SELECT column_name FROM system.schema_columns WHERE keyspace_name = 'KeySpaceName' AND columnfamily_name = 'TableName';
    
    Run Code Online (Sandbox Code Playgroud)
  2. 获取列系列名称,即表名称:

    select columnfamily_name from system.schema_columnfamilies where keyspace_name='KeySpaceName';
    
    Run Code Online (Sandbox Code Playgroud)


Fre*_*eak 5

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

SELECT * FROM system_schema.columns WHERE keyspace_name = 'xxxx' AND table_name = 'xxx';
Run Code Online (Sandbox Code Playgroud)