如何列出所有cassandra表

时间:2016-08-01 10:16:20

标签: scala apache-spark cassandra spark-cassandra-connector

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

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

谢谢。

8 个答案:

答案 0 :(得分:22)

cqlsh执行describe tables;

答案 1 :(得分:13)

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

尝试在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';

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

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

答案 2 :(得分:5)

您可以使用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);
        }
    }

答案 3 :(得分:2)

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

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css"> <table> <tbody> <tr> <td><span class="bl-status">listed</span> Apple</td> </tr> <tr> <td><span class="bl-status">not_listed</span> Guava</td> </tr> <tr> <td><span class="bl-status">not_listed</span> Banana</td> </tr> <tr> <td><span class="bl-status">listed</span> Grape</td> </tr> <tr> <td><span class="bl-status">not_listed</span> Orange</td> </tr> <tr> <td><span class="bl-status">listed</span> Mango</td> </tr> </tbody> </table> <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

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

DESC tables;,而DESC {$KEYSPACE_NAME}是键空间的名称。

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

{$KEYSPACE_NAME}

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

对于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

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

cqlsh>use system_schema;

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

答案 6 :(得分:1)

尝试运行以下查询:

cqlsh> describe keyspace &lt;keyspace_name&gt;;

答案 7 :(得分:0)

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

描述表格;或

DESC SCHEMA;

您还可以“描述键空间;”和“使用键空间”;您想在其中看到带有“描述表”的表的地方