BigQueryでDELETE-INSERTしたい場合、
MERGE ~ ON FALSE WHEN NOT MATCHED BY SOURCE THEN DELETE WHEN NOT MATCHED BY TARGET THEN INSERT ROW
を使用すると良い。DELETE-INSERTを行えるうえ、動作も早いらしい。
ON FALSEとすることで、NOT MATCHED BY SOURCE/TARGETの両方の条件が実行される。
注意しなければいけないのが、WHEN NOT MATCHED BY SOURCE THEN DELETEが抜けていると、DELETEされずにどんどんデータが追加されて冪等な処理にならない。
例)
MERGE INTO test_dataset.target USING ( SELECT * FROM test_dataset.original AS o ) ON FALSE WHEN NOT MATCHED BY SOURCE THEN DELETE WHEN NOT MATCHED BY TARGET THEN INSERT ROW
参考
https://levelup.gitconnected.com/powerful-feature-on-merge-statement-in-bigquery-i-e9c805b9bc9a