はじめに
BigQueryで、ベースのテーブルに対し、差分更新する方法とサンプルクエリです。
BigQueryでPKはありませんが、概念的なPKが一致するレコードを更新します。
更新元のベースのテーブルに一致するPKのレコードが無ければ、追加になります。
イメージ
サンプルクエリ
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、どんどん使いやすくなっていきますね!