如何使用 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_name
和 table_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)
我正在尝试获取特定 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_name
和 table_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)