Google BigQuery: импорт полей DATETIME в формате Avro - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть скрипт, который загружает данные из базы данных Oracle и загружает их в Google BigQuery. Это делается путем записи в файл Avro, который затем загружается непосредственно с использованием инфраструктуры python BQ. Таблицы BigQuery, в которые я загружаю данные, имеют предопределенные схемы, некоторые из которых содержат поля DATETIME.

Поскольку BigQuery теперь поддерживает поля Avro Logical , импорт данных временной метки больше не выполняется. проблема. Однако я все еще не могу импортировать поля даты и времени. Я попытался использовать строку, но затем я получил следующую ошибку:

Field CHANGED has incompatible types. Configured schema: datetime; Avro file: string.

Я также попытался преобразовать данные поля в метки времени при экспорте, но это вызвало внутреннюю ошибку в BigQuery:

An internal error occurred and the request could not be completed. Error: 3144498

Можно ли даже импортировать поля даты и времени с помощью Avro?

1 Ответ

0 голосов
/ 23 апреля 2020

В Avro логические типы данных должны включать attribute logicalType, возможно, это поле не включено в определение вашей схемы.

Здесь Есть пара примеров, подобных следующему. Насколько я знаю, тип может быть int или long, но логический тип должен быть датой:

{
'name': 'DateField', 
'type': 'int',
'logicalType': 'date'
}

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

Avro logical type --> date  
Converted BigQuery data type --> DATE

В случае, если вы получили ошибку, было бы полезно проверить схему вашего файла avro, вы можете использовать эту команду, чтобы получить ее детали:

java -jaravro-tools-1.9.2.jargetschema my-avro-file.avro

ОБНОВЛЕНИЕ

Для случаев, когда одна ДАТА не работает, учтите, что TIMESTAMP может хранить дату и время с количеством микро / нано секунд с unix эпохи, 1 января 1970 г. 00: 00: 00.000000 UT C (UT C, кажется, по умолчанию для авро). Кроме того, значения, хранящиеся в файле avro (типа DATE o TIMESTAMP), не зависят от конкретного часового пояса, в этом смысле он очень похож на тип данных BigQuery Timestamp .

...