BQ load JSON Файл с массивом массивов - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь загрузить файл 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

Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Нет проблем с нулевыми массивами.

Проблема заключается в этом более коротком 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

enter image description here

Можете ли вы легко изменить этот источник JSON вне BigQuery? В противном случае загрузите его в BigQuery и проанализируйте его с JS UDF внутри BigQuery.

0 голосов
/ 30 января 2020

Вы пытаетесь загрузить данные с локального компьютера или GCS? Пожалуйста, помните об экспорте в JSONL(Newline delimited JSON):

{"open_orders_ids": []}
{"unpaid_orders_ids": []}

Вывод:

enter image description here

Посмотрите на документация о вложенных и повторяющихся столбцах.

РЕДАКТИРОВАТЬ:

Ваша 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"
                    }
                }
            ]
        }
        ]
}

Относительно чтобы пост Фелипе Хоффа, выполните следующие команды:

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

Схема:

enter image description here

Позвольте мне знать, если это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...