Я часто хочу загружать данные за один день в таблицу BigQuery с разделением по дате, заменяя любые данные, которые уже есть. Я знаю, как это сделать для таблиц с разделением данных «старого стиля» (тех, которые имеют поле _PARTITIONTIME
), но не знаю, как это сделать с таблицами с разделением по дате нового стиля (в которых используется обычная дата Столбец / timestamp для указания разбиения, поскольку они не позволяют использовать декоратор $
.
Допустим, я хочу сделать это на my_table
. Для таблиц с разделением по дате в старом стиле я выполнил это с помощью задания загрузки, в котором использовался декоратор $
и расположение записи WRITE_TRUNCATE
- например, для таблицы назначения было бы установлено значение my_table$20181005
.
.
Однако я не уверен, как выполнить эквивалентную операцию с использованием DML. Я выполняю отдельные команды DELETE
и INSERT
. Это не очень хорошо, потому что увеличивает сложность, количество запросов и не атомарную операцию.
Я хочу знать, как это сделать, используя команду MERGE
, чтобы все это содержалось в одной атомарной операции. Однако я не могу обернуть голову вокруг синтаксиса команды MERGE и не нашел пример для этого варианта использования. Кто-нибудь знает, как это сделать?
Идеальным ответом будет выражение DML, которое выделит все столбцы из source_table
и вставит его в 2018-10-05
раздел даты my_table
, удалив все существующие данные, которые были в my_table
2018-10-05
дата раздела. Можно предположить, что source_table
и my_table
имеют одинаковые схемы и что my_table
разбит на столбец day
, который имеет тип DATE
.