Ing*_*ngo 6 sql json aggregate-functions google-cloud-sql google-bigquery
我使用的是从BigQuery列中提取JSON数据JSON_EXTRACT.现在我想提取值列表AVG并对它们运行聚合函数(如)..objects[*].v在http://jsonpath.curiousconcept.com/上测试JsonPath表达式成功.但查询:
SELECT
JSON_EXTRACT(json_column, "$.id") as id,
AVG(JSON_EXTRACT(json_column, "$.objects[*].v")) as average_value
FROM [tablename]
Run Code Online (Sandbox Code Playgroud)
在BigQuery上抛出JsonPath解析错误.这可能在BigQuery上吗?或者我是否需要预处理我的数据以便针对我的JSON内部的数据运行聚合函数?
我的数据与此类似:
# Record 1
{
"id": "abc",
"objects": [
{
"id": 1,
"v": 1
},
{
"id": 2,
"v": 3
}
]
}
# Record 2
{
"id": "def",
"objects": [
{
"id": 1,
"v": 2
},
{
"id": 2,
"v": 5
}
]
}
Run Code Online (Sandbox Code Playgroud)
这与另一个问题有关.
更新:运行两个查询可以简化问题.首先,运行JSON_EXTRACT并将结果保存到视图中.其次,针对此视图运行聚合函数.但即便如此,我还需要纠正JsonPath表达式$.objects[*].v以防止JSONPath parse error.
小智 6
利用SPLIT()将可重复的字段转换为单独的行.也可能更容易/更清楚地将它放入子查询并将AVG放在外面:
SELECT id, AVG(v) as average
FROM (
SELECT
JSON_EXTRACT(json_column, "$.id") as id,
INTEGER(
REGEXP_EXTRACT(
SPLIT(
JSON_EXTRACT(json_column, "$.objects")
,"},{"
)
,r'\"v\"\:([^,]+),')) as v FROM [mytable]
)
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)