web-dev-qa-db-ja.com

Cassandraテーブルが存在するかどうかを確認する方法

テーブル(列ファミリー)がCassandra CQLを使用して(またはAPI、おそらくcom.datastax.driverを使用して)に定義されているかどうかを確認する簡単な方法はありますか?

現在、私は実行に傾いていますSELECT 1 FROM tableと例外をチェックしていますが、もっと良い方法があるでしょうか?

22
Datageek

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';
24
Aaron

Javaドライバー(質問で説明したため))は、スキーマのローカル表現も維持します。

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

テーブルが存在しない場合、テーブルのメタデータはnullになります。

20

Cqlshを使用してテーブルの存在を手動で確認する必要がありました。おそらく有用な一般情報。

describe keyspace_name.table_name

存在しない場合は、キースペース 'keyspace'で見つからない 'table_name'を取得します。存在する場合は、テーブルの説明を取得します。

4
jorfus