首页 > 解决方案 > BigQuery 加载作业在 JSON 中的布尔数据类型字段上失败

问题描述

当我包含布尔数据类型列时,我在将 NDJSON 文件加载到 Google BigQuery 时收到“无效数据文件”错误。如果我从架构和源文件中删除这些列,则作业会成功运行。我正在通过 python 脚本使用 load_table_from_uri 进程,但我也在 gui 中尝试过它,它也是同样的问题。布尔字段的 json 文件看起来正确(附加)。我还尝试了遗留和当前的布尔数据类型(BOOL vrs BOOLEAN)我错过了什么。

dataset_id = 'dev'  
table_id = 'DIM_EMP'  
table_ref = bqClient.dataset(dataset_id).table(table_id)

job_config = bigquery.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('personId', 'INT64'),
bigquery.SchemaField('personNumber', 'STRING'),
bigquery.SchemaField('firstName', 'STRING'),
bigquery.SchemaField('middleName', 'STRING'),
bigquery.SchemaField('lastName', 'STRING'),
bigquery.SchemaField('userName', 'STRING'),
bigquery.SchemaField('accessProfile', 'STRING'),
bigquery.SchemaField('notificationProfile', 'STRING'),
bigquery.SchemaField('preferenceProfile', 'STRING'),
bigquery.SchemaField('supervisorPersonId', 'INT64'),
bigquery.SchemaField('hireDate', 'DATE'),
bigquery.SchemaField('processEmployeeProfile', 'STRING'),
bigquery.SchemaField('logonProfile', 'STRING'),
bigquery.SchemaField('birthDate', 'DATE'),
bigquery.SchemaField('delegateProfile', 'STRING'),
**bigquery.SchemaField('isManager','BOOLEAN')
bigquery.SchemaField('isEmployee','BOOL'),**
bigquery.SchemaField('localeProfile', 'STRING')
]
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = 'gs://'+project+'-stage/getPeopleDetails/DIMEMP*.ndjson'
load_job = bqClient.load_table_from_uri(
    uri,
    table_ref,
    job_config=job_config)  # API request

load_job.result()

源 JSON 文件

标签: pythonjsongoogle-bigquery

解决方案


要将 NDJSON 文件加载到 BigQuery 中,布尔值 true 和 false 应放在引号之间。如果列仅包含“true”或“false”,BigQuery 会自动将其类型设置为布尔值。


推荐阅读