2016-08-01 28 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. はあなたがdatastaxコアドライバおよびクラスタのメタデータを使用して欲しいものを得ることができ、テーブル情報

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

2

を取得します。以下は、各テーブルのキースペースと列のすべてのテーブルを一覧表示する例です:

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

関連する問題