你能帮我完成以下查询吗?首先,这是我用于学习的数据(不用担心它的结构只是为了学习如何查询 JSON),它是一个简单的 cars 表,其中有一个名为 objeto 的列是一个 JSON,它有一个 json 对象(人),里面有一个名为 cars 的数组属性:
INSERT INTO `project.dataset.cars`
(id, color, objeto)
VALUES
(1, 'Blue', JSON '{"key1": "value1", "key2": "value2", JSON """{
"person": {
"id": 123,
"name": "John Doe",
"cars": [
{
"make": "Toyota",
"model": "Camry"
},
{
"make": "Honda",
"model": "Civic"
}
]
}
}""");
我正在查看文档https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions#json_extract_array,目的是获取我的记录数组中包含的所有“make”,所以我尝试了以下方法:
SELECT
id,
color,
JSON_EXTRACT_ARRAY(objeto.person.cars, '$.make') AS all_makes
FROM
`project.dataset.cars`;
我没有收到错误,但在 all_makes 中也没有结果,我知道你可以像这样得到具体信息:
SELECT
id,
color,
objeto.person.cars[0].make
FROM
`project.dataset.cars`;
这将返回“Toyota”作为我在开始时提供的记录,但如何同时获得“Toyota”和“Honda”(所有品牌)?
谢谢
with mydata as (select 1 as id, 'Blue' as color, JSON '{"person": {"id": 123, "name": "John Doe", "cars": [{"make": "Toyota", "model": "Camry"}, {"make": "Honda", "model": "Civic" }]}}' as objeto)
select
id,
color,
string_agg(JSON_EXTRACT_SCALAR(all_cars,'$.make')) as all_makes
from mydata, UNNEST(JSON_EXTRACT_ARRAY(objeto, '$.person.cars')) AS all_cars
group by 1, 2