2017-09-20 8 views
1

csv SQLファイル(テーブルあたり1個)から、あらかじめ決められた標準化されたフォーマットを使用しているCassandraデータベースにデータを移行します。その結果、私はCassandraに書き込む前に、SQLデータの変換、結合などを行ってこのフォーマットと一致させています。私の問題は、このデータベースの移行がバッチで行われていることです(一度にすべてではありません)、Cassandraへのエントリが書き込まれたときにテーブル結合の複数の側からの情報が確実に存在することは保証できません。Scala Spark Cassandraプライマリキーでローを更新または挿入する

ex。 表1と表2の両方には、パーティション化キーとクラスタ化キー(結合が一意であるため結合が可能)があり、完全外部結合を使用して結合されています。しかし、私たちにデータが与えられているところでは、表1からレコードを得ることはできますが、データの「バッチ」で表2から取得することはできません。完全な外部結合を実行すると、問題はありません。もう1つの表の余分な列が追加され、nullが埋められます。次のインターバルでデータを取得すると、以前に表1に結合されていたはずのテーブル2の部分が表示されます。

これらのエントリをどのように組み合わせて取得しますか?

私は、そのパーティション分割とクラスタ化キーのセットが存在するが、何も表示されていないかどうかによって、Sparkで更新または挿入型メソッドを探しました。これが最も効果的な方法ですか? spark.sqlクエリですべてのエントリを追加してから、更新/書き込みする必要がありますか?

注:主キーの競合を防ぐUUIDを使用しても問題は解決しませんが、2つの部分的なエントリは必要ありません。その特定の主キーを持つすべてのデータは同じ行にある必要があります。

ご協力いただきありがとうございます。

答えて

1

私はあなたがデータを直接cassandraに書き込むことができ、すべての主キーが同じであると仮定して、心配する必要はないと思います。

カサンドラの挿入物は本当に「挿入または更新」なので、結合の片側を挿入すると、いくつかの列が空のままになります。次に、結合の反対側を挿入すると、その行が新しい列で更新されます。

私はSpark + Cassandraクラスターをテストして確認することができないので、これを塩の塊で持ってください。

+0

これは、すべての書き込みがSpark Cassandra Connectorでもupsertsであることを示しています。その後の実行は既存のエントリを上書きします。 – RussS

関連する問題