AWS Athena上的SEMI JOIN

时间:2019-07-07 06:15:25

标签: sql amazon-web-services presto amazon-athena

我想知道是否有一种方法可以在AWS Athena(托管的presto)上使用SEMI JOIN。 我想尝试减少扫描的数据/提高查询性能。

就我而言,我知道联接的一侧恰好有一行,并且我想是否有一种方法可以向引擎说明这一点...

1 个答案:

答案 0 :(得分:0)

如果您发布了一个示例,说明您想要实现的目标以及如何对其进行过多扫描,将很有帮助。您的问题很广泛,很难回答。

如果我对您的理解正确,我认为您可以通过执行以下操作来达到您所指的目的:

SELECT *
FROM table1
WHERE something IN (SELECT something FROM table2 WHERE col1 = 'the thing' LIMIT 1)

但是它是否会减少扫描的数据量取决于您的具体情况。上面查询背后的想法是,确保Athena仅扫描table2直到找到您要加入的特定行。如果您不走运,它仍将扫描整个表,因为找不到该值,或者该值在结尾。

您也可以使用… WHERE EXISTS (SELECT …,但是根据this Presto issue,它被转换为联接,并可能意味着读取了整个表–尽管使用的LIMIT可能不是情况。