This is an automated email from the ASF dual-hosted git repository. zabetak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 70562437d36 HIVE-26320: Incorrect results for IN UDF on Parquet column of CHAR/VARCHAR type (John Sherman reviewed by Aman Sinha, Krisztian Kasa, Stamatis Zampetakis, Alessandro Solimando, Dayakar) 70562437d36 is described below commit 70562437d369c2f4ab3e879bae519f81d386da3b Author: John Sherman <j...@cloudera.com> AuthorDate: Tue Sep 27 09:42:51 2022 -0700 HIVE-26320: Incorrect results for IN UDF on Parquet column of CHAR/VARCHAR type (John Sherman reviewed by Aman Sinha, Krisztian Kasa, Stamatis Zampetakis, Alessandro Solimando, Dayakar) Closes #3628 --- .../hive/ql/io/parquet/convert/ETypeConverter.java | 32 +++- .../ql/io/parquet/convert/TestETypeConverter.java | 65 +++++-- ql/src/test/queries/clientpositive/pointlookup.q | 33 ++++ ql/src/test/queries/clientpositive/udf_in.q | 6 + .../results/clientpositive/llap/pointlookup.q.out | 193 +++++++++++++++++++++ .../test/results/clientpositive/llap/udf_in.q.out | 37 ++++ .../hadoop/hive/serde2/io/HiveCharWritable.java | 9 + .../hadoop/hive/serde2/io/HiveVarcharWritable.java | 9 + 8 files changed, 372 insertions(+), 12 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java index 40069cf8b0c..28207714e3c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java @@ -36,12 +36,17 @@ import org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport; import org.apache.hadoop.hive.serde.serdeConstants; import org.apache.hadoop.hive.serde2.io.DateWritableV2; import org.apache.hadoop.hive.serde2.io.DoubleWritable; +import org.apache.hadoop.hive.serde2.io.HiveCharWritable; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; +import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable; import org.apache.hadoop.hive.serde2.io.TimestampWritableV2; +import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.HiveDecimalUtils; +import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; +import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeInfo; import org.apache.hadoop.io.BooleanWritable; import org.apache.hadoop.io.BytesWritable; import org.apache.hadoop.io.FloatWritable; @@ -481,7 +486,32 @@ public enum ETypeConverter { }, ESTRING_CONVERTER(String.class) { @Override - PrimitiveConverter getConverter(final PrimitiveType type, final int index, final ConverterParent parent, TypeInfo hiveTypeInfo) { + PrimitiveConverter getConverter(final PrimitiveType type, final int index, final ConverterParent parent, + TypeInfo hiveTypeInfo) { + // If we have type information, we should return properly typed strings. However, there are a variety + // of code paths that do not provide the typeInfo in those cases we default to Text. This idiom is also + // followed by for example the BigDecimal converter in which if there is no type information, + // it defaults to the widest representation + if (hiveTypeInfo instanceof PrimitiveTypeInfo) { + PrimitiveTypeInfo t = (PrimitiveTypeInfo) hiveTypeInfo; + switch (t.getPrimitiveCategory()) { + case CHAR: + return new BinaryConverter<HiveCharWritable>(type, parent, index) { + @Override + protected HiveCharWritable convert(Binary binary) { + return new HiveCharWritable(binary.getBytes(), ((CharTypeInfo) hiveTypeInfo).getLength()); + } + }; + case VARCHAR: + return new BinaryConverter<HiveVarcharWritable>(type, parent, index) { + @Override + protected HiveVarcharWritable convert(Binary binary) { + return new HiveVarcharWritable(binary.getBytes(), ((VarcharTypeInfo) hiveTypeInfo).getLength()); + } + }; + } + } + // STRING type return new BinaryConverter<Text>(type, parent, index) { @Override protected Text convert(Binary binary) { diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java index 8161430a501..fcfb5c7782c 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.io.parquet.convert; +import static org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory.stringTypeInfo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -30,8 +31,11 @@ import org.apache.hadoop.hive.common.type.Timestamp; import org.apache.hadoop.hive.ql.io.parquet.convert.ETypeConverter.BinaryConverter; import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTime; import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTimeUtils; +import org.apache.hadoop.hive.serde2.io.HiveCharWritable; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; +import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable; import org.apache.hadoop.hive.serde2.io.TimestampWritableV2; +import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; @@ -212,23 +216,62 @@ public class TestETypeConverter { } @Test - public void testGetTextConverter() throws Exception { + public void testGetTextConverterForString() throws Exception { PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) - .as(LogicalTypeAnnotation.stringType()).named("value"); - Writable writable = getWritableFromBinaryConverter(new VarcharTypeInfo(), primitiveType, - Binary.fromString("this_is_a_value")); - Text textWritable = (Text) writable; - assertEquals("this_is_a_value", textWritable.toString()); + .as(LogicalTypeAnnotation.stringType()).named("value"); + String value = "this_is_a_value"; + Text textWritable = (Text) getWritableFromBinaryConverter(stringTypeInfo, primitiveType, + Binary.fromString(value)); + assertEquals(value, textWritable.toString()); + } + + @Test + public void testGetTextConverterForCharPadsValueWithSpacesTillLen() { + PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) + .as(LogicalTypeAnnotation.stringType()).named("value"); + String value = "this_is_a_value"; + HiveCharWritable textWritable = (HiveCharWritable) getWritableFromBinaryConverter( + new CharTypeInfo(value.length() + 2), primitiveType, Binary.fromString(value)); + assertEquals(value + " ", textWritable.toString()); + } + + @Test + public void testGetTextConverterForCharTruncatesValueExceedingLen() { + PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) + .as(LogicalTypeAnnotation.stringType()).named("value"); + String value = "this_is_a_value"; + HiveCharWritable textWritable = (HiveCharWritable) getWritableFromBinaryConverter( + new CharTypeInfo(6), primitiveType, Binary.fromString(value)); + assertEquals(value.substring(0, 6), textWritable.toString()); } @Test - public void testGetTextConverterNoHiveTypeInfo() throws Exception { + public void testGetTextConverterForVarcharTruncatesValueExceedingLen() { + PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) + .as(LogicalTypeAnnotation.stringType()).named("value"); + String value = "this_is_a_value"; + HiveVarcharWritable textWritable = (HiveVarcharWritable) getWritableFromBinaryConverter( + new VarcharTypeInfo(6), primitiveType, Binary.fromString(value)); + assertEquals(value.substring(0, 6), textWritable.toString()); + } + + @Test + public void testGetTextConverterForVarchar() { + PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) + .as(LogicalTypeAnnotation.stringType()).named("value"); + String value = "this_is_a_value"; + HiveVarcharWritable textWritable = (HiveVarcharWritable) getWritableFromBinaryConverter( + new VarcharTypeInfo(34), primitiveType, Binary.fromString(value)); + assertEquals(value, textWritable.toString()); + } + + @Test + public void testGetTextConverterNoHiveTypeInfo() { PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY) .as(LogicalTypeAnnotation.stringType()).named("value"); - Writable writable = - getWritableFromBinaryConverter(null, primitiveType, Binary.fromString("this_is_a_value")); - Text textWritable = (Text) writable; - assertEquals("this_is_a_value", textWritable.toString()); + String value = "this_is_a_value"; + Text textWritable = (Text) getWritableFromBinaryConverter(null, primitiveType, Binary.fromString(value)); + assertEquals(value, textWritable.toString()); } @Test diff --git a/ql/src/test/queries/clientpositive/pointlookup.q b/ql/src/test/queries/clientpositive/pointlookup.q index a808a51cbfc..0853db0b69e 100644 --- a/ql/src/test/queries/clientpositive/pointlookup.q +++ b/ql/src/test/queries/clientpositive/pointlookup.q @@ -127,3 +127,36 @@ or inOutputOpt.key = null; drop table orOutput; drop table inOutput; drop table inOutputOpt; + +-- test case(s) for HIVE-26320 for ORC +SET hive.optimize.point.lookup=true; +SET hive.optimize.point.lookup.min=2; +CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2), enhanced_type_code int) STORED AS ORC; +INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18); +SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_orc; +DROP TABLE hive26230_orc; + +CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2), enhanced_type_code int) STORED AS ORC; +INSERT INTO hive26230_char_orc VALUES('B',18),('BC',18),('AB',18); +SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_orc; +DROP TABLE hive26230_char_orc; + +-- test case(s) for HIVE-26320 for PARQUET +CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2), enhanced_type_code int) STORED AS PARQUET; +INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18); +SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_parq; +DROP TABLE hive26230_parq; + +CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2), enhanced_type_code int) STORED AS PARQUET; +INSERT INTO hive26230_char_parq VALUES('B',18),('BC',18),('AB',18); +SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_parq; +DROP TABLE hive26230_char_parq; + +CREATE EXTERNAL TABLE hive26230_int_parq(kob int, enhanced_type_code int) STORED AS PARQUET; +INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18); +SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR (kob=23 AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM hive26230_int_parq; +DROP TABLE hive26230_int_parq; diff --git a/ql/src/test/queries/clientpositive/udf_in.q b/ql/src/test/queries/clientpositive/udf_in.q index 99fafd44bfa..7a6e98f2ca5 100644 --- a/ql/src/test/queries/clientpositive/udf_in.q +++ b/ql/src/test/queries/clientpositive/udf_in.q @@ -14,3 +14,9 @@ SELECT 1 IN (1, 2, 3), (1+3) IN (5, 6, (1+2) + 1) FROM src tablesample (1 rows); SELECT key FROM src WHERE key IN ("238", 86); + +-- test case(s) for HIVE-26320 +CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code int) STORED AS PARQUET; +INSERT INTO hive26230_parq_in VALUES('BB',18),('BC',18),('AB',18); +SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18), (cast('BC' as varchar(2)), 18)) FROM hive26230_parq_in; +DROP TABLE hive26230_parq_in; diff --git a/ql/src/test/results/clientpositive/llap/pointlookup.q.out b/ql/src/test/results/clientpositive/llap/pointlookup.q.out index d4aef2f7a81..25de4bb82ba 100644 --- a/ql/src/test/results/clientpositive/llap/pointlookup.q.out +++ b/ql/src/test/results/clientpositive/llap/pointlookup.q.out @@ -362,3 +362,196 @@ POSTHOOK: query: drop table inOutputOpt POSTHOOK: type: DROPTABLE POSTHOOK: Input: default@inoutputopt POSTHOOK: Output: default@inoutputopt +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2), enhanced_type_code int) STORED AS ORC +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_orc +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2), enhanced_type_code int) STORED AS ORC +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_orc +PREHOOK: query: INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_orc +POSTHOOK: query: INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_orc +POSTHOOK: Lineage: hive26230_orc.enhanced_type_code SCRIPT [] +POSTHOOK: Lineage: hive26230_orc.kob SCRIPT [] +PREHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_orc +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_orc +#### A masked pattern was here #### +POSTHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_orc +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_orc +#### A masked pattern was here #### +1 +1 +0 +PREHOOK: query: DROP TABLE hive26230_orc +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_orc +PREHOOK: Output: default@hive26230_orc +POSTHOOK: query: DROP TABLE hive26230_orc +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_orc +POSTHOOK: Output: default@hive26230_orc +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2), enhanced_type_code int) STORED AS ORC +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_char_orc +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2), enhanced_type_code int) STORED AS ORC +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_char_orc +PREHOOK: query: INSERT INTO hive26230_char_orc VALUES('B',18),('BC',18),('AB',18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_char_orc +POSTHOOK: query: INSERT INTO hive26230_char_orc VALUES('B',18),('BC',18),('AB',18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_char_orc +POSTHOOK: Lineage: hive26230_char_orc.enhanced_type_code SCRIPT [] +POSTHOOK: Lineage: hive26230_char_orc.kob SCRIPT [] +PREHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_orc +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_char_orc +#### A masked pattern was here #### +POSTHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_orc +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_char_orc +#### A masked pattern was here #### +1 +1 +0 +PREHOOK: query: DROP TABLE hive26230_char_orc +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_char_orc +PREHOOK: Output: default@hive26230_char_orc +POSTHOOK: query: DROP TABLE hive26230_char_orc +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_char_orc +POSTHOOK: Output: default@hive26230_char_orc +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2), enhanced_type_code int) STORED AS PARQUET +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_parq +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2), enhanced_type_code int) STORED AS PARQUET +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_parq +PREHOOK: query: INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_parq +POSTHOOK: query: INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_parq +POSTHOOK: Lineage: hive26230_parq.enhanced_type_code SCRIPT [] +POSTHOOK: Lineage: hive26230_parq.kob SCRIPT [] +PREHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_parq +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_parq +#### A masked pattern was here #### +POSTHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_parq +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_parq +#### A masked pattern was here #### +1 +1 +0 +PREHOOK: query: DROP TABLE hive26230_parq +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_parq +PREHOOK: Output: default@hive26230_parq +POSTHOOK: query: DROP TABLE hive26230_parq +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_parq +POSTHOOK: Output: default@hive26230_parq +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2), enhanced_type_code int) STORED AS PARQUET +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_char_parq +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2), enhanced_type_code int) STORED AS PARQUET +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_char_parq +PREHOOK: query: INSERT INTO hive26230_char_parq VALUES('B',18),('BC',18),('AB',18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_char_parq +POSTHOOK: query: INSERT INTO hive26230_char_parq VALUES('B',18),('BC',18),('AB',18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_char_parq +POSTHOOK: Lineage: hive26230_char_parq.enhanced_type_code SCRIPT [] +POSTHOOK: Lineage: hive26230_char_parq.kob SCRIPT [] +PREHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_parq +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_char_parq +#### A masked pattern was here #### +POSTHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check +FROM hive26230_char_parq +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_char_parq +#### A masked pattern was here #### +1 +1 +0 +PREHOOK: query: DROP TABLE hive26230_char_parq +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_char_parq +PREHOOK: Output: default@hive26230_char_parq +POSTHOOK: query: DROP TABLE hive26230_char_parq +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_char_parq +POSTHOOK: Output: default@hive26230_char_parq +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_int_parq(kob int, enhanced_type_code int) STORED AS PARQUET +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_int_parq +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_int_parq(kob int, enhanced_type_code int) STORED AS PARQUET +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_int_parq +PREHOOK: query: INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_int_parq +POSTHOOK: query: INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_int_parq +POSTHOOK: Lineage: hive26230_int_parq.enhanced_type_code SCRIPT [] +POSTHOOK: Lineage: hive26230_int_parq.kob SCRIPT [] +PREHOOK: query: SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR (kob=23 AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM hive26230_int_parq +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_int_parq +#### A masked pattern was here #### +POSTHOOK: query: SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR (kob=23 AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM hive26230_int_parq +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_int_parq +#### A masked pattern was here #### +1 +1 +0 +PREHOOK: query: DROP TABLE hive26230_int_parq +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_int_parq +PREHOOK: Output: default@hive26230_int_parq +POSTHOOK: query: DROP TABLE hive26230_int_parq +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_int_parq +POSTHOOK: Output: default@hive26230_int_parq diff --git a/ql/src/test/results/clientpositive/llap/udf_in.q.out b/ql/src/test/results/clientpositive/llap/udf_in.q.out index 85ee95108a8..8c840eda218 100644 --- a/ql/src/test/results/clientpositive/llap/udf_in.q.out +++ b/ql/src/test/results/clientpositive/llap/udf_in.q.out @@ -38,3 +38,40 @@ POSTHOOK: Input: default@src 238 86 238 +PREHOOK: query: CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code int) STORED AS PARQUET +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@hive26230_parq_in +POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code int) STORED AS PARQUET +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@hive26230_parq_in +PREHOOK: query: INSERT INTO hive26230_parq_in VALUES('BB',18),('BC',18),('AB',18) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@hive26230_parq_in +POSTHOOK: query: INSERT INTO hive26230_parq_in VALUES('BB',18),('BC',18),('AB',18) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@hive26230_parq_in +POSTHOOK: Lineage: hive26230_parq_in.code SCRIPT [] +POSTHOOK: Lineage: hive26230_parq_in.kob SCRIPT [] +PREHOOK: query: SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18), (cast('BC' as varchar(2)), 18)) FROM hive26230_parq_in +PREHOOK: type: QUERY +PREHOOK: Input: default@hive26230_parq_in +#### A masked pattern was here #### +POSTHOOK: query: SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18), (cast('BC' as varchar(2)), 18)) FROM hive26230_parq_in +POSTHOOK: type: QUERY +POSTHOOK: Input: default@hive26230_parq_in +#### A masked pattern was here #### +true +true +false +PREHOOK: query: DROP TABLE hive26230_parq_in +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@hive26230_parq_in +PREHOOK: Output: default@hive26230_parq_in +POSTHOOK: query: DROP TABLE hive26230_parq_in +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@hive26230_parq_in +POSTHOOK: Output: default@hive26230_parq_in diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java index fcd14e5ec87..01448ebe8a5 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java @@ -42,6 +42,15 @@ public class HiveCharWritable extends HiveBaseCharWritable set(hcw); } + public HiveCharWritable(byte[] bytes, int maxLength) { + set(bytes, maxLength); + } + + public void set(byte[] bytes, int maxLength) { + value.set(bytes); + enforceMaxLength(maxLength); + } + public void set(HiveChar val) { set(val.getValue(), -1); } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java index c3812d62e11..8c247105ad8 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java @@ -35,6 +35,15 @@ public class HiveVarcharWritable extends HiveBaseCharWritable set(hcw); } + public HiveVarcharWritable(byte[] bytes, int maxLength) { + set(bytes, maxLength); + } + + public void set(byte[] bytes, int maxLength) { + value.set(bytes); + enforceMaxLength(maxLength); + } + public void set(HiveVarchar val) { set(val.getValue()); }