BigQuery MERGE Statement
MERGE is an UPSERT operation, that can combine INSERT, UPDATE, and DELETE operations into a single statement and perform the operations atomically
MERGE Statement example
MERGE dataset.Inventory T USING dataset.NewArrivals S ON T.product = S.product WHEN MATCHED THEN UPDATE SET quantity = T.quantity + S.quantity WHEN NOT MATCHED THEN INSERT (product, quantity) VALUES(product, quantity)
MERGE dataset.Inventory T USING (SELECT product, quantity, state FROM dataset.NewArrivals t1 JOIN dataset.Warehouse t2 ON t1.warehouse = t2.warehouse) S ON T.product = S.product WHEN MATCHED AND state = 'CA' THEN UPDATE SET quantity = T.quantity + S.quantity WHEN MATCHED THEN DELETE
Syntax reference
MERGE [INTO] target_name [[AS] alias] USING source_name ON merge_condition { when_clause } + when_clause ::= matched_clause | not_matched_by_target_clause | not_matched_by_source_clause matched_clause ::= WHEN MATCHED [ AND search_condition ] THEN { merge_update_clause | merge_delete_clause } not_matched_by_target_clause ::= WHEN NOT MATCHED [BY TARGET] [ AND search_condition ] THEN merge_insert_clause not_matched_by_source_clause ::= WHEN NOT MATCHED BY SOURCE [ AND search_condition ] THEN { merge_update_clause | merge_delete_clause } merge_condition ::= bool_expression search_condition ::= bool_expression merge_update_clause ::= UPDATE SET update_item [, update_item]* update_item ::= column_name = expression merge_delete_clause ::= DELETE merge_insert_clause ::= INSERT [(column_1 [, ..., column_n ])] input input ::= VALUES (expr_1 [, ..., expr_n ]) | ROW expr ::= expression | DEFAULT