【发布时间】:2020-10-16 10:15:18
【问题描述】:
我在 Athena 中使用分区。我有一个名为快照的分区,当我这样调用查询时:
select * from mytable where snapshot = '2020-06-25'
然后,正如预期的那样,只扫描指定的分区并且我的查询很快。但是,如果我使用返回单个日期的子查询,那就太慢了:
select * from mytable where snapshot = (select '2020-06-25')
上面实际上是扫描所有分区而不仅仅是指定日期,导致性能非常低。
我的问题是我可以使用子查询来指定分区并提高性能。我需要使用子查询来添加一些自定义逻辑,该逻辑根据某些条件返回日期。
【问题讨论】:
-
显然不是。如果该子查询不起作用,那么很难想象有一个会起作用。我认为这个想法是运行子查询,但结果是某种变量并使用它来生成 SQL。
-
您可以使用 Athena API(如 Python 的 boto3)从自定义逻辑中查询和获取日期,并在后续查询调用中使用。
-
请检查
where snapshot IN (select '2020-06-25')是否同样有效 - 全面扫描? -
@leftjoin 是的,IN 和 = 具有相同的效果。
-
@VamsiPrabhala 谢谢,是的,这是我目前倾向于的解决方案,除非我可以选择在 sql 中完成所有操作。
标签: sql hive presto amazon-athena trino