一、
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_table
和B_table
之间的连接是左半连接,所以只有符合条件的A_table
行将被保留。在where
子句中,A.rq=“2020-01-01”
将过滤掉A_table
中分区列不等于“2020-01-01”的分区,因此只有符合条件的分区将被扫描。因此,如果A_table
和B_table
都有分区,则查询将只扫描符合条件的分区,而不需要扫描整个表,从而减少了查询的开销。
需要注意的是,如果A_table
或B_table
中的分区列没有被正确地分区,或者分区列的数据类型不正确,则可能会导致全表扫描。因此,在使用左半连接时,应该确保表正确地分区,并且分区列的数据类型正确。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话: