【问题标题】:BQ load JSON File with Array of ArrayBQ 加载带有数组数组的 JSON 文件
【发布时间】: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

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

【问题讨论】:

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

标签: arrays json google-bigquery


【解决方案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
猜你喜欢
  • 2022-01-19
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多