我想尝试将大型JSON记录对象上传到BigQuery。
我说的是每个1.5 MB的JSON记录,具有复杂的嵌套模式,最高可达7度。
为简单起见,我开始在一行上加载一条记录文件。
起初我尝试让BigQuery自动检测我的架构,但这导致表没有响应,我无法执行查询,尽管它说它至少有一个记录。
然后,假设我的架构对于加载器来说太难以反转,我尝试自己编写架构然后我尝试用单个记录加载我的文件。
起初我得到一个简单的错误,只是“无效”。
bq load --source_format=NEWLINE_DELIMITED_JSON invq_data.test_table
my_single_json_record_file
Upload complete.
Waiting on bqjob_r5a4ce64904bbba9d_0000015e14aba735_1 ... (3s) Current
status: DONE
BigQuery error in load operation: Error processing job 'invq-
test:bqjob_r5a4ce64904bbba9d_0000015e14aba735_1': JSON table
encountered too many errors, giving up. Rows:
1; errors: 1.
在检查作业错误后,我只是给了我以下内容:
"status": {
"errorResult": {
"location": "file-00000000",
"message": "JSON table encountered too many errors, giving up. Rows: 1; errors: 1.",
"reason": "invalid"
},
"errors": [
{
"location": "file-00000000",
"message": "JSON table encountered too many errors, giving up. Rows: 1; errors: 1.",
"reason": "invalid"
}
],
"state": "DONE"
},
经过几次尝试创建新表后,它实际上开始在命令行上成功,而没有报告错误:
bq load --max_bad_records=1 --source_format=NEWLINE_DELIMITED_JSON invq_data.test_table_4 my_single_json_record_file
Upload complete.
Waiting on bqjob_r368f1dff98600a4b_0000015e14b43dd5_1 ... (16s) Current status: DONE
状态检查器没有错误...
"statistics": {
"creationTime": "1503585955356",
"endTime": "1503585973623",
"load": {
"badRecords": "0",
"inputFileBytes": "1494390",
"inputFiles": "1",
"outputBytes": "0",
"outputRows": "0"
},
"startTime": "1503585955723"
},
"status": {
"state": "DONE"
},
但我的表格中没有添加任何实际记录。
我试图从WebUI执行相同的操作,但结果是一样的。已完成的工作是绿色的,但没有添加实际记录。
我还能做些什么来检查数据下沉的位置吗?也许还有一些日志?
我可以想象,我可能处于2 MB JSON行大小限制的边缘,但如果是这样,是否应将此报告为错误?
提前感谢您的帮助!!
编辑:
事实证明,我的架构的复杂性在这里有点恶魔。 我的json文件是有效的,但我的复杂模式有几个错误。
事实证明,我必须简化这样的架构,因为我得到了一批新的数据,其中单个json实例更多30MB,我必须以更关系的方式重构这些数据,同时插入更小的行在数据库中。
当架构分散在多个实体(ergo,简化)中时,有趣的是,架构的实际错误/不一致性开始实际显示在返回的错误中,并且更容易修复它们。 (大多数情况下,它是新的嵌套无证数据,但我还是不知道......但仍然是我的坏事)。
这里的教训是,当一个表架构太长时(我没有测试多少精确太长)BigQuery只是隐藏在报告太多错误的背后。 但是,您应该考虑简化数据的架构(/结构)。