在Presto中实现Hive LATERAL VIEW EXPLODE
我是 Presto 新手,我们公司数据仓库中有一张表(表名:dwd_user_country),记录了用户到访过的国家与地区。这里为简化问题描述,将该表结构抽象为两个字段:user_id 和 countries,其中 countries 字段的值采用英文逗号连接用户到访过的国家与地区。
表数据如下表所示:
user_id | countries |
---|---|
26841018 | 中国,马来西亚,美国,瑞士,泰国,冰岛 |
现在,我需要从该表中统计每个国家或地区的到访人数,在 Hive 语法中,我可以使用 LATERAL VIEW EXPLODE 将该表的数据转成以下格式,再按 country 字段做 GROUP BY 统计。如果现在是使用 Presto 该怎么做呢?
user_id | country |
---|---|
26841018 | 中国 |
26841018 | 马来西亚 |
26841018 | 美国 |
26841018 | 瑞士 |
26841018 | 泰国 |
26841018 | 冰岛 |
Hive 查询
首先使用 split
函数将 countries 字段分割成数组,再使用 lateral view explode() 将数组炸开:
1 | -- hive |
Presto 查询
首先使用 split
函数将 countries 字段分割成数组,再使用 cross join unnest() 将数组炸开:
1 | -- presto |
t2 是由 cross join unnest() 隐式创建的表的别名。因此,可以在 SELECT 语句中将 country 写成 t2.country。
(END)
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.