Hive 使用AND&;的过滤操作顺序;还是在蜂箱里

Hive 使用AND&;的过滤操作顺序;还是在蜂箱里,hive,apache-pig,Hive,Apache Pig,假设我有一个蜂巢查询,看起来像这样: SELECT COUNT(*) FROM my_table WHERE col1 LIKE "%str1%" -- matches 1% of rows OR col1 LIKE "%str2%" -- matches 1% of rows OR col1 LIKE "%str3%" -- matches 0 rows OR col1 LIKE "%str4%" -- matche

假设我有一个蜂巢查询,看起来像这样:

SELECT COUNT(*) FROM my_table WHERE
    col1 LIKE "%str1%"         -- matches 1% of rows
    OR col1 LIKE "%str2%"      -- matches 1% of rows
    OR col1 LIKE "%str3%"      -- matches 0 rows
    OR col1 LIKE "%str4%"      -- matches 90% of rows
    (...more...);
如果我匹配的这些字符串中有一些比其他字符串更常见,我想知道如果将
列1(如“%str4%”)移到列表的顶部,我会获得什么(如果有的话)性能提升

上面的例子有点简单,但是如果这些
操作中的每一个都是长字符串上的正则表达式匹配,我可以想象执行几乎所有时间都失败的3个匹配(
str1
str2
str3
)的时间将变得相当昂贵


配置单元是否按顺序循环执行这些操作,并在确定
true
匹配时中断?我想值得一问的是,等效清管器操作是否也以这种方式工作。

对于清管器,以下内容应予以澄清:

如果可能,清管器将短路布尔运算。如果第一个 and的(左)谓词为false,则第二个(右)谓词不为false 评价的。因此,在1==2和udf(x)中,将永远不会调用udf。 类似地,如果or的第一个谓词为true,则第二个谓词 谓词将不会被求值。1==1或udf(x)永远不会调用 自由民主党

因此,如果您的每个逻辑运算符都执行一些重载操作,那么对它们进行重新排序,使它们在第一个条件下对90%的记录短路,这将为您带来一些性能提升。请注意,YMMV代表“一些性能增益”,因为它将根据逻辑操作的总数(示例仅给出4个,可能更多)、正则表达式短路的复杂性以及匹配数据的大小/特征而变化