Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BigQuery使用Python脚本中忽略的\u avro\u逻辑\u类型_Python_Google Bigquery_Avro - Fatal编程技术网

BigQuery使用Python脚本中忽略的\u avro\u逻辑\u类型

BigQuery使用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

我正在尝试使用Python脚本将AVRO文件加载到BigQuery。这个过程本身是成功的,但在创建表的过程中,让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
        }
    }]
}

有人能详细说明这个问题吗?谢谢

代码看起来正确,逻辑类型注释也正确。我知道你有微精度和微精度,但我认为这在这种情况下并不重要

一种可能性是:您正在向现有表写入数据吗?编写时,代码示例将使用
APPEND
write配置作为加载作业的默认配置。在这种情况下,负载可能会使模式适应所定义的内容(例如,表最初创建时列为整数而不是时间戳)。您应该能够通过将负载定向到不存在的表来进行测试,或者可能使用truncate write处置来允许覆盖该表

var_job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE

显然,我的Python库并不像我想的那样是最新的。。更新我的谷歌云库解决了这个问题。感谢您的输入

您能提供数据的avro模式吗?我想确认时间戳列的逻辑类型注释。@shollyman补充道!我正在从GUI中手动删除该表。我也尝试了你的解决方案,但不幸的是没有改变。使用CLI和属性上载相同的文件效果很好..这是不寻常的。我成功地使用了它。请你在项目上提交一个问题,并提供一个示例工作ID来证明这一点。很好,也为我解决了这个问题。别忘了接受你的答案:)