LoginSignup
1

【merge】Databricks の Delta 形式のテーブルでは自由度の高いテーブル更新、削除、追加ができる話

Last updated at Posted at 2022-12-13

はじめに

本記事では 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 のカラム
  1. MERGE INTO で変更するテーブルを指定する
  2. USING で上記テーブルの変更に影響するテーブルを選択する
  3. ON で条件を指定する
  4. WHEN MATCHED では上記の条件を満たす場合、更新または削除を指示する
  5. WHEN NOT MATCHED では上記の条件を満たさない場合、追加を支持する

ただ単にテーブルに変更を加えるのではなく、変更のバリエーションが広がりますね。

まとめ

merge 機能について紹介しました。
変更箇所のみ効率よく変更できることによってテーブルが大きければ大きいほどクエリパフォーマンスは上がりそうですね。
ぜひ使ってみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1