BigQuery使用Python脚本中忽略的\u avro\u逻辑\u类型
我正在尝试使用Python脚本将AVRO文件加载到BigQuery。这个过程本身是成功的,但在创建表的过程中,让BigQuery使用AVRO的逻辑数据类型时遇到了一些问题 使用这些逻辑类型是由Google记录的,并被添加到Google cloud python库中 我不是一个专业的程序员,但我希望下面的代码片段是正确的。。。然而,use_avro_logical_types属性似乎被忽略,时间戳被加载为INT而不是TIMESTAMPBigQuery使用Python脚本中忽略的\u avro\u逻辑\u类型,python,google-bigquery,avro,Python,Google Bigquery,Avro,我正在尝试使用Python脚本将AVRO文件加载到BigQuery。这个过程本身是成功的,但在创建表的过程中,让BigQuery使用AVRO的逻辑数据类型时遇到了一些问题 使用这些逻辑类型是由Google记录的,并被添加到Google cloud python库中 我不是一个专业的程序员,但我希望下面的代码片段是正确的。。。然而,use_avro_logical_types属性似乎被忽略,时间戳被加载为INT而不是TIMESTAMP ... with open(full_name, 'r
...
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
}
}]
}
有人能详细说明这个问题吗?谢谢 代码看起来正确,逻辑类型注释也正确。我知道你有微精度和微精度,但我认为这在这种情况下并不重要 一种可能性是:您正在向现有表写入数据吗?编写时,代码示例将使用
APPEND
write配置作为加载作业的默认配置。在这种情况下,负载可能会使模式适应所定义的内容(例如,表最初创建时列为整数而不是时间戳)。您应该能够通过将负载定向到不存在的表来进行测试,或者可能使用truncate write处置来允许覆盖该表
var_job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
显然,我的Python库并不像我想的那样是最新的。。更新我的谷歌云库解决了这个问题。感谢您的输入您能提供数据的avro模式吗?我想确认时间戳列的逻辑类型注释。@shollyman补充道!我正在从GUI中手动删除该表。我也尝试了你的解决方案,但不幸的是没有改变。使用CLI和属性上载相同的文件效果很好..这是不寻常的。我成功地使用了它。请你在项目上提交一个问题,并提供一个示例工作ID来证明这一点。很好,也为我解决了这个问题。别忘了接受你的答案:)