sql - BigQuery JSON - 标量子查询生成多个元素

标签 sql json google-bigquery

我正在尝试在 BQ 中解析这个 json。

{
  "variations":[
    {
      "prime":{
        "name":[
          {
            "variant":{
              "indicator":["helm"]
            }
          },
          {
            "variant":{
              "indicator":["chart"]
            }
          }]
      }
    }]
}

我想要的输出是

<表类=“s-表”> <标题> 变体 <正文> Helm ,图表

我尝试了下面的查询,得到 error: Scalar subquery produced more than one element. 。如果我重写它以使用嵌套数组,一切都会完美。但是,当我尝试遵循相同的概念使用标量子查询时,它不起作用。我认为这应该可行,但我不知道我错过了什么。

SELECT
 ARRAY(
   SELECT
     STRUCT(
       STRING_AGG(
          (SELECT 
             STRING_AGG(JSON_EXTRACT_SCALAR(z, '$')) 
           FROM UNNEST(
               (SELECT 
                  JSON_EXTRACT_ARRAY(y, '$.variant.indicator') 
                FROM UNNEST(JSON_EXTRACT_ARRAY(x, '$.prime.name')
               ) AS y
           )
          ) AS z)
       ) AS variant
     )
   FROM UNNEST(JSON_EXTRACT_ARRAY(json_string, '$.variations')) AS x
 ) AS variations
FROM json_string

任何帮助将不胜感激。

最佳答案

考虑以下方法

select 
  ( select string_agg(trim(indicator, '"')) 
    from unnest(json_extract_array(json_string, '$.variations')) variation,
    unnest(json_extract_array(variation, '$.prime.name')) variants,
    unnest(json_extract_array(variants, '$.variant.indicator')) indicator
  ) variant
from your_table               

如果应用于问题中的示例数据 - 输出为

enter image description here

关于sql - BigQuery JSON - 标量子查询生成多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71431416/

相关文章:

python - 从 Google BigQuery 中过滤掉或替换非英文字符

java - INSERT ELSE UPDATE 没有主键的表中的行

mysql - Symfony 原则 orderby 和 group by(不同)

mysql - SQL产品过滤器

SQL:计算多项选择结果的答案

go - 使用 json key 文件从 golang 登录到 bigquery

PHP Select 表单使用 php 从数据库中提取所有条目并显示选定的一个

c# - 在 Json.net 中获取错误 "Cannot add or remove items from Newtonsoft.Json.Linq.JProperty"

javascript - 无法使用 Javascript 访问 JSON 文件

python - 如何将 df 中的所有 NaT 和 nan 替换为 None