SQL-当对照来自另一个表的值检查分区字段时,可以使用分区吗?

时间:2019-12-20 01:29:57

标签: sql performance amazon-athena partition

我正在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

1 个答案:

答案 0 :(得分:0)

Athena基于presto,因此您的查询正试图为from django.apps import <what_you_need> 子句动态生成值,并且直到计划时间才知道该值,因此您的查询最终将扫描所有分区。

社区已经在开发名为dynamic filtering的功能,它将有助于解决与性能相关的此类问题。

您也可以参考link,其中详细讨论了此问题,并提供了可能的解决方法。