概要
MERGE 文にて UPDATE する際にターゲットテーブルのカラムに基づいて処理を実施する方法について紹介します。例えば、 ターゲットテーブルに REVISION のようなカラムがあった場合に、下記のように記述することで処理のたびに 1 を加算するような処理を実行できます。今までそういった処理を実装したことがなかったので気付かなかったため、記事にしておきます。
target.revison = target.revison + 1,
検証コードと実行結果
カタログとスキーマを作成
%sql
CREATE CATALOG IF NOT EXISTS meget_test;
CREATE SCHEMA IF NOT EXISTS meget_test.schema_01;
テーブルの作成とREVISON
が0
のデータの挿入
%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()
;
%sql
SELECT * FROM meget_test.schema_01.table_01
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()
REVISION が 1 となっていることを確認
%sql
SELECT * FROM meget_test.schema_01.table_01
複数回の 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;
作成したカタログを削除
%sql
DROP CATALOG IF EXISTS meget_test CASCADE;