是否有一种简单的方法可以检查是否在Cassandra中使用CQL(或者API,使用com.datastax.driver)定义了表(列族)?
现在我倾向于执行SELECT 1 FROM table
并检查异常,但也许有更好的方法?
答案 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' 如果确实存在,您将获得该表的描述。