首页 > 解决方案 > 在 presto、hive 中查询数组结构

问题描述

col-1 有 dep_id(varchar) -

112 

col-2 具有数组结构

 [
  {
    "emp_id": 8291828,
    "name": "bruce",
  },
  {
    "emp_id": 8291823,
    "name": "Rolli",
  }
]

我有一个需要展平和显示结果的用例。例如,当查询 dep_id - 112 的数据时,我需要在单独的行中显示 emp_id。对于上面的数据,查询时我的结果应该是这样的

id  emp_id
112 8291828
112 8291823

获取数据的查询格式应该是什么?

标签: databasehadoophivepresto

解决方案


有几个部分可以完成这项工作。首先 JSON 数据将显示为VARCHAR,因此您首先需要对其运行json_parse以将其转换为JSON引擎中的类型。然后,您可以将JSON类型转换为普通的 SQL 结构类型,在您的情况下,这是一个行数组(请参阅 JSON 中的转换)。最后,您对行数组(实际上是一个嵌套表)进行交叉连接。此查询填充为您提供所需的结果

WITH your_table AS (
    SELECT
        112 AS dep_id
        , '[{"emp_id": 8291828, "name": "bruce"}, {"emp_id": 8291823, "name": "Rolli"}]' AS data
)
SELECT
    dep_id
    , r.emp_id
    , r.name
FROM your_table
CROSS JOIN
    UNNEST(cast(json_parse(data) as array(row (emp_id bigint, name varchar)))) nested_data(r)    

推荐阅读