![](/img/trans.png)
[英]BigQuery: Extract values of selected keys from an array of json objects
[英]Extract multiple values from an array in JSON in BigQuery
我的數據庫表中有一個 JSON,如下所示,假設該列包含一個名為 favorites 的 JSON 文件。
{
"info": {
"music": [{"Year":2021,"Name":"Stay","Singer":"Justin Bieber"},
{"Year":2015,"Name":"Love Yourself","Singer":"Justin Bieber"},
{"Year":2003,"Name":"Crazy In Love","Singer":"Beyonce"}
],
"movie": [{"Year":2018,"Name":"Green Book","Director":"Peter Farrelly"},
{"Year":2007,"Name":"Lust, Caution","Director":"Ang Lee"}
]
}
}
I wanted to select all values from tags and my expected table would be like as following:
-----------------------------------------------------------------------------
| Name | Singer |
----------------------------------------------------------------------------
| Stay,Love Yourself,Crazy In Love | Justin Bieber,Justin Bieber,Beyonce|
-----------------------------------------------------------------------------
我已經知道如何使用 JSON_QUERY(json_col,'$.info.music[0].Name') 獲取數組中的第一個值,但我想將所有名稱或歌手提取到一個列中,還有一些 arrays可能有多個項目。 有人有什么建議嗎?
考慮以下方法
select
array(select json_extract_scalar(x, '$.Name') from unnest(json_extract_array(json_col, '$.info.music') || json_extract_array(json_col, '$.info.movie')) x) Name,
array(select json_extract_scalar(x, '$.Singer') from unnest(json_extract_array(json_col, '$.info.music')) x) Singer
from data
如果應用於您問題中的樣本數據 - output 是
我剛剛意識到 - 你想要逗號分隔列表 - 那么請考慮下面
select
(select string_agg(json_extract_scalar(x, '$.Name')) from unnest(json_extract_array(json_col, '$.info.music') || json_extract_array(json_col, '$.info.movie')) x) Name,
(select string_agg(json_extract_scalar(x, '$.Singer')) from unnest(json_extract_array(json_col, '$.info.music')) x) Singer
from data
與 output
另一個溶膠。 如果您不想聚合,可以使用 ARRAY_TO_STRING。
with data as
(
select
"""
{
"info": {
"music": [{"Year":2021,"Name":"Stay","Singer":"Justin Bieber"},
{"Year":2015,"Name":"Love Yourself","Singer":"Justin Bieber"},
{"Year":2003,"Name":"Crazy In Love","Singer":"Beyonce"}
],
"movie": [{"Year":2018,"Name":"Green Book","Director":"Peter Farrelly"},
{"Year":2007,"Name":"Lust, Caution","Director":"Ang Lee"}
]
}
}
""" as _json
)
select array_to_string(
array(
select json_extract_scalar(x,"$.Name")
from data,
unnest(json_extract_array(_json,"$.info.music")) as x
),","
) as Name, array_to_string(
array(
select json_extract_scalar(x,"$.Singer")
from data,
unnest(json_extract_array(_json,"$.info.music")) as x
),","
) as Singer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.