Является ли синтаксис MERGE в BigQuery сканировать целые таблицы? - PullRequest
0 голосов
/ 07 января 2020

Я использую синтаксис MERGE для всей таблицы, используя две таблицы: исходную и целевую. Задача состоит в том, чтобы обновить старые данные в целевом объекте и добавить новые данные из источника в выбранное время (есть проверка updated_time). Проблема в том, что я не хочу, чтобы объединение сканировало целые строки и фокусировалось только на том, что я хочу объединить.

Поэтому я пытаюсь использовать этот запрос:

  target trg
USING
  source src
ON
  trg.id = src.id
  AND trg.c_ctr = src.c_ctr
  AND DATE(trg.pt) = DATE(src.pt)
  AND DATE(trg.pt) >= "2019-12-12
WHEN 
  MATCHED AND DATE(src.pt) >= "2019-12-12 THEN 
UPDATE
  SET (...)
WHEN 
  NOT MATCHED AND DATE(src.pt) >= "2019-12-12" THEN
INSERT
  (...) VALUES (...)

Когда я Попробуйте этот запрос ... Кажется, он потребляет "довольно низкие" данные (около 140 МБ), потому что я хочу проверить с 25 дней go. Я не пробовал этот запрос в таблицах большого размера. Это то, что я хочу спросить: если я дал какое-то условие для барьера сканирования, будет ли операция MERGE продолжать сканирование всей таблицы или только нескольких строк, охватываемых разделом? Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 января 2020

Проверка документации:

Цены DML для секционированных таблиц

Если в операторе MERGE присутствуют только предложения INSERT, с вас взимается сумма байтов, обработанных для всех столбцов, на которые имеются ссылки во всех разделах, отсканированных по запросу.

Если есть UPDATE или DELETE В операторе MERGE взимается плата за сумму байтов, обработанных для всех столбцов, на которые имеются ссылки во всех разделах исходных таблиц, отсканированных по запросу + сумма байтов для всех столбцов в обновленных, удаленных или отсканированных разделах для таблица целей (на момент начала MERGE).

Ключевая часть - for all the columns referenced in all partitions for the source tables scanned by the query. Поэтому, если ваши фильтры сканируют данные только за несколько дней, эти фильтры будут обеспечивать, чтобы ваш запрос взимался только за эти дни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...