BigQuery 加载作业在 JSON 中的布尔数据类型字段上失败

Posted

技术标签:

【中文标题】BigQuery 加载作业在 JSON 中的布尔数据类型字段上失败【英文标题】:BigQuery load job failing on boolean data type fields from JSON 【发布时间】:2018-10-27 16:42:11 【问题描述】:

当我在包含布尔数据类型列时将 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()

Source JSON file

【问题讨论】:

您的 json 文件看起来像 Python 打印输出。 JSON布尔值是假/真(小写),但我在文件中看到假/真。字符串也应该是双引号而不是单引号。 谢谢,报价似乎不是问题,但无论如何我都会改变。布尔值直接来自另一个 API 调用的另一个 json.load 命令,所以我没想到 Id 必须小写它,但我会试一试! 好的,解决方法是将 JSON 布尔值转换为我的源中的字符串为“真”或“假”,然后大查询将其导入回布尔数据类型而不会出现问题。跨度> 我将您的答案发布为社区 wiki,以帮助可能遇到相同问题的其他人。 【参考方案1】:

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

【讨论】:

以上是关于BigQuery 加载作业在 JSON 中的布尔数据类型字段上失败的主要内容,如果未能解决你的问题,请参考以下文章

使用java将json数据流式传输到Bigquery中。不使用作业加载数据

加载作业尝试使用 java 将 json 插入 BigQuery 表时解析错误

Dataflow 中的 BigQuery 无法从 Cloud Storage 加载数据:为非记录字段指定了 JSON 对象

使用java.Without使用作业加载数据,将json数据流式传输到Bigquery

JSON_EXTRACT 不适用于 BigQuery 中的布尔值

文件:0:来自 Google BigQuery 加载作业的意外