left semi join 会导致全表扫描吗?

一、
Select A.col1,A.col2,A.col3
From A_table A
left semi join B_table B
on A.id=b.id
Where A.rq=“2020-01-01”
二、rq 是分区。

explain看下执行计划

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在Hive中,对于左半连接(left semi join),根据连接条件,只有左表中与右表匹配的行将被保留。因此,如果左表的分区列(例如上述查询中的rq列)被过滤,则只有符合条件的分区将被扫描,而不需要扫描整个表。

在上面的查询中,由于A_tableB_table之间的连接是左半连接,所以只有符合条件的A_table行将被保留。在where子句中,A.rq=“2020-01-01”将过滤掉A_table中分区列不等于“2020-01-01”的分区,因此只有符合条件的分区将被扫描。因此,如果A_tableB_table都有分区,则查询将只扫描符合条件的分区,而不需要扫描整个表,从而减少了查询的开销。

需要注意的是,如果A_tableB_table中的分区列没有被正确地分区,或者分区列的数据类型不正确,则可能会导致全表扫描。因此,在使用左半连接时,应该确保表正确地分区,并且分区列的数据类型正确。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^