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

问题描述 投票:0回答:1

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

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

在另一个表B中,我有500个在特定日期发生的事件。我想在以下每个事件发生之前的一周访问A的汇总数据:EventID |事件_日期| 7_Days_Before_Event_Date |类别

我希望针对每个事件在事件发生前7天的购买总金额。

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

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

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
sql performance amazon-athena partition
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.