Поддержка JSON-путей в BigQuery - PullRequest
1 голос
/ 06 июня 2019

Мне было интересно, есть ли у BigQuery какая-либо дополнительная поддержка путей JSON, поскольку кажется, что это такой распространенный способ работы с вложенными данными в BigQuery.Например, как несколько лет назад казалось, что ответ таков: Какие выражения JsonPath поддерживаются в BigQuery? , т. Е. "Использовать UDF".

Однако кажется, что используетсяпуть в массиве, такой как:

`$..Job'

Это такая распространенная операция, учитывая повторяющееся поле BigQuery, что примерно в 70% случаев я пытался использовать BigQuery JSON_EXTRACT Я сталкиваюсь с ограничением необходимости перебирать массив.

Эта возможность еще поддерживается в BigQuery или есть планы по ее поддержке без необходимости создания пользовательской функции?Работает так же хорошо, как что-то вроде следующего:

CREATE TEMPORARY FUNCTION CUSTOM_JSON_EXTRACT(json STRING, json_path STRING)
RETURNS STRING
LANGUAGE js AS """
    try { var parsed = JSON.parse(json);
        return JSON.stringify(jsonPath(parsed, json_path));
    } catch (e) { return null }
"""
OPTIONS (
    library="gs://xx-bq/jsonpath-0.8.0.js"
);
SELECT CUSTOM_JSON_EXTRACT(to_json_string(Occupation), '$..Job'), to_json_string(MovieInfo), json_extract(MovieInfo, '$.Platform') FROM `xx-163219.bqtesting.xx` LIMIT 1000

В конечном итоге это занимает где-то в 4-6 раз больше, чем обычная функция JSON_EXTRACT (2 с против примерно 10 с).Или я что-то упускаю из-за того, что вы можете делать с объектами JSON в BQ?

1 Ответ

0 голосов
/ 20 июня 2019

В настоящее время поддержка JSONPath в BigQuery включает в себя и ограничивается $,. И [], где последний может быть либо дочерним оператором, либо оператором нижнего индекса (массива).

Другие элементы синтаксиса из JSONPath не поддерживаются, но для дальнейшего использования есть публичный запрос на поддержку полного синтаксиса JSONPath .

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