【问题标题】:Set schema for only one column in BigQuery在 BigQuery 中仅为一列设置架构
【发布时间】:2019-06-16 21:02:45
【问题描述】:

我有一个 .csv 文件,我想将它附加到我的 BigQuery 数据集/表中,其中一列的格式为 dd.mm.yyyy。因为我想使用分区表,所以我需要一列的格式为 DATE。

但是,我不确定如何仅为一列设置架构。我尝试了以下方法:

from google.cloud import bigquery as bq

dataset_ref                     = client.dataset(dataset_id)
table_ref                       = dataset_ref.table(table_id)

job_config                      = bq.LoadJobConfig()
job_config.write_disposition    = bq.WriteDisposition.WRITE_APPEND

job_config.source_format        = bq.SourceFormat.CSV
job_config.field_delimiter      = delimiter
job_config.skip_leading_rows    = 1
job_config.autodetect           = True

job_config.schema_update_options = [
    bq.SchemaUpdateOption.ALLOW_FIELD_ADDITION,
]
job_config.schema = [
    bq.SchemaField('date_col', 'DATE')
]

job = client.load_table_from_file(
    source_file,
    table_ref,
    location="europe-west2",  # Must match the destination dataset location.
    job_config=job_config)  # API request

job.result() # Waits for table load to complete.

但它给出了错误:

google.api_core.exceptions.BadRequest:读取数据时出现 400 错误, 错误信息:CSV 表遇到太多错误,放弃。行: 1个;错误: 1. 请查看 errors[] 集合以获取更多信息 详情。

当我取出 .schema 选项时,它可以正常工作,但随后会将列作为字符串导入。

【问题讨论】:

    标签: python python-3.x google-cloud-platform google-bigquery


    【解决方案1】:

    all the columns names and types are required when setting it 以来,您不能只指定架构中的一列。另一方面,dd.mm.yyyy 格式的日期在加载到 BigQuery 时无法解析为 DATE,因此您必须将其加载为 STRING,然后在导入 BigQuery 后进行解析。否则,您将不得不change your data format to YYYY-MM-DD

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      相关资源
      最近更新 更多