使用Java如何获取Cassandra中的表名?

8
如果在CQL shell中使用这段代码,可以获取该keyspace中所有表格的名称。
DESCRIBE TABLES;

我希望使用ResulSet检索相同的数据。以下是我的Java代码。

String query = "DESCRIBE TABLES;";

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

在之前已经初始化了session和cluster,如下:

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

我想了解如何使用Java代码获取keyspace中表名的方法。


DESCRIBE 只能在 CLI 上使用。 - ClojureMostly
如何在Java中进行操作 - Kangkan Lahkar
2个回答

7
系统表的模式在不同版本之间会有较大变化。最好依赖于具有特定版本解析功能的驱动程序元数据。从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());

4
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());
}

无论使用哪个版本的Cassandra,上述代码将为您提供传递的keyspace中的表名称。


.iterator(); 不会返回 Collection<TableMetadata>,需要将其更改为 Iterator。 - Chris Lohfink
@ChrisLohfink 谢谢你的建议... 我刚想把两个步骤合并成一个,结果漏掉了那一部分。 - undefined_variable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接