我想知道是否有一种方法可以在AWS Athena(托管的presto)上使用SEMI JOIN。 我想尝试减少扫描的数据/提高查询性能。
就我而言,我知道联接的一侧恰好有一行,并且我想是否有一种方法可以向引擎说明这一点...
答案 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
可能不是情况。