如何使用 CQL 语句获取特定 table 的主要 Key/Clustering 列名称?

How to fetch Primary Key/Clustering column names for a particular table using CQL statements?

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

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

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

建议?

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

或者您可以获得底层 Session 对象,并通过 getMetadata 函数访问实际的 metadata object,从而获得有关键空间和表的信息,包括有关模式的信息。

您可以尝试的一件事是查询 system_schema.columns table。它由 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)