Hive 配置单元QL是否对性能不利?

Hive 配置单元QL是否对性能不利?,hive,Hive,我有一个蜂巢式SQL 在(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)中选择5; 当我解释它时,它告诉我hive将扫描这个: == 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[] 这是否意味着hi

我有一个蜂巢式SQL

在(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)中选择5;
当我解释它时,它告诉我hive将扫描这个:

== 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[]  

这是否意味着hive将在此集合上执行序列扫描而不是集合查找(这会导致性能不佳)?

答案可以在的实现中找到
org.apache.hadoop.hive.ql.udf.generic.GenericUDFIn

简单地说,它取决于括号中的参数。特别是它们是否都是常量

  • 对于所有常量,将分别为每个映射器初始化一次哈希集。当计算在一行完成时,只需检查值是否在集合中

  • 如果至少有一个arg不是常量,即arg依赖于要计算的行,则针对每一行执行一个遍历所有arg的for循环。所以在这种情况下,长参数列表会降低执行速度

  • 有关详细信息,请参阅此处的代码:

    祝你今天愉快:)