我想知道是否有一种方法可以在AWS雅典娜上使用SEMI JOIN (管理预装)。我想尝试减少扫描的数据/提高查询性能。
在我的例子中,我知道join的一侧只有一行,我想如果有一种方法可以指示引擎……
发布于 2019-07-07 20:08:51
如果你发布了一个例子,说明你想要实现什么,以及它是如何扫描太多的,这将是很有帮助的。你的问题很宽泛,很难回答。
如果我没有理解错的话,我认为你可以通过这样做来实现你所指的东西:
SELECT *
FROM table1
WHERE something IN (SELECT something FROM table2 WHERE col1 = 'the thing' LIMIT 1)但它是否会减少扫描的数据量取决于您的具体情况。上面查询背后的思想是,它确保雅典娜只扫描table2,直到它找到您想要加入的特定行。如果你不走运,它仍然会扫描整个表,因为它找不到值,或者值在最后。
您也可以使用… WHERE EXISTS (SELECT …,但根据this Presto issue的说法,它会被转换为连接,这可能意味着整个表都是用LIMIT读取的,而实际情况可能并非如此。
https://stackoverflow.com/questions/56919808
复制相似问题