23

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

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

4

4 に答える 4

26

system1.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';
于 2013-04-15T14:52:01.613 に答える
21

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();
于 2015-07-16T12:27:37.167 に答える