我正在尝试使用cql命令获取表的列类型。 我的桌子:
CREATE TABLE users (
id uuid,
name text);
现在,我正在尝试获取name
列的类型。借助一些选择查询,我希望获得text
作为输出。
我的用例是:我正在尝试drop name column only if type of name is text
我应该尝试什么脚本?
答案 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 ;