database - 在 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
获取数据的查询格式应该是什么?
解决方案
有几个部分可以完成这项工作。首先 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)
推荐阅读
- python - 如何将值静态映射到颜色 matplotlib
- php - 我如何编程以获得 PHP 中可能结果的数量?
- python - Python,Selenium - 即使在切换后也无法在 IFRAME 中找到元素
- apache-kafka - 我们可以使用 org.apache.kafka.clients.producer.ProducerConfig 设置生产者配置“delivery.timeout.ms”吗
- php - 在 foreach 循环项目之间添加逗号,但不在末尾
- css - 修复了相对定位 div 内的定位 div 会导致移动 Safari 中出现奇怪的过度滚动行为
- python - 是否可以以“&username=login&password=password”格式发送python请求数据
- javascript - 并在 react / javascript 中使用 Or 条件语句
- javascript - 为什么我的 ID 未定义,为什么我不能修改 css 属性?
- python - 如何从在 bool 中转换的字符串返回 false