如何列出所有cassandra表

Nik*_*lin 18 scala cassandra apache-spark spark-cassandra-connector

cassandra数据库中有许多表,其中包含标题为user_id的列.值user_id被引用到存储在表用户中的用户.由于某些用户被删除,我想删除包含标题为user_id的列的所有表中的孤立记录.

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

谢谢.

Dan*_*rza 45

cqlsh执行describe tables;

  • 这是列出所有表的当前最简单的方法 (5认同)
  • 为了完整起见,请首先运行`use my_keyspace;`。 (2认同)

小智 28

有系统表可以提供有关存储的键空间,表,列的信息.

尝试在cqlsh控制台中运行以下命令:

  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';

Sinse v 5.0.x Docs

  1. 获取密钥空间信息

    SELECT * FROM system.schema_keyspaces;

  2. 获取表格信息

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

  3. 获取表格信息

    SELECT * FROM system_schema.columns WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';

Sinse v 6.0 Docs

  1. 获取密钥空间信息

    SELECT * FROM system_schema.keyspaces

  2. 获取表格信息

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

  3. 获取表格信息

    SELECT * FROM system_schema.columns WHERE keyspace_name = 'keyspace_name' AND table_name = 'table_name';

  • 对于我的cassandra版本`[cqlsh 5.0.1 | Cassandra 3.11.3 | CQL规范3.4.4 | 本机协议v4]`获取键空间信息与`SELECT*FROM system_schema.keyspaces`一起使用 (3认同)
  • 并获取表信息`SELECT*FROM system_schema.tables WHERE keyspace_name ='keyspace name' (2认同)

shu*_*mar 22

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

Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要提供解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常更有帮助,质量也更好,并且更有可能吸引点赞。 (3认同)

zor*_*mic 6

您可以使用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);
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

对于DSE。如果稍后发布,请检查 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
Run Code Online (Sandbox Code Playgroud)

如果您看到“system_schema”,则表的元数据位于此键空间中。

cqlsh>use system_schema;

cqlsh>select keyspace_name,table_name from tables where keyspace_name = 'system';
Run Code Online (Sandbox Code Playgroud)