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 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件
如何使用 javascript 解析带有数组的外部 JSON 文件