4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatabricksAdvent Calendar 2024

Day 3

MERGE文のUPDATEでターゲットカラムを参照して値に基づいた処理を反映する方法

Posted at

概要

MERGE 文にて UPDATE する際にターゲットテーブルのカラムに基づいて処理を実施する方法について紹介します。例えば、 ターゲットテーブルに REVISION のようなカラムがあった場合に、下記のように記述することで処理のたびに 1 を加算するような処理を実行できます。今までそういった処理を実装したことがなかったので気付かなかったため、記事にしておきます。

    target.revison = target.revison + 1,

image.png

検証コードと実行結果

カタログとスキーマを作成

%sql
CREATE CATALOG IF NOT EXISTS meget_test;
CREATE SCHEMA IF NOT EXISTS meget_test.schema_01;

image.png

テーブルの作成とREVISON0のデータの挿入

%sql
CREATE OR REPLACE TABLE meget_test.schema_01.table_01
(
  id int,
  revison int,
  update_at TIMESTAMP
);
INSERT INTO meget_test.schema_01.table_01
SELECT
  1,
  0,
  current_timestamp()
;

image.png

%sql
SELECT * FROM meget_test.schema_01.table_01

image.png

MEREGE 文により UPDATE を実行

%sql
WITH src AS (
  SELECT 1 AS ID
)
MERGE INTO meget_test.schema_01.table_01 AS target
USING src AS source
ON target.id = source.id
WHEN MATCHED THEN
  UPDATE SET 
    target.revison = target.revison + 1,
    target.update_at = current_timestamp()

image.png

REVISION が 1 となっていることを確認

%sql
SELECT * FROM meget_test.schema_01.table_01

image.png

複数回の MERGE 文の実行により REVISION 列が加算されることを確認

%sql
WITH src AS (
  SELECT 1 AS ID
)
MERGE INTO meget_test.schema_01.table_01 AS target
USING src AS source
ON target.id = source.id
WHEN MATCHED THEN
  UPDATE SET 
    target.revison = target.revison + 1,
    target.update_at = current_timestamp();
SELECT * FROM meget_test.schema_01.table_01;

image.png

作成したカタログを削除

%sql
DROP CATALOG IF EXISTS meget_test CASCADE;

image.png

4
0
0

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
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?