将JSON文件加载到BigQuery表中:架构更改

时间:2016-08-26 15:29:45

标签: json google-bigquery

我正在尝试将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)

2 个答案:

答案 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