Использование Dataprep для записи только в раздел по дате в таблице с разделом по дате

Я использую представление BigQuery для извлечения вчерашних данных из таблицы BigQuery, а затем пытаюсь записать в таблицу с разделением по датам с помощью Dataprep.

Моя первая проблема заключалась в том, что Dataprep не мог правильно подбирать столбцы типа DATE, но преобразование их в TIMESTAMP работает (спасибо Эллиоту).

Однако при использовании Dataprep и настройке выходной таблицы BigQuery у вас есть только 3 варианта: Append, Truncate или Drop существующей таблицы. Если таблица разделена по дате и вы используете Truncate, она удалит все существующие данные, а не только данные в этом разделе.

Есть ли другой способ сделать это? Моя альтернатива - использовать Dataprep для перезаписи таблицы, а затем использовать Cloud Composer для запуска некоторого SQL, помещающего эти данные в таблицу с разделением по датам. В идеале я бы хотел сделать это только с помощью Dataprep, но сейчас это кажется невозможным.

Схема таблицы BigQuery:

введите здесь описание изображения

Детали раздела:

введите здесь описание изображения

Данные, которые я принимаю, просты. В одном потоке:

+------------+--------+
|    date    |  name  |
+------------+--------+
| 2018-08-08 | Josh1  |
| 2018-08-08 | Josh2  |
+------------+--------+

В другом потоке:

+------------+--------+
|    date    |  name  |
+------------+--------+
| 2018-08-09 | Josh1  |
| 2018-08-09 | Josh2  |
+------------|--------+

Он перезаписывает данные в обоих случаях.


person Josh Laird    schedule 23.08.2018    source источник
comment
С помощью преобразования типов данных BigQuery можно использовать тип Datetime (отметка времени) Dataprep для записи в TIMESTAMP в таблице BigQuery, верно? Однако я не думаю, что есть способ использовать DATE.   -  person Elliott Brossard    schedule 23.08.2018
comment
Спасибо за информацию @ElliottBrossard. Мне удалось заставить его работать, используя вместо этого TIMESTAMP, но возникла другая проблема. Отредактировал вопрос. Есть ли где-нибудь ветка с запросом функции?   -  person Josh Laird    schedule 24.08.2018
comment
Вы можете отправить запрос функции в Cloud Dataprep issue tanker.   -  person Elliott Brossard    schedule 24.08.2018
comment
У меня такой же вопрос! Вам удалось это сделать в DataPrep?   -  person MT467    schedule 27.08.2018
comment
Если вы пишете в один раздел, можете ли вы использовать этот раздел в качестве целевой таблицы, например, table $ 20180101? Тогда Truncate просто удалит этот раздел.   -  person Hua Zhang    schedule 27.08.2018
comment
Привет, ХуаЧжан: невозможно выбрать раздел. Текстовое поле целевой таблицы нельзя редактировать, вы должны выбрать его в графическом интерфейсе. В идеале я хотел бы запланировать это задание dataprep, чтобы оно импортировало самую последнюю дату данных, а не жестко закодировало раздел. Я считаю, что это, вероятно, неправильный вариант использования Dataprep. @ MT467, я закончил тем, что просто написал запрос в SQL и планировал с помощью Composer   -  person Josh Laird    schedule 28.08.2018


Ответы (1)


Вы можете создать многораздельные базы таблиц DATE. Данные, записанные в многораздельную таблицу, автоматически доставляются в соответствующий раздел.

Данные, записанные в многораздельную таблицу, автоматически доставляются в соответствующий раздел в зависимости от значения даты (выраженного в формате UTC) в столбце разделения.

Добавьте данные, чтобы новые данные были добавлены в разделы.

Вы можете создать таблицу с помощью команды bq:

bq mk --table --expiration [INTEGER1] --schema [SCHEMA] --time_partitioning_field date 

time_partitioning_field определяет, какое поле вы будете использовать для разделов.

person Nathan Nasser    schedule 15.05.2019
comment
Как вы записываете в этот раздел с помощью Dataprep? - person Josh Laird; 15.05.2019
comment
Данные, записанные в многораздельную таблицу, автоматически доставляются в соответствующий раздел. - person Nathan Nasser; 20.05.2019
comment
вам просто нужно отправить данные в многораздельную таблицу без необходимости указывать раздел. - person Nathan Nasser; 20.05.2019
comment
Есть ли способ обрезать этот раздел с помощью Dataprep? Насколько мне известно, вы можете обрезать только всю таблицу, а не только этот конкретный раздел. - person Josh Laird; 22.05.2019
comment
Я лучше понимаю, вы хотите перезаписывать данные в разделе несколько раз в день, поправьте меня, если я ошибаюсь. В этом случае вы можете загрузить данные во временную таблицу, которую можно использовать для WRITE_TRUNCATE с помощью декоратора раздела cloud.google.com/bigquery/docs/ - person Nathan Nasser; 22.05.2019