Ниже приведен пример для BigQuery Standard SQL, который позволяет вам приблизиться к стандартному способу работы с JSONPath и не требует дополнительных манипуляций, поэтому вы просто используете CUSTOM_JSON_EXTRACT(json, json_path)
функцию
#standardSQL
CREATE TEMPORARY FUNCTION CUSTOM_JSON_EXTRACT(json STRING, json_path STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
return jsonPath(JSON.parse(json), json_path);
"""
OPTIONS (
library="gs://your_bucket/jsonpath-0.8.0.js"
);
WITH t AS (
SELECT '''
[
{"blabla1":1,"X":1,"blabla2":3,"blabla3":5,"blabla4":7,"Y":"2"},
{"blabla1":2,"X":3,"blabla2":4,"blabla3":6,"blabla4":8,"Y":"4"}
]
''' AS json_column
)
SELECT
CUSTOM_JSON_EXTRACT(json_column , '$[*].X') AS X,
CUSTOM_JSON_EXTRACT(json_column , '$[*].Y') AS Y
FROM t
результат будет
Row X Y
1 1 2
3 4
Примечание: чтобы преодолеть текущее «ограничение» BigQuery для JsonPath, вышеприведенное решение использует пользовательскую функцию вместе с внешней библиотекой - jsonpath-0.8.0.js
, которую можно загрузить с https://code.google.com/archive/p/jsonpath/downloads и загружено в Google Cloud Storage - gs: //your_bucket/jsonpath-0.8.0.js
Просто перечитайте ответ Фелипе - для его примера выше решение будет выглядеть ниже (так же, как и к вашему сведению)
SELECT
id,
CUSTOM_JSON_EXTRACT(payload, '$.commits[*].author.email') emails
FROM `githubarchive.day.20180830`
WHERE type='PushEvent'
AND id='8188163772'