Я пытаюсь загрузить файлы AVRO в BigQuery с помощью скрипта Python. Этот процесс сам по себе успешен, но у меня возникают некоторые проблемы с тем, чтобы BigQuery использовал логические типы данных AVRO во время создания таблицы.
Использование этих логических типов задокументировано Google здесь и добавлено в библиотеки google-cloud-python здесь .
Я не программист по профессии, но я ожидаю, что приведенный ниже фрагмент будет правильным ... Однако свойство use_avro_logical_types, похоже, игнорируется, и временные метки загружаются как INT вместо TIMESTAMP.
...
with open(full_name, 'rb') as source_file:
var_job_config = google.cloud.bigquery.job.LoadJobConfig()
var_job_config.source_format = 'AVRO'
var_job_config.use_avro_logical_types = True
job = client.load_table_from_file(
source_file, table_ref, job_config=var_job_config)
job.result() # Waits for job to complete
...
Схема AVRO выглядит следующим образом:
{
"type": "record",
"name": "table_test",
"fields": [{
"name": "id_",
"type": {
"type": "bytes",
"logicalType": "decimal",
"precision": 29,
"scale": 0
}
},
{
"name": "datetime_",
"type": ["null",
{
"type": "long",
"logicalType": "timestamp-micros"
}]
},
{
"name": "integer_",
"type": ["null",
{
"type": "bytes",
"logicalType": "decimal",
"precision": 29,
"scale": 0
}]
},
{
"name": "varchar_",
"type": ["null",
{
"type": "string",
"logicalType": "varchar",
"maxLength": 60
}]
},
{
"name": "capture_time",
"type": {
"type": "long",
"logicalType": "timestamp-millis"
}
},
{
"name": "op_type",
"type": "int"
},
{
"name": "seq_no",
"type": {
"type": "string",
"logicalType": "varchar",
"maxLength": 16
}
}]
}
Может кто-нибудь уточнить этот вопрос? Спасибо!