【问题标题】:How to fetch Primary Key/Clustering column names for a particular table using CQL statements?如何使用 CQL 语句获取特定表的主键/聚类列名?
【发布时间】:2021-12-30 11:08:12
【问题描述】:

我正在尝试获取特定表/实体的主键/集群键名称,并在我的 JPA 接口(扩展 CassandraRepository)中实现相同的查询。 我不确定是否是这样的:

@Query("DESCRIBE TABLE <table_name>)
public Object describeTbl();

在这里可以工作,因为describe 不是有效的 CQL 语句,如果可以,Object 的类型是什么?

建议?

【问题讨论】:

    标签: cassandra cql spring-data-cassandra


    【解决方案1】:

    您可以尝试的一件事是查询system_schema.columns 表。它由keyspace_nametable_name 键入,可能是您在此处寻找的内容:

    > SELECT column_name,kind FROM system_schema.columns
      WHERE keyspace_name='spaceflight_data'
      AND table_name='astronauts_by_group';
    
     column_name       | kind
    -------------------+---------------
               flights |       regular
                 group | partition_key
                  name |    clustering
     spaceflight_hours |    clustering
    
    (4 rows)
    

    【讨论】:

    • 这更像是我正在寻找的答案。 +1
    • 主要问题是 Cassandra 2 和 3 之间的架构存在差异,驱动程序抽象了这种差异
    【解决方案2】:

    DESCRIBE TABLE 仅在包含CASSANDRA-14825 修复的 Cassandra 4 中受支持。但它可能对您没有多大帮助,因为它只返回表示 CREATE TABLE 语句的文本字符串,并且您需要解析文本以提取主键定义 - 这是可行的,但可能会很棘手,具体取决于主键的结构.

    或者您可以获取底层的Session 对象并通过getMetadata 函数获取对实际metadata object 的访问权限,该metadata object 允许获取有关键空间和表的信息,包括有关架构的信息。

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2011-03-25
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2011-04-16
      相关资源
      最近更新 更多