在 BigQuery 文件加载 python 中配置列名



我正在尝试从Google的BigQuery Python库上传文件(google-cloud-bigquery==1.3.0(

使用文档:

dataset_ref = client.dataset(dataset_id)
table_ref = dataset_ref.table(table_id)
job_config = bigquery.LoadJobConfig()
job_config.source_format = bigquery.SourceFormat.CSV
job_config.skip_leading_rows = 1
job_config.autodetect = True
with open(filename, 'rb') as source_file:
job = client.load_table_from_file(
source_file,
table_ref,
location='US',
job_config=job_config)
job.result()

这将成功创建表并插入数据,在本例中为字符串类型的简单单列文件。

但是,它会设置以下列名称:string_field_0

有没有办法自定义这些列名称?

因为你只有一列只有字符串,所以 BigQuery 无法计算出标题/列名是什么,即使您在代码中使用job_config.skip_leading_rows = 1,即它不知道行和标题之间的区别。如果您有第二列,例如整数,那么 BigQuery 将能够保留列名,因为它现在可以区分。

作为一种解决方法,要么不使用auto_detect并手动指定架构(毕竟它只是一列(,要么加载它,然后在之后使用一些 SQL 点击它并重命名列。

您应该能够为加载作业添加架构。

例如
job_config.schema = [SchemaField('columnName', 'STRING', mode='nullable')]

最新更新