在 BigQuery 中查询 json 对象内的 json 数组

问题描述 投票:0回答:1

你能帮我完成以下查询吗?首先,这是我用于学习的数据(不用担心它的结构只是为了学习如何查询 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”(所有品牌)?

谢谢

json google-bigquery
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.