Мне было интересно, есть ли у 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?