BigQueryのタイムトラベル機能を用いれば良い。しかし注意点として次の2点があります:
- タイムトラベルの時間枠はデフォルトでは7日間
-
一度に同じtableの2つの異なる時間を参照することは無理みたいなので、
TEMP TABLE
を使う
以下のsample queryで適宜<target_table_id>
、INTERVAL ***
、key_*
を置き換えて使ってください:
CREATE TEMP TABLE before_snapshot
AS
SELECT DISTINCT
key_1,
... ,
key_n
FROM `<target_table_id>`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
;
SELECT
*
FROM `<target_table_id>` after_snapshot
WHERE NOT EXISTS (
SELECT 1
FROM before_snapshot
WHERE
after_snapshot.key_1 = before_snapshot.key_1 AND
... AND
after_snapshot.key_n = before_snapshot.key_n
)
;