BigQuery 字段的类型已从 STRING 更改为 TIMESTAMP

Posted

技术标签:

【中文标题】BigQuery 字段的类型已从 STRING 更改为 TIMESTAMP【英文标题】:BigQuery field has changed type from STRING to TIMESTAMP 【发布时间】:2020-10-22 09:32:45 【问题描述】:

我正在使用 Python API 将数据导入 BigQuery:

import os
from google.cloud import bigquery
from google.cloud.exceptions import BadRequest
import json

from schema import schema


target_project_name = 'project_name'
target_dataset_name = 'dataset_name'
target_table_name = 'table_name'

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = './credentials.json'

dataset_ref = bigquery.dataset.DatasetReference(target_project_name, target_dataset_name)
table_ref = bigquery.table.TableReference(dataset_ref, target_table_name)

job_config = bigquery.LoadJobConfig()
job_config.schema = schema

client = bigquery.Client()

cnt = 0

with open('./data/transformed_v2.json', 'r') as f:
    json_list = []
    for line in f.readlines():
        cnt += 1
        if cnt >= 10:
            break
        json_contents = json.loads(line)
        json_list.append(json_contents)


    job = client.load_table_from_json(json_list, table_ref)

try:
    result = job.result()
except BadRequest as ex:
    for err in ex.errors:
        print(err)
    print(job.errors)

上面代码中提到的schema 包含一个有问题的字段migration_datetime,它被定义为bigquery.SchemaField("migration_datetime", "STRING", mode="NULLABLE")。该字段包含存储在'%Y-%m-%dT%H:%M:%S' format. The schema in the target table has the migration_datetimefield specified asSTRING`中的值。

job.result() 引发错误,指出 Field migration_datetime has changed type from STRING to TIMESTAMP。为了缓解这种情况,我在migration_datetime 列中的值中添加了_string 后缀,但错误仍然存​​在。请问您可能是什么原因?

【问题讨论】:

【参考方案1】:

考虑将job_config 传递给load_table_from_json,如here 或使用client.schema_from_json

【讨论】:

哈哈。这很容易,我忘了传递参数。谢谢

以上是关于BigQuery 字段的类型已从 STRING 更改为 TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章

错误:使用 load_table_from_json 将数据插入 BigQuery 时,字段 X“已将类型从 NUMERIC 更改为 FLOAT”

查询 Bigquery 重复字段

如何更改 BigQuery 中列的数据类型

BigQuery REPEATED 字段包含

BigQuery 自动将字符串转换为 int

BigQuery:带有 WriteToBigQuery 的 Array<string> 字段