【问题标题】:Cassandra: get column names of a columnfamily?Cassandra:获取列族的列名?
【发布时间】:2013-04-17 09:14:23
【问题描述】:

我想知道 CQL3 中是否有一个查询允许您获取具有静态架构的特定列族的列名?
在此先感谢:)

【问题讨论】:

    标签: cassandra cql cql3


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢!其实我不知道女巫的答案来验证两者是否正确和有帮助,再次感谢;)
    • 实际上这适用于 Cassandra 2,CQL3 但不适用于上述,以获取所有列名......
    • 将 * 更改为 column_name,您将获得 columnfamily 中所有列的名称
    【解决方案2】:

    您可以使用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"]
    

    【讨论】:

    • 非常感谢,这真的很有帮助!
    • @Lyuben 我可以在列名上做一个类似于列的 Slice 的范围吗?例如,如果日期是列名,则在两个日期之间获取列名
    【解决方案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';
      

    【讨论】:

      【解决方案4】:

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

      SELECT * FROM system_schema.columns WHERE keyspace_name = 'xxxx' AND table_name = 'xxx';
      

      【讨论】:

        猜你喜欢
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        • 2013-09-18
        • 2020-05-28
        • 2012-07-08
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多