CQL (または com.datastax.driver を使用した API) を使用して Cassandra でテーブル (列ファミリー) が定義されているかどうかを確認する簡単な方法はありますか?
現在、実行と例外のチェックに傾いてSELECT 1 FROM table
いますが、もっと良い方法があるでしょうか?
system
1.1 の時点で、キースペース、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';
Javaドライバー(質問で言及したため)は、スキーマのローカル表現も維持します。
ドライバー 3.x 以下:
KeyspaceMetadata ks = cluster.getMetadata().getKeyspace("myKeyspace");
TableMetadata table = ks.getTable("myTable");
boolean tableExists = (table != null);
ドライバー 4.x 以降:
Metadata metadata = session.getMetadata();
boolean tableExists =
metadata.getKeyspace("myKeyspace")
.flatMap(ks -> ks.getTable("myTable"))
.isPresent();