2016-08-01 183 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