我们已经将BigQuery加载作业与 autodetect , ALLOW_FIELD_ADDITION 和 ignore_unknown_values 选项一起使用了一年多,但最近我们收到了StackDriver日志上出现以下错误:
jobStatus: {
additionalErrors: [
0: {
code: 13
message: "An internal error occurred and the request could not be completed. Error: 9843239"
}
]
error: {
code: 13
message: "An internal error occurred and the request could not be completed. Error: 9843239"
}
state: "DONE"
}
我进行了调查,发现当JSON有效负载包含一个或多个新字段时会发生此错误,理论上应在加载JSON有效负载之前将其添加到BigQuery表中。
示例:
我正在加载两个JSON文件。第一个将创建表并加载数据:
$ cat ./example1.json
{ "id": 123, "name": "John Doe" }
$ bq load --autodetect --schema_update_option=ALLOW_FIELD_ADDITION --ignore_unknown_values --source_format=NEWLINE_DELIMITED_JSON test_dataset.test_table ./example1.json
Upload complete.
Waiting on bqjob_r511e2ad924d17629_00000168cdc46bab_1 ... (0s) Current status: DONE
创建的表:
第二个JSON文件,带有一个新字段:
$ cat ./example2.json
{ "id": 234, "name": "John Doe Jr", "age": 19 }
$ bq load --autodetect --schema_update_option=ALLOW_FIELD_ADDITION --ignore_unknown_values --source_format=NEWLINE_DELIMITED_JSON test_dataset.test_table ./example2.json
Upload complete.
Waiting on bqjob_r263276fb02033623_00000168cdc5b0ca_1 ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job 'xxx:bqjob_r263276fb02033623_00000168cdc5b0ca_1': An internal error occurred and the request could not be completed. Error: 9843239
如果我不使用--ignore_unknown_values
,它将成功加载,并将新字段添加到表中。
文档:
configuration.load.ignoreUnknownValues布尔型[可选]
指示BigQuery是否应允许不包含的其他值 在表模式中表示。如果为true,则额外值为 忽略了。如果为false,则带有额外列的记录被视为错误 记录,如果有太多不良记录,则表示无效错误 返回工作结果。默认值为false。的 sourceFormat属性确定BigQuery视为额外内容 值:CSV:尾随列JSON:命名值不匹配任何 列名
看起来--ignore_unknown_values
的行为已被修改,当它为false
时,带有额外字段的JSON负载不再是不好的记录。
有人可以确认吗?
编辑:它在我发布的同一天(格林尼治标准时间19:30之后)固定。从01/29开始发生此错误。请忽略。