我正在尝试将json文件加载到BQ表中。我的架构看起来像:
{"_eventid": "1234", "Keywords":""}
{"_eventid": "4567", "Keywords":{"_text":"abcd"} }
从上面,您可以看到“关键字”的架构发生了变化。我该如何处理?使用类似的东西:
{
"name":"Keywords",
"type":"record",
"mode":"nullable",
"fields": [
{
"name":"_text",
"type":"string",
"mode":"nullable"
}
]
},
仅适用于第二个条目。首先,我得到错误:
Errors:
file-00000000: JSON table encountered too many errors, giving up. Rows: 1; errors: 1. (error code: invalid)
JSON parsing error in row starting at position 0 at file: file- 00000000. Flat value specified for record field. Field: Keywords; Value: (error code: invalid)
答案 0 :(得分:1)
Bigquery表是模式限制的。每当我们尝试摄取不符合表模式的数据时,我们都会收到错误。在第一个记录中,Keywords
的值是字符串,但在模式中,它是一个可以为空的字段,其名称为_text
。
在将数据加载到bigquery之前,您需要预先处理数据。如果您有一个小的json文件,您可以编写脚本并检查Keywords
的类型是记录还是字符串(如果是字符串)首先创建记录。因此,在预处理之后,文件内容将如下所示:
{"_eventid": "1234", "Keywords":{"_text": ""}}
{"_eventid": "4567", "Keywords":{"_text":"abcd"} }
根据您的架构Keywords
是可空的记录。您甚至可以忽略keywords
在预处理期间哪个值为空。在此步骤之后,输入文件将变为。
{"_eventid": "1234"}
{"_eventid": "4567", "Keywords":{"_text":"abcd"} }
答案 1 :(得分:1)
BigQuery现在支持使用
加载架构更改--schema_update_option=ALLOW_FIELD_ADDITION
--schema_update_option=ALLOW_FIELD_RELAXATION
选项。有关JSON加载的更多详细信息和示例,请参阅How to insert/append unstructured data to bigquery table。