是否有一种简单的方法可以检查表(列族)是否在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.
我只需要使用 cqlsh 手动检查表是否存在。可能有用的一般信息。
describe keyspace_name.table_name
Run Code Online (Sandbox Code Playgroud)
如果它不存在,您将得到 'table_name' not find in keyspace 'keyspace' 如果它确实存在,您将获得该表的描述。
归档时间: |
|
查看次数: |
18876 次 |
最近记录: |