我正在Athena SQL中查询以下用例:
我有一个按日期分区的表A: 日期|购买数量|类别
在另一个表B中,我有500个在特定日期发生的事件。我想在以下每个事件发生之前的一周访问A的汇总数据: EventID | 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
答案 0 :(得分:0)
Athena基于presto,因此您的查询正试图为from django.apps import <what_you_need>
子句动态生成值,并且直到计划时间才知道该值,因此您的查询最终将扫描所有分区。
社区已经在开发名为dynamic filtering的功能,它将有助于解决与性能相关的此类问题。
您也可以参考link,其中详细讨论了此问题,并提供了可能的解决方法。