0
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?

BigQueryのMerge関数の使用方法について

Posted at

概要

BigQueryのMerge関数の使用方法について解説します

前提

実装

今回はわかりやすい例として

  • クーポンの使用履歴テーブル
  • クーポン使用済み履歴テーブル

の2テーブルを例にMerge関数を使います
クーポンの使用済み履歴テーブルと使用履歴テーブルを比較してすでに使用しているデータがあれば使用済み履歴テーブルにInsertする処理を書きます

必要なテーブルとデータの作成

以下がクーポンの使用履歴テーブルです

CREATE OR REPLACE TABLE practice_dataset.coupon_usage (
    user_id INT64,
    coupon_code INT64,
    is_used BOOL,
    used_at TIMESTAMP
);

以下がクーポンの使用済み履歴テーブルです

CREATE OR REPLACE TABLE practice_dataset.used_coupons (
    user_id INT64,
    coupon_code INT64,
    used_at TIMESTAMP,
    migrated_at TIMESTAMP
);

それぞれのテーブルにデータをInsertしていきます

INSERT INTO practice_dataset.coupon_usage (user_id, coupon_code, is_used, used_at)
VALUES
    (1, 1, true, TIMESTAMP '2025-03-08 10:00:00'),
    (2, 2, true, TIMESTAMP '2025-03-08 11:00:00'),
    (3, 3, false, NULL),
    (1, 2, false, NULL);
INSERT INTO practice_dataset.used_coupons (user_id, coupon_code, used_at, migrated_at)
VALUES
    (1, 1, TIMESTAMP '2025-03-08 10:00:00', TIMESTAMP '2025-03-08 10:00:00')

クーポン使用履歴テーブルの中身は以下のとおりです

スクリーンショット 2025-03-08 14.17.05.png

クーポン使用済み履歴テーブルの中身は以下のとおりです

スクリーンショット 2025-03-08 14.18.02.png

Mergeクエリの作成

coupon_usage内で使用済みのもの(is_used)のみ抽出し、used_couponsにmatchしなければInsertします
その際にWHEN NOT MACHED THENを使います

MERGE INTO practice_dataset.used_coupons AS target
USING (
    SELECT user_id, coupon_code, used_at
    FROM practice_dataset.coupon_usage
    WHERE is_used = TRUE
) AS source
ON target.user_id = source.user_id AND target.coupon_code = source.coupon_code
WHEN NOT MATCHED THEN
    INSERT (user_id, coupon_code, used_at, migrated_at)
    VALUES (source.user_id, source.coupon_code, source.used_at, CURRENT_TIMESTAMP());

実行結果

以下のように使用済みの履歴がused_couponsにInsertされていたら成功です

スクリーンショット 2025-03-08 14.31.51.png

トラブルシューティング

Not found: Dataset practice_dataset.user_01 was not found in location US 

データセット名が間違っているので確認しましょう

参考

0
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
0
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?