我在Athena SQL中查询以下用例:
我有一个表A,它是在Date: Date | Number of Purchase| Category进行分区的
在另一个表B中,我有500个在特定日期发生的事件。我想要访问A在以下每个事件之前一周的聚合数据: EventID | Event_Date | 7_Days_Before_Event_Date | Category
我想为每个活动结束,在活动发生前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
发布于 2019-12-23 04:32:55
雅典娜是基于presto的,在presto中,您的查询试图动态地为between b.7_days_before_event_date and b.event_date
子句生成值,而这个值直到规划时才知道,所以您的查询最终会扫描所有分区。
社区已经在开发一个名为dynamic filtering的功能,它将帮助解决这类与性能相关的问题。
您也可以参考link,它详细讨论了这个问题以及可能的解决方法。
https://stackoverflow.com/questions/59418861
复制相似问题