SQL - 在根据另一个表中的值检查分区字段时,是否可以使用分区?



我在Athena SQL中查询以下用例:

我有一个在日期分区的表 A: 日期 |购买数量 |类别

在另一个表格 B 中,我有 500 个在特定日期发生的事件。我想访问 A 中每个事件之前一周的聚合数据: 事件标识 |Event_Date |7_Days_Before_Event_Date |类别

我想以每个事件结束,在事件发生之日前 7 天的购买总和。

但是,当为此使用 where 子句时,例如。A.Date between B.7_Days_Before_Event_Date and B.Event_Date不再使用 A 上的分区,并且查询所有数据,从而大大降低了性能。

如何在使用分区时获取每个事件前一周的数据,从而保持高性能?

SQL查询:

select b.event_id, sum(a.number_of_purchases)
from dbo.tableA a
inner join dbo.tableB b on a.category = b.category
where a.date between b.7_days_before_event_date and b.event_date
group by b.event_id

Athena 基于 presto,在 presto 中,您的查询正在尝试为between b.7_days_before_event_date and b.event_date子句动态生成值,并且该值直到计划时才知道,因此您的查询最终会扫描所有分区。

社区已经在开发一项称为动态过滤的功能,这将有助于解决此类与性能相关的问题。

您还可以参考链接,该链接详细讨论了有关此问题的更多信息以及可能的解决方法。

最新更新