Вы не упомянули размер вашего обновления, я могу дать лишь некоторые общие рекомендации.
- Большинство обновлений BigQuery, включая одиночный DML (INSERT / UPDATE / DELETE / MERGE) и одиночное задание загрузки, относятся к atomi c. Ваш ридер читает либо старые данные, либо новые данные.
- В данный момент транзакция с несколькими операторами отсутствует, и если у вас есть обновления, которые не подходят для одного задания загрузки, решение:
- Загрузить обновление в промежуточную таблицу после завершения всех загрузок
- Используйте одиночный INSERT или MERGE для объединения обновлений из промежуточной таблицы в первичную таблицу данных
- Недостаток: сканирование промежуточной таблицы не бесплатно
Обновление: поскольку у вас есть несколько таблиц для атомарного обновления, есть небольшая уловка, которая может быть полезна.
Предполагая, что для каждой таблицы вам нужно обновление, есть - столбец ActivePartition
в качестве ключа раздела, у вас может быть таблица только с одной строкой.
CREATE TABLE ActivePartition (active DATE);
Каждый раз после загрузки вы устанавливаете ActivePartition.active на новую активную дату, затем ваш пользователь использует скрипт:
DECLARE active DATE DEFAULT (SELECT active FROM ActivePartition);
-- Actual query
SELECT ... FROM dataTable WHERE ActivePartition = active