使用 cql 命令获取 table 的列类型

Get column type of a table using cql command

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

CREATE TABLE users (
    id uuid,
    name text);

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

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

我应该尝试什么脚本?

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

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 中,系统 tables 的结构不同,因此您可能需要调整查询。

如果您以编程方式访问集群,那么驱动程序会隐藏 Cassandra 版本之间的差异,您可以使用 Metadata class from Java driver to get information about table's structure and types of columns. But if you're doing schema changes programmatically, you must be careful and explicitly wait for schema agreement, like in following example.

之类的东西
select keyspace_name, table_name, column_name, type from system_schema.columns WHERE type='counter' AND keyspace_name='someName' LIMIT 100 ALLOW FILTERING ;