AND&的过滤操作顺序或者在Hive中

时间:2013-08-02 00:13:10

标签: hive apache-pig

假设我有一个看起来像这样的Hive查询:

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...);

如果我匹配的其中一些字符串比其他字符串更常见,我想知道将col 1 LIKE "%str4%"移动到此列表顶部会有什么(如果有的话)性能提升。< / p>

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

Hive是否会顺序循环执行这些操作,并在确定str3匹配时中断?我想有必要问一下同等的Pig操作是否也能以这种方式工作。

1 个答案:

答案 0 :(得分:2)

对于Pig, Programming Pig 中的以下内容应该澄清:

  

Pig会在可能的情况下使布尔运算短路。如果是第一个   (左)和a的谓词是假的,第二(右)不是   评估。所以在1 == 2和udf(x)中,永远不会调用UDF。   同样,如果a的第一个谓词是真的,那么第二个谓词   谓词不会被评估。 1 == 1或udf(x)永远不会调用   UDF。

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

相关问题