sql: JSON_QUERY() 函数提取对象
Posted
技术标签:
【中文标题】sql: JSON_QUERY() 函数提取对象【英文标题】:sql: JSON_QUERY() function to extract objects 【发布时间】:2021-08-31 16:50:05 【问题描述】:我的数据集中有一个字段,其中包含以下格式的 json 对象:
cars |
---|
["element":"name":"honda","id":"34"] |
["element":"name":"Lexus","id":"56"] |
我正在使用以下查询来提取汽车的名称,但只返回空 (null) 行。任何想法我做错了什么?
select JSON_QUERY(cars,"$.name") AS car_names
from myTable
limit 100
【问题讨论】:
汽车的实际数据类型是什么,数组还是字符串?数组:['"element":"name":"honda","id":"34"'] 字符串:'["element":"name":"Lexus","id" :"56"]' 【参考方案1】:考虑以下方法
select *,
( select string_agg(json_extract_scalar(car, '$.element.name'))
from unnest(json_extract_array(cars)) car
) car_names
from `project.dataset.table`
如果应用于您问题中的示例数据 - 如下例所示
with `project.dataset.table` as (
select '["element":"name":"honda","id":"34"]' cars union all
select '["element":"name":"Lexus","id":"56"]'
)
select *,
( select string_agg(json_extract_scalar(car, '$.element.name'))
from unnest(json_extract_array(cars)) car
) car_names
from `project.dataset.table`
输出是
【讨论】:
【参考方案2】:如果你想提取一个标量值,你应该简单地使用 JSON_VALUE(expression,path)
For Example:
Info 对象包含一个变量名和另一个对象地址,
您可以使用 JSON_VALUE
获取 name 的值,因为它不是对象
但是
要获取地址,你必须使用JSON_QUERY.
【讨论】:
以上是关于sql: JSON_QUERY() 函数提取对象的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别