Gopal V created HIVE-14318:
------------------------------

             Summary: Vectorization: LIKE should use matches() instead of 
find(0)
                 Key: HIVE-14318
                 URL: https://issues.apache.org/jira/browse/HIVE-14318
             Project: Hive
          Issue Type: Bug
          Components: Vectorization
    Affects Versions: 1.2.1, 1.3.0, 2.2.0
            Reporter: Gopal V
            Assignee: Gopal V


Checking for a match instead of find() would allow matcher to exit early 
instead of looking for sub-sequences beyond the first non-match.

In UDFLike.java, the complex pattern checker uses matches() and the vectorized 
version uses find(0), which is more expensive.

{code}
Benchmark                            Mode  Cnt    Score    Error  Units
RegexBench.testGreedyRegexHit        avgt    5  379.316 ± 32.444  ns/op
RegexBench.testGreedyRegexHitCheck   avgt    5  344.895 ± 15.436  ns/op
RegexBench.testGreedyRegexMiss       avgt    5  497.193 ± 18.168  ns/op
RegexBench.testGreedyRegexMissCheck  avgt    5  171.872 ±  8.588  ns/op
{code}

The miss in match is nearly ~3x more expensive per-row with the .find(0) over 
the .match() check version.

The pattern match scenario is nearly the same.

The lazy scenario makes it slower when there's a hit (because match runs the 
check till end, but ~2x faster when there's a miss).

{code}
RegexBench.testLazyRegexHit          avgt    5   78.398 ±  6.007  ns/op
RegexBench.testLazyRegexHitCheck     avgt    5  120.557 ±  4.396  ns/op
RegexBench.testLazyRegexMiss         avgt    5  387.594 ± 25.672  ns/op
RegexBench.testLazyRegexMissCheck    avgt    5  154.489 ± 13.622  ns/op
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to