cassandra - 使用 cql 命令获取表的列类型
问题描述
我正在尝试使用 cql 命令获取表的列类型。我的桌子:
CREATE TABLE users (
id uuid,
name text);
现在我正在尝试获取name
列的类型。在一些选择查询的帮助下,我想得到text
输出。
我的用例是:我正在尝试drop name column only if type of name is text
我应该尝试什么脚本?
解决方案
在 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 驱动程序中的元数据类之类的东西来获取有关表结构和列类型的信息。但是,如果您以编程方式进行架构更改,则必须小心并明确等待架构协议,如下例所示。
推荐阅读
- python - 来自 Django 数据库的引用名称,而不是 id
- java - 在 JavaFX Gradle 项目中加载图像资源失败
- reactjs - React native - TypeError:未定义不是评估_useContext的对象
- html - 离子,HTML 数组
- terraform - 如果 Terraform 的条件
- domain-driven-design - DDD + CQRS + ES:实体或 dto 可以成为命令的一部分吗?
- javascript - 将事件侦听器添加到表格单元格内的类
- javascript - 如何防止我的表单的只读字段数据?
- python - 我正在使用 PIL 将大型 HDF 文件传输到 tiff 堆栈,但遇到代码问题
- java - 如何在firebase数据库中获取嵌套键