2017-02-26 3 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"); 

또는 나는 키 스페이스에서 테이블 이름을 검색하기 위해 자바 코드를 알고 싶다.

+0

'DESCRIBE'는 CLI에서만 작동합니다. – ClojureMostly

+0

Java에서하는 방법 –

답변

3

시스템 테이블의 스키마가 버전간에 상당히 변경됩니다. 이 버전 특정 구문 분석에 건설해야합니다 드라이버 메타 데이터에 의존하는 것이 가장 좋습니다. 자바 드라이버에서 사용되는 카산드라 버전에 관계없이 전달 된 키 스페이스에서 당신 테이블 이름을 줄 것이다

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 제안 해 주셔서 감사드립니다. 나는 방금 2 단계를 1로 병합하려고했습니다. 그 부분을 놓쳤다. –

관련 문제