我正在使用bigquery command line tool上传这些记录:
{name: "a"}
{name1: "b"}
{name: "c"}
➜ ~ bq load --source_format=NEWLINE_DELIMITED_JSON my_dataset.my_table ./names.json
这是我得到的结果:
Upload complete.
Waiting on bqjob_r7fc5650eb01d5fd4_000001560878b74e_1 ... (2s) Current status: DONE
BigQuery error in load operation: Error processing job 'my_dataset:bqjob...4e_1': JSON table encountered too many errors, giving up.
Rows: 2; errors: 1.
Failure details:
- JSON parsing error in row starting at position 5819 at file:
file-00000000. No such field: name1.
当我使用bq --format=prettyjson show -j <jobId>
时,我得到:
{
"status": {
"errorResult": {
"location": "file-00000000",
"message": "JSON table encountered too many errors, giving up. Rows: 2; errors: 1.",
"reason": "invalid"
},
"errors": [
{
"location": "file-00000000",
"message": "JSON table encountered too many errors, giving up. Rows: 2; errors: 1.",
"reason": "invalid"
},
{
"message": "JSON parsing error in row starting at position 5819 at file:
file-00000000. No such field: name1.",
"reason": "invalid"
}
],
"state": "DONE"
}
}
正如您所看到的,我收到一条错误,告诉我哪条线路出错了。 :行:2;错误:1
现在我正在尝试使用max_bad_errors
启用错误 ➜ ~ bq load --source_format=NEWLINE_DELIMITED_JSON --max_bad_records=3 my_dataset.my_table ./names.json
这是我收到的:
Upload complete.
Waiting on bqjob_...ce1_1 ... (4s) Current status: DONE
Warning encountered during job execution:
JSON parsing error in row starting at position 5819 at file: file-00000000. No such field: name1.
当我使用bq --format=prettyjson show -j <jobId>
时,我得到:
{
.
.
.
"status": {
"errors": [
{
"message": "JSON parsing error in row starting at position 5819 at file: file-00000000. No such field: name1.",
"reason": "invalid"
}
],
"state": "DONE"
},
}
当我检查时 - 它实际上将好的记录上传到表中并忽略了坏记录,
但现在我不知道错误是什么记录。
这是一个很大的查询错误吗? 可以修复,所以我在启用不良记录时也会收到记录号吗?
答案 0 :(得分:1)
是的,这就是max_bad_records的作用。如果错误数低于max_bad_records,则加载将成功。错误消息告诉您失败行的开始位置5819和文件名file-00000000。由于您正在进行上传和加载,因此文件名已更改。
之前的&#34;行:2;错误:1&#34;意味着解析了2行,并且有1个错误。它并不总是文件中的第二行。许多工作人员可以并行处理大文件。 Worker n在位置xxxx处开始处理,解析了两行,并发现错误。它还会报告相同的错误消息,显然2并不意味着文件中的第2行。对于工人n来说,从头开始扫描文件以找出它开始的哪一行是没有意义的。相反,它只会报告线的起始位置。