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

时间:2019-06-19 06:04:22

标签: cassandra cql

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

CREATE TABLE users (
    id uuid,
    name text);

现在,我正在尝试获取name列的类型。借助一些选择查询,我希望获得text作为输出。

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

我应该尝试什么脚本?

2 个答案:

答案 0 :(得分:1)

您可以从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版本之间的差异,并且可以使用Metadata class from Java driver之类的东西来获取有关表的结构和列类型的信息。但是,如果您以编程方式进行模式更改,则必须小心并显式等待schema agreement,就像在following example中一样。

答案 1 :(得分:-2)

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