将 CSV 导入 BigQuery 中的表时无法添加字段

Posted

技术标签:

【中文标题】将 CSV 导入 BigQuery 中的表时无法添加字段【英文标题】:Cannot add fields when importing CSV to a table in BigQuery 【发布时间】:2018-02-07 11:42:20 【问题描述】:

我有一个执行 gbq 作业以将 csv 文件 f 加载到 BigQuery 中的表的 python 脚本。我正在尝试以 csv 格式上传数据并收到以下错误:

 400 Invalid schema update. Cannot add fields (field: string_field_8)

这是我的 csv:

    id,first_name,username,last_name,chat_username,chat_id,forward_date,message_text
    231125223|Just|koso|swissborg_bounty|-1001368946079|1517903147|tes
  481895079|Emerson|EmersonEmory|swissborg_bounty|-1001368946079|1517904387|pictu
    316560356|Ken Sam|ICOnomix|swissborg_bounty|-1001368946079|1517904515|Today 

这是我的代码:

from google.cloud.bigquery import Client
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '***.json'
os.environ['GOOGLE_CLOUD_DISABLE_GRPC'] = 'True'

from google.cloud import bigquery
dataset_name = 'test_temporary_dataset'
table_name='table_telega'
bigquery_client = bigquery.Client()
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(table_name)
job_config = bigquery.LoadJobConfig()
job_config.source_format = 'text/csv'
job_config.skip_leading_rows = 1
job_config.autodetect = True
job_config.fieldDelimiter='|'
job_config.allow_jagged_rows=True
job_config.ignoreUnknownValues=True
job_config.allow_quoted_newlines=True
with open('**.csv', 'rb') as source_file:
    #job = table.upload_from_file(source_file, source_format='text/csv')
    job=bigquery_client.load_table_from_file(source_file, table, job_config=job_config)

job.result()
print(job.result())

如何解决?我应该改变什么?

【问题讨论】:

CSV 文件的标题有 8 个字段,而内容有 7 个。 BigQuery 似乎自动检测到名称“string_field_8”,因为您将 autodetect 设置为 True 并且未提供架构。 是的,前面的cmets是对的。当您将它们加载到现有表中并且字段数量存在差异(架构不匹配)时,就会发生这种情况。我对其进行了测试,您可以绕过它,在每行的末尾添加一个管道分隔符,或者使用不同的表格。另外,我会为标题行使用相同的分隔符。 我注意到标题中的分隔符 (,) 和数据 (|) 不同。也许你应该让它们等价? 【参考方案1】:

只需在代码中添加这一行

job_config._properties['load']['schemaUpdateOptions'] = ['ALLOW_FIELD_ADDITION']

这将允许将列添加到您现有的架构中。

【讨论】:

【参考方案2】:

您将其设置为 = False,而不是 job_config.autodetect = True。

【讨论】:

您能否添加一点解释,说明为什么这会回答问题?

以上是关于将 CSV 导入 BigQuery 中的表时无法添加字段的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 如何在不使用列名作为值的情况下导入 CSV?

使用 Python 加载表时,BigQuery 不会跳过 CSV 的标题行

从Google驱动器导入文件到bigquery时如何指定工作表

Google BigQuery:将查询结果保存到表时找不到数据集

在 phpMyAdmin 中导入/替换带有 CSV 的表时遇到问题:第 1 行的 CSV 输入中的列数无效

在将数据从文件插入表时,如何用 NULL 替换 NA 值?