Hive QL IN对性能不利吗?

时间:2019-12-24 11:42:50

标签: hive

我有类似的Hive SQL

select 5 in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);

当我解释它的时候,它告诉我蜂巢会扫描这个:

== Physical Plan ==
*(1) Project [true AS (5 IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20))
+- Scan OneRowRelation[]  

这是否意味着配置单元将执行序列扫描而不是在该集合上查找集合(这会导致性能下降)?

1 个答案:

答案 0 :(得分:1)

答案可以在执行中找到  org.apache.hadoop.hive.ql.udf.generic.GenericUDFIn

简单地说,它取决于括号中的args。具体来说,它们是否都是常量。

  1. 对于所有常量,将分别为每个映射器初始化一次HashSet。而且,当一行进行评估时,只需检查该值是否在集合中即可。

  2. 并且如果arg中的至少一个不是常量,即args取决于要评估的行,则对每一行执行遍历所有args的for循环。因此,在这种情况下,较长的参数列表会减慢执行速度。

有关更多详细信息,请参见此处的代码:GenericUDFIn

祝你有美好的一天:)

相关问题