首页 > 解决方案 > 使用 cql 命令获取表的列类型

问题描述

我正在尝试使用 cql 命令获取表的列类型。我的桌子:

CREATE TABLE users (
    id uuid,
    name text);

现在我正在尝试获取name列的类型。在一些选择查询的帮助下,我想得到text输出。

我的用例是:我正在尝试drop name column only if type of name is text

我应该尝试什么脚本?

标签: cassandracql

解决方案


在 CQL 中,您可以从系统表中读取此数据。在 Cassandra 3.x 中,此信息位于system_schema.columns具有以下架构的表中:

CREATE TABLE system_schema.columns (
    keyspace_name text,
    table_name text,
    column_name text,
    clustering_order text,
    column_name_bytes blob,
    kind text,
    position int,
    type text,
    PRIMARY KEY (keyspace_name, table_name, column_name)
) WITH CLUSTERING ORDER BY (table_name ASC, column_name ASC);

所以你可以使用这样的查询来检索数据:

select type from system_schema.columns where keyspace_name = 'your_ks' 
and table_name = 'users' and column_name = 'name';

在 Cassandra 2.x 中,系统表的结构不同,因此您可能需要调整您的查询。

如果您以编程方式访问集群,那么驱动程序会隐藏 Cassandra 版本之间的差异,您可以使用Java 驱动程序中的元数据类之类的东西来获取有关表结构和列类型的信息。但是,如果您以编程方式进行架构更改,则必须小心并明确等待架构协议如下例所示


推荐阅读