gpt4 book ai didi

python - 模式 avro 在时间戳中,但在 bigquery 中作为整数

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:38 26 4
gpt4 key购买 nike

我有一个将 avro 文件上传到 bigquery 的管道,配置的架构似乎没问题,但 BigQuery 理解为整数值而不是日期字段。这种情况我能做什么?

架构的 avro - 日期字段:

{
"name": "date",
"type": {
"type": "long",
"logicalType": "timestamp-millis"
},
"doc": "the date where the transaction happend"
}

大查询表:

enter image description here

enter image description here

我尝试使用下面的代码,但它只是忽略它。你知道原因吗?

import gcloud
from gcloud import storage
from google.cloud import bigquery

def insert_bigquery_avro(target_uri, dataset_id, table_id):
bigquery_client = bigquery.Client()
dataset_ref = bigquery_client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.source_format = bigquery.SourceFormat.AVRO
job_config.use_avro_logical_types = True
time_partitioning = bigquery.table.TimePartitioning()
# time_partitioning = bigquery.table.TimePartitioning(type_=bigquery.TimePartitioningType.DAY, field="date")
job_config.time_partitioning = time_partitioning
uri = target_uri
load_job = bigquery_client.load_table_from_uri(
uri,
dataset_ref.table(table_id),
job_config=job_config
)
print('Starting job {}'.format(load_job.job_id))
load_job.result()
print('Job finished.')

最佳答案

这是有意为之的,因为 BigQuery 默认情况下会忽略逻辑类型属性并使用基础 Avro 类型。例如,Avro timestamp-millis 逻辑类型在 BigQuery 中设置为 Integer。

要启用转换,请使用命令行工具将 --use_avro_ological_types 设置为 True,或在调用 jobs.insert 方法创建加载作业时的作业资源。此后,您的字段date将在BigQuery中设置为Timestamp类型。

看看Avro logical types and BigQuery doc 以查看所有被忽略的 Avro 逻辑类型以及在设置该标志后如何转换它们。这也将帮助您确定最适合您的字段的 Avro 逻辑类型。

希望这对您有所帮助。

关于python - 模式 avro 在时间戳中,但在 bigquery 中作为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59090735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com