Sql 从Presto中的深度嵌套json数组对象提取ID的查询

Sql 从Presto中的深度嵌套json数组对象提取ID的查询,sql,presto,Sql,Presto,我正在使用Presto并尝试从嵌套json结构中的'source'='dd'提取所有'id',如下所示 { "results": [ { "docs": [ { "id": "apple1", "source": "dd" }, { "id": "apple2", "source": "aa" }, {

我正在使用Presto并尝试从嵌套json结构中的'source'='dd'提取所有'id',如下所示

{
  "results": [
    {
      "docs": [
        {
          "id": "apple1",
          "source": "dd"
        },
        {
          "id": "apple2",
          "source": "aa"
        },
        {
          "id": "apple3",
          "source": "dd"
        }
      ],
      "group": 99806
    }
  ]
}
应将ID[apple1,apple3]提取到Presto中的列中
我想知道在Presto Query中实现这一点的正确方法是什么?

如果您的数据具有如您发布的示例中所示的规则结构,您可以使用以下组合,将其强制转换为结构化SQL类型数组/映射/行,并使用来提取您想要的元素:

使用datavalue作为值'{ 结果:[ { 文件:[ { id:apple1, 资料来源:dd }, { id:apple2, 资料来源:aa }, { id:apple3, 资料来源:dd } ], 组别:99806 } ] }', 解析值为 选择castjson_parsevalue作为rowresults arrayrowdocs arrayrowid varchar、source varchar、group bigint 从数据 选择 转换-从生成的文档中提取id 筛选-筛选源为'dd'的文档 展平-将所有文档数组展平为单个文档数组 transformvalue.results,r->r.docs-从结果数组中提取文档数组 , doc->doc.source='dd', 单据->单据id 从解析 上面的查询生成:

      _col0
------------------
 [apple1, apple3]
(1 row)

如果您的数据具有如您发布的示例中所示的常规结构,则可以结合使用,将其强制转换为结构化SQL类型数组/映射/行,以及使用,并提取所需的元素:

使用datavalue作为值'{ 结果:[ { 文件:[ { id:apple1, 资料来源:dd }, { id:apple2, 资料来源:aa }, { id:apple3, 资料来源:dd } ], 组别:99806 } ] }', 解析值为 选择castjson_parsevalue作为rowresults arrayrowdocs arrayrowid varchar、source varchar、group bigint 从数据 选择 转换-从生成的文档中提取id 筛选-筛选源为'dd'的文档 展平-将所有文档数组展平为单个文档数组 transformvalue.results,r->r.docs-从结果数组中提取文档数组 , doc->doc.source='dd', 单据->单据id 从解析 上面的查询生成:

      _col0
------------------
 [apple1, apple3]
(1 row)