如何列出所有 Cassandra 表

Cassandra 数据库中有许多表,其中包含标题为 user _ id 的列。User _ id 值是指存储在表用户中的用户。由于删除了一些用户,我想删除所有包含标题为 user _ id 的列的表中的孤立记录。

是否有办法使用 CassandraSQLContext 或任何其他内置方法或自定义过程列出所有表,以避免显式定义表列表?

140054 次浏览

有一些系统表可以提供关于存储的关键空间、表和列的信息。

在 cqlsh 控制台中尝试 run follow 命令:

  1. 获取密钥空间信息

    SELECT * FROM system.schema_keyspaces ;

  2. 收集表格信息

    SELECT columnfamily_name FROM system.schema_columnfamilies WHERE keyspace_name = 'keyspace name';

  3. 获取表格信息

    SELECT column_name, type, validator FROM system.schema_columns WHERE keyspace_name = 'keyspace name' AND columnfamily_name = 'table name';

从 V5.0. x 开始 医生

  1. 获取密钥空间信息

    SELECT * FROM system_schema.keyspaces;

  2. 收集表格信息

    SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';

  3. 获取表格信息

    SELECT * FROM system _ schema. column WHERE keyspace _ name = ‘ keyspace _ name’AND table _ name = ‘ table _ name’;

从 V6.0开始 医生

  1. 获取密钥空间信息

    SELECT * FROM system_schema.keyspaces

  2. 收集表格信息

    SELECT * FROM system_schema.tables WHERE keyspace_name = 'keyspace name';

  3. 获取表格信息

    SELECT * FROM system _ schema. column WHERE keyspace _ name = ‘ keyspace _ name’AND table _ name = ‘ table _ name’;

您可以使用 datastax 核心驱动程序和集群元数据来实现所需的目标。下面的示例将列出密钥空间中的所有表以及每个表中的列:

 Cluster cluster= Cluster.builder().addContactPoint(clusterIp).build();
Metadata metadata =cluster.getMetadata();


Collection<TableMetadata> tablesMetadata= metadata.getKeyspace("mykeyspacename").getTables();
for(TableMetadata tm:tablesMetadata){
System.out.println("Table name:"+tm.getName());
Collection<ColumnMetadata> columnsMetadata=tm.getColumns();
for(ColumnMetadata cm:columnsMetadata){
String columnName=cm.getName();
System.out.println("Column name:"+columnName);
}
}

cqlsh执行 describe tables;

如果以后发布,请检查 system _ schema 密钥空间。 来自

cqlsh > desc keyspaces;


spark_system  system_schema  "OpsCenter"  cfs_archive         "HiveMetaStore"
system_auth    cfs          demobeta            dsefs
dse_security  hypermedia     dse_leases   system_traces       dse_perf
solr_admin    system         system_distributed  dse_system

如果您看到“ system _ schema”,那么表的元数据就在这个密钥空间中。

cqlsh>use system_schema;


cqlsh>select keyspace_name,table_name from tables where keyspace_name = 'system';

要列出所有表(只列出表名) ,

DESC tables;

要列出所有表和模式(CQL 创建语句) ,

{$KEYSPACE_NAME}是密钥空间的名称。

我使用的是从官方网站下载的 Cassandra 3.11.4二进制软件包:

cql> show version;
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]

Cassandra 的 CQL 参考在这里: https://cassandra.apache.org/doc/cql3/CQL-3.0.html

尝试运行以下查询:

cqlsh> describe keyspace <keyspace_name>;

只需连接 CQLSH 并尝试以下命令

描述表格; 或

DESC 计划;

还可以“ desc keyspace;”和“ use keyspace;”查看包含“ description table”的表;

desc keyspaces;  // list all databases/collections names
use anyKeyspace;  // select any database
desc tables;      // list all tables in collection/ database