テーブル(列ファミリー)がCassandra CQLを使用して(またはAPI、おそらくcom.datastax.driverを使用して)に定義されているかどうかを確認する簡単な方法はありますか?
現在、私は実行に傾いていますSELECT 1 FROM table
と例外をチェックしていますが、もっと良い方法があるでしょうか?
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';
Javaドライバー(質問で説明したため))は、スキーマのローカル表現も維持します。
KeyspaceMetadata ks = cluster.getMetadata().getKeyspace("myKeyspace");
TableMetadata table = ks.getTable("myTable");
テーブルが存在しない場合、テーブルのメタデータはnullになります。
Cqlshを使用してテーブルの存在を手動で確認する必要がありました。おそらく有用な一般情報。
describe keyspace_name.table_name
存在しない場合は、キースペース 'keyspace'で見つからない 'table_name'を取得します。存在する場合は、テーブルの説明を取得します。