横向视图快速爆炸
Posted
技术标签:
【中文标题】横向视图快速爆炸【英文标题】:LATERAL VIEW EXPLODE in presto 【发布时间】:2018-12-21 04:35:20 【问题描述】:presto 新手,任何指针我如何在 presto 中使用 LATERAL VIEW EXPLODE 来查看下表。
我需要在我的 presto 查询中过滤名称
CREATE EXTERNAL TABLE `id`(
`id` string,
`names` map<string,map<string,string>>,
`tags` map<string,map<string,string>>)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://test'
;
样本names
值:
3081=short=Abbazia 81427 - Milan, 2057=short=Abbazia 81427 - Milan, 1033=short=Abbazia 81427 - Milan, 4105=short=Abbazia 81427 - Milan, 5129=short=Abbazia 81427 - Milan
【问题讨论】:
【参考方案1】:来自文档:https://trino.io/docs/current/appendix/from-hive.html
Trino [原 PrestoSQL] 支持 UNNEST 扩展数组和映射。使用
UNNEST
而不是LATERAL VIEW explode()
。
Hive 查询:
SELECT student, score
FROM tests
LATERAL VIEW explode(scores) t AS score;
Presto 查询:
SELECT student, score
FROM tests
CROSS JOIN UNNEST(scores) AS t (score);
【讨论】:
效果很好!在CROSS JOIN UNNEST(scores) AS t (score);
中,t
是什么意思?
@MattFenwick t
是CROSS JOIN UNNEST(scores)
隐式创建的表的别名。因此,您可以在SELECT
语句中将score
称为t.score
。【参考方案2】:
我可以在查询下方运行以获取映射数据
select
id
,names['1033']['short'] as srt_nm
from id;
【讨论】:
以上是关于横向视图快速爆炸的主要内容,如果未能解决你的问题,请参考以下文章