3

キースペースのどのテーブルにもデータが必要ありません。そのため、キースペースが存在する場合は削除して、すぐに作成することにしました。私は同じことを達成するために以下のコードを使用しています。

 CassandraConnector(conf).withSessionDo { session =>
  session.execute(s"DROP KEYSPACE if EXISTS $keyspace")
  session.execute("""CREATE KEYSPACE if NOT EXISTS %s
  WITH replication = {'class':'SimpleStrategy','replication_factor':'1'};""".format(keyspace)

) }

しかし、キースペースの作成に失敗しています。ログから、次のような警告しか表示されませんでした

Received a DROPPED notification for table test.table_tracker, but this keyspace is unknown in our metadata.

また、python cassandra ドライバーを使用してみました。しかし、結果は同じです。いくつかの競合状態があり、キースペースのドロップが非同期に発生すると思います(間違っている場合は修正してください)。

キースペースを同期的にドロップして作成するにはどうすればよいですか?

4

1 に答える 1

8

テーブルからすべてのデータを単に削除したい場合は、スキーマを保持しながらテーブルからすべてのデータを削除するTRUNCATEの使用を検討する必要があります。

TRUNCATE test.table_tracker;

スキーマの変更は慎重に行う必要があるため、可能な限り避ける必要があります。さらに、すべてのバージョンの cassandra には、キースペースの削除と再作成を迅速に行うことに関してさまざまな問題があるため、truncate ルートはより信頼性が高くなります。

発生する可能性のある問題の 1 つは、各操作を実行した後にスキーマの合意を待っていない可能性があることです。これは、特に後続の操作で同じキースペース/テーブルを操作する場合に問題になる可能性があります。java-driver (したがって、spark コネクタ) は、スキーマの変更間で構成可能な時間だけ待機します。同意を待つ方法については、 java-driver メタデータ ドキュメントの次のガイダンスを参照してください。

if (cluster.getMetadata().checkSchemaAgreement()) {
    // schema is in agreement
} else {
    // schema is not in agreement
}
于 2015-08-10T19:37:18.907 に答える