トランザクションを格納するときに、さまざまなユースケースに対してクエリをフィルタリングするためのキーが異なることがよくあります。例えば。私は、トランザクションを集約する場合複数のキーに対するスパークorcパーティショニング戦略
が今jdbcDF.write.format("orc").partitionBy("TX_Date").save("transactions")
Iは、特定の数ヶ月のためにすぐに集計取引は、しかし、どのようなベースの可能性:カードID、いいえ、取引は次のように日付順に分配することができ
顧客番号、日付がアカウント例えば顧客いいえ?
すべてのトランザクション行にトランザクションIDを格納し、最も一般的なキーで区切られた別々のルックアップテーブル(リンクテーブル)を保持する方が良いでしょうか? など。次のルックアップテーブル:
カードID | TransID
お客様番号| TransID
アカウント番号| TransID
TX_Date | TransID
これはspark & orcの開発のための反パターンですか、または異なるキーで「インデックス登録」するより良い方法がありますか? docsから
partitionByは、そのキーでデータをフォルダに分割します。つまり、特定の範囲または特定のキーを検索すると、フォルダ内のorcファイルを読み込まなくても、sparkは他のすべての項目をスキップできます。 質問は、複数のキーでデータを分割し、示唆したようにルックアップテーブルを作成することで達成できますか?より具体的には、パフォーマンスを向上させます。 – user979899
あなたはおそらく私が答えで書いたもののためにスピードアップを得ることはできません – raam86