2016-08-01 186 views
4

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

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

谢谢。

回答

3

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

尝试运行遵循cqlsh控制台命令:

  1. 获取keyspaces信息

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

2

你可以达到你想要使用的是什么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); 
     } 
    } 
+0

感谢您对此 – vipin