如何检查Cassandra表是否存在

Dat*_*eek 21 cql cassandra

是否有一种简单的方法可以检查表(列族)是否在Cassandra中使用CQL(或API,使用com.datastax.driver)定义?

现在我倾向于执行SELECT 1 FROM table和检查异常,但也许有更好的方法?

Aar*_*ron 23

从1.1开始,您应该能够查询system键空间schema_columnfamilies列族.如果您知道要检查哪个键空间,则此CQL应列出键空间中的所有列族:

SELECT columnfamily_name
FROM schema_columnfamilies WHERE keyspace_name='myKeyspaceName';
Run Code Online (Sandbox Code Playgroud)

描述此功能的报告位于:https://issues.apache.org/jira/browse/CASSANDRA-2477

虽然,他们确实注意到一些系统列名称已在1.1和1.2之间变化.因此,您可能需要稍微弄清楚它以获得您想要的结果.

编辑20160523 - Cassandra 3.x更新:

请注意,对于Cassandra 3.0及更高版本,您需要对上述查询进行一些调整:

SELECT table_name 
FROM system_schema.tables WHERE keyspace_name='myKeyspaceName';
Run Code Online (Sandbox Code Playgroud)


Oli*_*lat 19

Java驱动程序(因为您在问题中提到它)也维护了模式的本地表示:

KeyspaceMetadata ks = cluster.getMetadata().getKeyspace("myKeyspace");
TableMetadata table = ks.getTable("myTable");
Run Code Online (Sandbox Code Playgroud)

如果表不存在,表元数据将为null.


jor*_*fus 7

我只需要使用 cqlsh 手动检查表是否存在。可能有用的一般信息。

describe keyspace_name.table_name
Run Code Online (Sandbox Code Playgroud)

如果它不存在,您将得到 'table_name' not find in keyspace 'keyspace' 如果它确实存在,您将获得该表的描述。