2017-02-26 11 views
1

CQLシェルでこのコードを使用している場合は、そのキースペース内のすべてのテーブル名を取得します。Javaを使用してCassandraでテーブル名を取得するにはどうすればよいですか?

DESCRIBE TABLES; 

私はResulSetを使用して同じデータを取得します。以下は私のJavaでのコードです。

String query = "DESCRIBE TABLES;"; 


ResultSet rs = session.execute(query); 
    for(Row row : rs) 
     { 
      System.out.println(row); 
     } 

セッションおよびクラスタのように先に初期化されているが:

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Session session = cluster.connect("keyspace_name"); 

または私はキースペースにテーブル名を取得するためのJavaコードを知りたいです。

+0

'DESCRIBE'はCLIでのみ動作します。 – ClojureMostly

+0

Javaで行う方法 –

答えて

3

バージョン間でシステムテーブルのスキーマがかなり変更されています。これは、バージョン固有の構文解析が組み込まれていますドライバのメタデータに依存するのが最適です。Javaのドライバから使用カサンドラのバージョンに関係なく、渡された鍵空間であなたのテーブル名を与える

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Collection<TableMetadata> tables = cluster.getMetadata() 
    .getKeyspace("keyspace_name") 
    .getTables(); // TableMetadata has name in getName(), along with lots of other info 

// to convert to list of the names 
List<String> tableNames = tables.stream() 
     .map(tm -> tm.getName()) 
     .collect(Collectors.toList()); 
2
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
Metadata metadata = cluster.getMetadata(); 
     Iterator<TableMetadata> tm = metadata.getKeyspace("Your Keyspace").getTables().iterator(); 

     while(tm.hasNext()){ 
      TableMetadata t = tm.next(); 
      System.out.println(t.getName()); 
     } 

上記のコードを使用します。

+0

'.iterator();'は 'Collection 'を返しません。イテレータに変更する必要があります –

+0

@ChrisLohfink提案していただきありがとうございます...その部分を逃した。 –

関連する問題