2017-07-28 93 views
0

我有一个JSON记录,它看起来像BIGQUERY无法从谷歌云存储加载数据

{"customer_id":"2349uslvn2q3","order_id":"9sufd23rdl40", 
"line_item": [{"line":"1","sku":"10","amount":10}, 
       {"line":"2","sku":"20","amount":20}]} 

我试图加载上述成具有架构定义为表记录,

"fields": [ 
    { 
    "mode": "NULLABLE", 
    "name": "customer_id", 
    "type": "STRING" 
    }, 
    { 
    "mode": "NULLABLE", 
    "name": "order_id", 
    "type": "STRING" 
    }, 
    { 
    "mode": "REPEATED", 
    "name": "line_item", 
    "type": "STRING" 
    } 
] 

我收到以下错误“消息”:

JSON行解析错误,起始于位置0的文件: gs:// gcs_bucket/file0。用于非记录字段中指定的JSON对象: LINE_ITEM

我想其可以具有多于1行作为JSON字符串的数组中的行项目列于表line_item JSON字符串。

有什么建议吗?

回答

1

的第一件事情是,你的输入JSON should't有一个“\ n”字符,所以你应该保存它想:

:你的JSON文件应该如何看起来像

{"customer_id":"2349uslvn2q3","order_id":"9sufd23rdl40", "line_item": [{"line":"1","sku":"10","amount":10}, {"line":"2","sku":"20","amount":20}]} 

一个例子

{"customer_id":"2349uslvn2q3","order_id":"9sufd23rdl40", "line_item": [{"line":"1","sku":"10","amount":10}, {"line":"2","sku":"20","amount":20}]} 
{"customer_id":"2","order_id":"2", "line_item": [{"line":"2","sku":"20","amount":20}, {"line":"2","sku":"20","amount":20}]} 
{"customer_id":"3","order_id":"3", "line_item": [{"line":"3","sku":"30","amount":30}, {"line":"3","sku":"30","amount":30}]} 

而且你的模式不正确。它应该是:

[ 
    { 
    "mode": "NULLABLE", 
    "name": "customer_id", 
    "type": "STRING" 
    }, 
    { 
    "mode": "NULLABLE", 
    "name": "order_id", 
    "type": "STRING" 
    }, 
    { 
    "mode": "REPEATED", 
    "name": "line_item", 
    "type": "RECORD", 
    "fields": [{"name": "line", "type": "STRING"}, {"name": "sku", "type": "STRING"}, {"name": "amount", "type": "INTEGER"}] 
    } 
] 

为了更好地理解的模式是如何工作的,我已经试过在this answer写不大不小的指导。希望它具有一定的价值。

如果你的数据内容在保存例如一提起称为gs://gcs_bucket/file0和你在schema.json模式则该命令应为你工作:

bq load --source_format=NEWLINE_DELIMITED_JSON dataset.table gs://gcs_bucket/file0 schema.json 

(假设您正在使用CLI工具,因为它似乎是在你的问题的情况下)。

+0

谢谢你的建议!您在这里的模式定义,我已经尝试过并且工作正常。我之前有过,我希望将整个line_item作为表中的json值数组,而不是字符串数组。是否有可能将整行项目作为json? – Kevin

相关问题