分区athena表中的sql子查询

mzillmmw  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(389)

我在雅典娜使用分区。我有一个名为snapshot的分区,当我这样调用查询时:

select * from mytable where snapshot = '2020-06-25'

然后,如预期的那样,只扫描指定的分区,我的查询速度很快。但是,如果我使用返回单个日期的子查询,它是sloow:

select * from mytable where snapshot = (select '2020-06-25')

上面提到的实际上是扫描所有分区,而不是只扫描指定的日期,结果性能非常低。
我的问题是我是否可以使用子查询来指定分区并提高性能。我需要使用子查询来添加一些自定义逻辑,它根据一些条件返回日期。

2ic8powd

2ic8powd1#

presto仍然不内联像 (select '2020-06-25') . 这是由https://github.com/prestosql/presto/issues/4231. 因此,你不应该期望雅典娜内联,因为它基于presto.172。
我需要使用子查询来添加一些自定义逻辑,它根据一些条件返回日期。
如果您的查询将更加复杂,而不是一个常量表达式,那么它将不会被内联。如果 snapshot 是分区键,则可以利用最近添加的特性—动态分区修剪。阅读更多信息https://prestosql.io/blog/2020/06/14/dynamic-partition-pruning.html. 当然,这假设您可以选择presto版本。
如果您是对athena的约束,那么您唯一的选择就是在主查询之外(单独)计算子查询,并将其作为常量(例如literal)传递回主查询。

相关问题