Bigquery Schedule запрос для загрузки данных в определенный раздел - PullRequest
0 голосов
/ 23 января 2020

Я использую функцию запроса расписания bigquery для выполнения запроса каждые 30 минут. Моей целевой таблицей будет многораздельная таблица, а столбец распределения - 'event_date'

Запланированный мной запрос расписания будет состоять в том, чтобы копировать сегодняшние данные из source_table -> Dest_table (например, select * from source_table where event_date = CURRENT_DATE()) каждые 30 минут, но я хотел бы, чтобы он записал существующий раздел без записи, усекающей всю таблицу (поскольку я не хочу дублировать сегодняшние данные каждые 30 минут)

В настоящее время, когда я планирую этот запрос с partition_field, установленным на event_date и write_truncate, оно усекает всю таблицу, и это приводит к потере предыдущих данных. Есть что-то еще, что я пропускаю

1 Ответ

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

Вместо указания таблицы назначения вы можете использовать MERGE для усечения только одного раздела.

Это, к сожалению, дороже, так как вы также платите за удаление данных из dest_table. (Вставка по-прежнему бесплатно)

MERGE dest_table t
USING source_table
ON FALSE
WHEN NOT MATCHED BY SOURCE AND event_date=CURRENT_DATE() THEN DELETE
WHEN NOT MATCHED BY TARGET THEN INSERT ROW
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...