如何检查Cassandra表是否存在

时间:2013-04-15 13:50:38

标签: cassandra cql

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

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

3 个答案:

答案 0 :(得分:23)

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

SELECT columnfamily_name
FROM schema_columnfamilies WHERE keyspace_name='myKeyspaceName';

描述此功能的报告位于: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';

答案 1 :(得分:19)

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

KeyspaceMetadata ks = cluster.getMetadata().getKeyspace("myKeyspace");
TableMetadata table = ks.getTable("myTable");

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

答案 2 :(得分:4)

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

describe keyspace_name.table_name

如果它不存在,你将在键空间'keyspace'中找不到'table_name' 如果确实存在,您将获得该表的描述。

相关问题