diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/SelectStringColLikeStringScalar.java ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/SelectStringColLikeStringScalar.java index cb3870e..5ebd18d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/SelectStringColLikeStringScalar.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/SelectStringColLikeStringScalar.java @@ -109,7 +109,7 @@ public void evaluate(VectorizedRowBatch batch) { outputVector[i] = (checker.check(vector[i], start[i], length[i]) ? 1 : 0); outV.isNull[i] = false; } else { - outputVector[0] = LongColumnVector.NULL_VALUE; + outputVector[i] = LongColumnVector.NULL_VALUE; outV.isNull[i] = true; } } @@ -119,7 +119,7 @@ public void evaluate(VectorizedRowBatch batch) { outputVector[i] = (checker.check(vector[i], start[i], length[i]) ? 1 : 0); outV.isNull[i] = false; } else { - outputVector[0] = LongColumnVector.NULL_VALUE; + outputVector[i] = LongColumnVector.NULL_VALUE; outV.isNull[i] = true; } } diff --git ql/src/test/queries/clientpositive/vector_like_2.q ql/src/test/queries/clientpositive/vector_like_2.q new file mode 100644 index 0000000..7196f0b --- /dev/null +++ ql/src/test/queries/clientpositive/vector_like_2.q @@ -0,0 +1,19 @@ +set hive.mapred.mode=nonstrict; +set hive.explain.user=false; +SET hive.vectorized.execution.enabled=true; +set hive.fetch.task.conversion=none; + +drop table if exists foo; +create temporary table foo (a string) stored as orc; +insert into foo values("some foo"),("some bar"),(null); + +-- Fix HIVE-17804 "Vectorization: Bug erroneously causes match for 1st row in batch (SelectStringColLikeStringScalar)" + +EXPLAIN VECTORIZATION DETAIL +select a, a like "%bar" from foo order by a; + +select a, a like "%bar" from foo order by a; + +SET hive.vectorized.execution.enabled=false; + +select a, a like "%bar" from foo order by a; \ No newline at end of file diff --git ql/src/test/results/clientpositive/vector_like_2.q.out ql/src/test/results/clientpositive/vector_like_2.q.out new file mode 100644 index 0000000..f088b53 --- /dev/null +++ ql/src/test/results/clientpositive/vector_like_2.q.out @@ -0,0 +1,122 @@ +PREHOOK: query: drop table if exists foo +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists foo +POSTHOOK: type: DROPTABLE +PREHOOK: query: create temporary table foo (a string) stored as orc +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@foo +POSTHOOK: query: create temporary table foo (a string) stored as orc +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@foo +PREHOOK: query: insert into foo values("some foo"),("some bar"),(null) +PREHOOK: type: QUERY +PREHOOK: Output: default@foo +POSTHOOK: query: insert into foo values("some foo"),("some bar"),(null) +POSTHOOK: type: QUERY +POSTHOOK: Output: default@foo +POSTHOOK: Lineage: foo.a SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +PREHOOK: query: EXPLAIN VECTORIZATION DETAIL +select a, a like "%bar" from foo order by a +PREHOOK: type: QUERY +POSTHOOK: query: EXPLAIN VECTORIZATION DETAIL +select a, a like "%bar" from foo order by a +POSTHOOK: type: QUERY +PLAN VECTORIZATION: + enabled: true + enabledConditionsMet: [hive.vectorized.execution.enabled IS true] + +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: foo + Statistics: Num rows: 1 Data size: 255 Basic stats: COMPLETE Column stats: NONE + TableScan Vectorization: + native: true + projectedOutputColumns: [0] + Select Operator + expressions: a (type: string), (a like '%bar') (type: boolean) + outputColumnNames: _col0, _col1 + Select Vectorization: + className: VectorSelectOperator + native: true + projectedOutputColumns: [0, 1] + selectExpressions: SelectStringColLikeStringScalar(col 0) -> 1:String_Family + Statistics: Num rows: 1 Data size: 255 Basic stats: COMPLETE Column stats: NONE + Reduce Output Operator + key expressions: _col0 (type: string) + sort order: + + Reduce Sink Vectorization: + className: VectorReduceSinkOperator + native: false + nativeConditionsMet: hive.vectorized.execution.reducesink.new.enabled IS true, No PTF TopN IS true, No DISTINCT columns IS true, BinarySortableSerDe for keys IS true, LazyBinarySerDe for values IS true + nativeConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false + Statistics: Num rows: 1 Data size: 255 Basic stats: COMPLETE Column stats: NONE + value expressions: _col1 (type: boolean) + Execution mode: vectorized + Map Vectorization: + enabled: true + enabledConditionsMet: hive.vectorized.use.vectorized.input.format IS true + groupByVectorOutput: true + inputFileFormats: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat + allNative: false + usesVectorUDFAdaptor: false + vectorized: true + rowBatchContext: + dataColumnCount: 1 + includeColumns: [0] + dataColumns: a:string + partitionColumnCount: 0 + scratchColumnTypeNames: bigint + Reduce Vectorization: + enabled: false + enableConditionsMet: hive.vectorized.execution.reduce.enabled IS true + enableConditionsNotMet: hive.execution.engine mr IN [tez, spark] IS false + Reduce Operator Tree: + Select Operator + expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: boolean) + outputColumnNames: _col0, _col1 + Statistics: Num rows: 1 Data size: 255 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 255 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: select a, a like "%bar" from foo order by a +PREHOOK: type: QUERY +PREHOOK: Input: default@foo +#### A masked pattern was here #### +POSTHOOK: query: select a, a like "%bar" from foo order by a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@foo +#### A masked pattern was here #### +NULL NULL +some bar true +some foo false +PREHOOK: query: select a, a like "%bar" from foo order by a +PREHOOK: type: QUERY +PREHOOK: Input: default@foo +#### A masked pattern was here #### +POSTHOOK: query: select a, a like "%bar" from foo order by a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@foo +#### A masked pattern was here #### +NULL NULL +some bar true +some foo false