BQ 加载带有数组数组的 JSON 文件

Posted

技术标签:

【中文标题】BQ 加载带有数组数组的 JSON 文件【英文标题】:BQ load JSON File with Array of Array 【发布时间】:2020-01-30 12:35:25 【问题描述】:

我正在尝试加载一些数组为空的 JOSN 文件。

"house_account_payable":"0.00","house_account_receivable":"0.00","gift_sales_payable":"0.00","gift_sales_receivable":"0.00","store_credit_sales_payable":"0.00","percentage_row":null,"sales_per_period":[["02:00AM - 02:59AM","amount":0,"qty":0],["03:00AM - 03:59AM","amount":0,"qty":0]],"revenue_centers":[],"tax_breakdowns":[]

这给出了错误:

rror while reading table: test2, error message: Failed to parse JSON: No object found when new array is started.; BeginArray returned false; Parser terminated before end of string

有人可以帮我解决这个问题吗?

【问题讨论】:

对象.....的开启和关闭应该在同一行。请参阅***.com/a/54658959/132438 进行修复 @FelipeHoffa 我已经更新了完整的 JSON 文件,它实际上是嵌套的。 【参考方案1】:

您是否尝试从本地计算机或 GCS 加载数据?请记住在JSONL(Newline delimited JSON) 中导出:

"open_orders_ids": []
"unpaid_orders_ids": []

输出:

查看documentation 关于嵌套和重复列的信息。

编辑:

您的 JSON 架构应如下所示:


    "items": [
        
            "house_account_payable": "0.00",
            "house_account_receivable": "0.00",
            "gift_sales_payable": "0.00",
            "gift_sales_receivable": "0.00",
            "store_credit_sales_payable": "0.00",
            "percentage_row": "",
            "sales_per_period": [
                
                    "AM02_00_AM02_59": 
                        "amount": "0",
                        "qty": "0"
                    
                ,
                
                    "AM03_00_AM03_59": 
                        "amount": "0",
                        "qty": "0"
                    
                
            ]
        
        ]

关于 Felipe Hoffa 的post,运行以下命令:

jq -c  .items[] <FILENAME>.json  > <FILENAME>.jq.json
bq load --source_format NEWLINE_DELIMITED_JSON --autodetect <DATASET_ID>.<TABLENAME> <FILENAME>.jq.json

架构:

如果这就是你要找的,请告诉我。

【讨论】:

我已经用完整的 JSON 文件更新了问题。 我已经更新了我的答案,让我知道结果。【参考方案2】:

空数组没有问题。

问题在于这个较短的json:

"sales_per_period":[["02:00AM - 02:59AM","amount":0,"qty":0],["03:00AM - 03:59AM","amount":0,"qty":0]]

那里的数组包含不同类型的元素,要将其放入结构化表中,需要不同的架构。

例如:

"sales_per_period":["a":"02:00AM - 02:59AM","b":"amount":0,"qty":0,"a":"03:00AM - 03:59AM","b":"amount":0,"qty":0]

现在这很容易加载到 BigQuery 中:

bq load --source_format=NEWLINE_DELIMITED_JSON --autodetect temp.short delete.short.json

您能否在 BigQuery 之外轻松更改此源 JSON?否则将其原始加载到 BigQuery 中,并使用 BigQuery 中的 JS UDF 对其进行解析。

【讨论】:

我尝试用字符串加载它,但它不起作用,我可以加载原始数据。但是我应该使用什么数据类型? 加载为csv,带有自定义字段分隔符\0

以上是关于BQ 加载带有数组数组的 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章