LoginSignup
0
0

More than 5 years have passed since last update.

BigQueryで、DMLを使わずにレコードをアップデートする

Posted at

はじめに

BigQueryで、ベースのテーブルに対し、差分更新する方法とサンプルクエリです。
BigQueryでPKはありませんが、概念的なPKが一致するレコードを更新します。
更新元のベースのテーブルに一致するPKのレコードが無ければ、追加になります。

イメージ

image.png

サンプルクエリ

PKが1つ

#standardSQL
WITH T_NEW AS(
  SELECT 'key1' key1, 'zzz' value1, 2 value2
  UNION ALL SELECT 'key3' key1, 'ccc' value1, -1 value2
)

SELECT 
  *
FROM 
  (SELECT 'key1' key1, 'aaa' value1, 1 value2
  UNION ALL SELECT 'key2' key1, 'bbb' value1, 100 value2) T_BASE
WHERE
  key1 NOT IN(
    SELECT
      key1
    FROM
      T_NEW)
UNION ALL
SELECT
  *
FROM
  T_NEW

PKが2つ以上

#standardSQL
WITH T_NEW AS(
  SELECT '1' key1, '1' key2, 'zzz' value1, 2 value2
  UNION ALL SELECT '1' key1, '2' key2, 'ccc' value1, -1 value2
)

SELECT 
  *
FROM 
  (SELECT '1' key1, '1' key2, 'aaa' value1, 1 value2
  UNION ALL SELECT '2' key1, '1' key1, 'bbb' value1, 100 value2) T_BASE
WHERE
  (key1, key2) NOT IN(
    SELECT
      (key1, key2)
    FROM
      T_NEW)
UNION ALL
SELECT
  *
FROM
  T_NEW

おわりに

BigQuery、どんどん使いやすくなっていきますね!

0
0
1

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