Обновите несопоставленные строки с помощью функции BigQuery MERGE - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь обновить таблицу, используя запланированный запрос, который использует функцию MERGE для сопоставления и обновления строк. Однако некоторые строки в таблице необходимо удалить, так как они были удалены в других таблицах, на которые ссылается запрос. Однако, поскольку эти строки больше не существуют, они не могут быть сопоставлены с существующими строками в обновляемой таблице. Есть ли какой-то способ как-то выполнить функцию, противоположную функции MERGE, например, при нахождении только тех ордеров, которые не соответствуют запланированному запросу?

Например, такова таблица на данный момент обновляется: enter image description here

Вот как я хотел бы обновить его: enter image description here

1 Ответ

3 голосов
/ 30 января 2020

not_matched_by_source_clause определяет, как обновить или удалить строку в целевой таблице, если эта строка не совпадает ни с одной строкой в ​​исходной таблице.

MERGE dataset.NewArrivals T
USING (SELECT * FROM dataset.NewArrivals WHERE warehouse <> 'warehouse #2') S
ON T.product = S.product
WHEN MATCHED AND T.warehouse = 'warehouse #1' THEN
  UPDATE SET quantity = T.quantity + 20
WHEN NOT MATCHED BY SOURCE THEN
  DELETE

больше примеров здесь на MERGE https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#merge_statement

...