はじめに
本記事では Databricks 上で merge 機能を使用して Delta 形式のテーブルに対して更新、削除、追加する方法を紹介していきます。
Databricks の基本的な使い方や Delta 形式のテーブルについてある程度理解しているという前提のもとで進めていきます。
本記事のゴール
- merge とは何かを理解する
- merge のコード記述方法を理解する(SQL)
作業環境や必要な準備物
- Databricks 環境
- 本記事ではコードに SQL 使用(他言語でも可能)
- 任意のDelta 形式のテーブル
- 上記とテーブル構造が同じである更新データ及び追加データ
merge の解説
merge とは何か
merge は直訳すると融合するというような意味を持ちます。
Databricks では Delta 形式のテーブルに対してのみ、merge を使用したテーブルの削除及び upsert(更新と追加の総称)が可能になります。
もちろん merge を使用せずとも insert や delete などを直接叩いてテーブルを変更させることも可能です。
ですが、merge を使用することによって以下のようなメリットが挙げられます。
- テーブル読み込みの効率化
ほとんどのユースケースではテーブルの一部分のみに変更を加えると思います。
その一部分の変更のためだけにテーブルの全体を読み込んだり再書き込みを行ってしまうと、変更したい部分以外にも無駄な工数が発生することになります。
merge では条件式を加えることにより、その条件に合った部分、またその条件外の部分にのみ変更を加えるといった操作が行えます。
つまり、merge の条件式に関係のない部分はデータの検索を行わない(データスキッピングと呼ばれる)のでクエリ処理を高速化させます。
条件式によって変更部分の指定方法に自由度が増し、さらにクエリ処理を効率的に行えるのがメリットとなります。
説明だけだとわかりにくいかとは思いますので実際に簡単なコード例を見ていきましょう。
merge のコード例
SQL 文で書くと以下のような構造になります。
もちろん細かい部分でカスタマイズは可能です。詳細はこちらの公式ドキュメントをご覧ください。
MERGE INTO target_data
USING update_data
ON target_data.column1 = update_data.column2
WHEN MATCHED THEN
UPDATE SET *
(DELETE)
WHEN NOT MATCHED THEN
INSERT *
変数 | 説明 |
---|---|
target_data | 変更が加えられる Delta 形式のテーブル |
update_data | 変更内容に影響を与えるテーブル |
column1 | 変更する条件に影響を与える target_table のカラム |
column2 | 変更する条件に影響を与える update_table のカラム |
- MERGE INTO で変更するテーブルを指定する
- USING で上記テーブルの変更に影響するテーブルを選択する
- ON で条件を指定する
- WHEN MATCHED では上記の条件を満たす場合、更新または削除を指示する
- WHEN NOT MATCHED では上記の条件を満たさない場合、追加を支持する
ただ単にテーブルに変更を加えるのではなく、変更のバリエーションが広がりますね。
まとめ
merge 機能について紹介しました。
変更箇所のみ効率よく変更できることによってテーブルが大きければ大きいほどクエリパフォーマンスは上がりそうですね。
ぜひ使ってみてください。