diff --git data/files/parquet_types.txt data/files/parquet_types.txt index d342062..f8a7003 100644 --- data/files/parquet_types.txt +++ data/files/parquet_types.txt @@ -1,21 +1,21 @@ -100|1|1|1.0|0.0|abc|2011-01-01 01:01:01.111111111|a |a |k1:v1|101,200|10,abc -101|2|2|1.1|0.3|def|2012-02-02 02:02:02.222222222|ab |ab |k2:v2|102,200|10,def -102|3|3|1.2|0.6|ghi|2013-03-03 03:03:03.333333333|abc|abc|k3:v3|103,200|10,ghi -103|1|4|1.3|0.9|jkl|2014-04-04 04:04:04.444444444|abcd|abcd|k4:v4|104,200|10,jkl -104|2|5|1.4|1.2|mno|2015-05-05 05:05:05.555555555|abcde|abcde|k5:v5|105,200|10,mno -105|3|1|1.0|1.5|pqr|2016-06-06 06:06:06.666666666|abcdef|abcdef|k6:v6|106,200|10,pqr -106|1|2|1.1|1.8|stu|2017-07-07 07:07:07.777777777|abcdefg|abcdefg|k7:v7|107,200|10,stu -107|2|3|1.2|2.1|vwx|2018-08-08 08:08:08.888888888|bcdefg|abcdefgh|k8:v8|108,200|10,vwx -108|3|4|1.3|2.4|yza|2019-09-09 09:09:09.999999999|cdefg|abcdefghijklmnop|k9:v9|109,200|10,yza -109|1|5|1.4|2.7|bcd|2020-10-10 10:10:10.101010101|klmno|abcdedef|k10:v10|110,200|10,bcd -110|2|1|1.0|3.0|efg|2021-11-11 11:11:11.111111111|pqrst|abcdede|k11:v11|111,200|10,efg -111|3|2|1.1|3.3|hij|2022-12-12 12:12:12.121212121|nopqr|abcded|k12:v12|112,200|10,hij -112|1|3|1.2|3.6|klm|2023-01-02 13:13:13.131313131|opqrs|abcdd|k13:v13|113,200|10,klm -113|2|4|1.3|3.9|nop|2024-02-02 14:14:14.141414141|pqrst|abc|k14:v14|114,200|10,nop -114|3|5|1.4|4.2|qrs|2025-03-03 15:15:15.151515151|qrstu|b|k15:v15|115,200|10,qrs -115|1|1|1.0|4.5|qrs|2026-04-04 16:16:16.161616161|rstuv|abcded|k16:v16|116,200|10,qrs -116|2|2|1.1|4.8|wxy|2027-05-05 17:17:17.171717171|stuvw|abcded|k17:v17|117,200|10,wxy -117|3|3|1.2|5.1|zab|2028-06-06 18:18:18.181818181|tuvwx|abcded|k18:v18|118,200|10,zab -118|1|4|1.3|5.4|cde|2029-07-07 19:19:19.191919191|uvwzy|abcdede|k19:v19|119,200|10,cde -119|2|5|1.4|5.7|fgh|2030-08-08 20:20:20.202020202|vwxyz|abcdede|k20:v20|120,200|10,fgh -120|3|1|1.0|6.0|ijk|2031-09-09 21:21:21.212121212|wxyza|abcde|k21:v21|121,200|10,ijk +100|1|1|1.0|0.0|abc|2011-01-01 01:01:01.111111111|a |a |0b0000011111100000|k1:v1|101,200|10,abc +101|2|2|1.1|0.3|def|2012-02-02 02:02:02.222222222|ab |ab |0b0000011111100000|k2:v2|102,200|10,def +102|3|3|1.2|0.6|ghi|2013-03-03 03:03:03.333333333|abc|abc|0b0001000000001000|k3:v3|103,200|10,ghi +103|1|4|1.3|0.9|jkl|2014-04-04 04:04:04.444444444|abcd|abcd|0b0000100000010000|k4:v4|104,200|10,jkl +104|2|5|1.4|1.2|mno|2015-05-05 05:05:05.555555555|abcde|abcde|0b0001000000001000|k5:v5|105,200|10,mno +105|3|1|1.0|1.5|pqr|2016-06-06 06:06:06.666666666|abcdef|abcdef|0b0000100000010000|k6:v6|106,200|10,pqr +106|1|2|1.1|1.8|stu|2017-07-07 07:07:07.777777777|abcdefg|abcdefg|0b0001000000001000|k7:v7|107,200|10,stu +107|2|3|1.2|2.1|vwx|2018-08-08 08:08:08.888888888|bcdefg|abcdefgh|0b0000100000010000|k8:v8|108,200|10,vwx +108|3|4|1.3|2.4|yza|2019-09-09 09:09:09.999999999|cdefg|abcdefghijklmnop|0b0001000000001000|k9:v9|109,200|10,yza +109|1|5|1.4|2.7|bcd|2020-10-10 10:10:10.101010101|klmno|abcdedef|0b0000100000010000|k10:v10|110,200|10,bcd +110|2|1|1.0|3.0|efg|2021-11-11 11:11:11.111111111|pqrst|abcdede|0b0001000000001000|k11:v11|111,200|10,efg +111|3|2|1.1|3.3|hij|2022-12-12 12:12:12.121212121|nopqr|abcded|0b0000100000010000|k12:v12|112,200|10,hij +112|1|3|1.2|3.6|klm|2023-01-02 13:13:13.131313131|opqrs|abcdd|0b0001000000001000|k13:v13|113,200|10,klm +113|2|4|1.3|3.9|nop|2024-02-02 14:14:14.141414141|pqrst|abc|0b0000100000010000|k14:v14|114,200|10,nop +114|3|5|1.4|4.2|qrs|2025-03-03 15:15:15.151515151|qrstu|b|0b0001000000001000|k15:v15|115,200|10,qrs +115|1|1|1.0|4.5|qrs|2026-04-04 16:16:16.161616161|rstuv|abcded|0b0000100000010000|k16:v16|116,200|10,qrs +116|2|2|1.1|4.8|wxy|2027-05-05 17:17:17.171717171|stuvw|abcded|0b0001000000001000|k17:v17|117,200|10,wxy +117|3|3|1.2|5.1|zab|2028-06-06 18:18:18.181818181|tuvwx|abcded|0b0000100000010000|k18:v18|118,200|10,zab +118|1|4|1.3|5.4|cde|2029-07-07 19:19:19.191919191|uvwzy|abcdede|0b0001000000001000|k19:v19|119,200|10,cde +119|2|5|1.4|5.7|fgh|2030-08-08 20:20:20.202020202|vwxyz|abcdede|0b0000100000010000|k20:v20|120,200|10,fgh +120|3|1|1.0|6.0|ijk|2031-09-09 21:21:21.212121212|wxyza|abcde|0b0000100000010000|k21:v21|121,200|10,ijk \ No newline at end of file diff --git ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java index 472de8f..e5bd70c 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java @@ -75,8 +75,7 @@ private static Type convertType(final String name, final TypeInfo typeInfo, fina } else if (typeInfo.equals(TypeInfoFactory.booleanTypeInfo)) { return new PrimitiveType(repetition, PrimitiveTypeName.BOOLEAN, name); } else if (typeInfo.equals(TypeInfoFactory.binaryTypeInfo)) { - // TODO : binaryTypeInfo is a byte array. Need to map it - throw new UnsupportedOperationException("Binary type not implemented"); + return new PrimitiveType(repetition, PrimitiveTypeName.BINARY, name); } else if (typeInfo.equals(TypeInfoFactory.timestampTypeInfo)) { return new PrimitiveType(repetition, PrimitiveTypeName.INT96, name); } else if (typeInfo.equals(TypeInfoFactory.voidTypeInfo)) { diff --git ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java index d5aae3b..bb066af 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java @@ -102,7 +102,9 @@ private ObjectInspector getObjectInspector(final TypeInfo typeInfo) { return ParquetPrimitiveInspectorFactory.parquetShortInspector; } else if (typeInfo.equals(TypeInfoFactory.timestampTypeInfo)) { return PrimitiveObjectInspectorFactory.writableTimestampObjectInspector; - } else if (typeInfo.equals(TypeInfoFactory.dateTypeInfo)) { + } else if (typeInfo.equals(TypeInfoFactory.binaryTypeInfo)){ + return PrimitiveObjectInspectorFactory.writableBinaryObjectInspector; + }else if (typeInfo.equals(TypeInfoFactory.dateTypeInfo)) { throw new UnsupportedOperationException("Parquet does not support date. See HIVE-6384"); } else if (typeInfo.getTypeName().toLowerCase().startsWith(serdeConstants.CHAR_TYPE_NAME)) { return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector((CharTypeInfo) typeInfo); diff --git ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java index c57dd99..0166a12 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java @@ -37,8 +37,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; -import org.apache.hadoop.hive.serde2.objectinspector.StructField; -import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.primitive.BinaryObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.BooleanObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.ByteObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector; @@ -49,8 +48,11 @@ import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.ShortObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; -import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.objectinspector.primitive.TimestampObjectInspector; +import org.apache.hadoop.hive.serde2.objectinspector.StructField; +import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; + +import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.StructTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory; @@ -131,6 +133,7 @@ public final void initialize(final Configuration conf, final Properties tbl) thr } else { columnTypes = TypeInfoUtils.getTypeInfosFromTypeString(columnTypeProperty); } + if (columnNames.size() != columnTypes.size()) { throw new IllegalArgumentException("ParquetHiveSerde initialization failed. Number of column " + "name and column type differs. columnNames = " + columnNames + ", columnTypes = " + @@ -301,7 +304,10 @@ private Writable createPrimitive(final Object obj, final PrimitiveObjectInspecto return new BytesWritable(Binary.fromString(strippedValue).getBytes()); case VARCHAR: String value = ((HiveVarcharObjectInspector) inspector).getPrimitiveJavaObject(obj).getValue(); - return new BytesWritable(Binary.fromString(value).getBytes()); + return new BytesWritable(Binary.fromString(value).getBytes()); + case BINARY: + byte[] binaryBytes = ((BinaryObjectInspector) inspector).getPrimitiveJavaObject(obj); + return new BytesWritable(Binary.fromByteArray(binaryBytes).getBytes()); default: throw new SerDeException("Unknown primitive : " + inspector.getPrimitiveCategory()); } diff --git ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetSerDe.java ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetSerDe.java index 8ac7864..7758aee 100644 --- ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetSerDe.java +++ ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetSerDe.java @@ -47,15 +47,16 @@ public void testParquetHiveSerDe() throws Throwable { SerDeUtils.initializeSerDe(serDe, conf, tbl, null); // Data - final Writable[] arr = new Writable[8]; + final Writable[] arr = new Writable[9]; + //primitive types arr[0] = new ByteWritable((byte) 123); arr[1] = new ShortWritable((short) 456); arr[2] = new IntWritable(789); arr[3] = new LongWritable(1000l); arr[4] = new DoubleWritable((double) 5.3); arr[5] = new BytesWritable("hive and hadoop and parquet. Big family.".getBytes("UTF-8")); - + arr[6] = new BytesWritable("parquetSerde binary".getBytes("UTF-8")); final Writable[] mapContainer = new Writable[1]; final Writable[] map = new Writable[3]; for (int i = 0; i < 3; ++i) { @@ -65,7 +66,7 @@ public void testParquetHiveSerDe() throws Throwable { map[i] = new ArrayWritable(Writable.class, pair); } mapContainer[0] = new ArrayWritable(Writable.class, map); - arr[6] = new ArrayWritable(Writable.class, mapContainer); + arr[7] = new ArrayWritable(Writable.class, mapContainer); final Writable[] arrayContainer = new Writable[1]; final Writable[] array = new Writable[5]; @@ -73,7 +74,7 @@ public void testParquetHiveSerDe() throws Throwable { array[i] = new BytesWritable(("elem_" + i).getBytes("UTF-8")); } arrayContainer[0] = new ArrayWritable(Writable.class, array); - arr[7] = new ArrayWritable(Writable.class, arrayContainer); + arr[8] = new ArrayWritable(Writable.class, arrayContainer); final ArrayWritable arrWritable = new ArrayWritable(Writable.class, arr); // Test @@ -107,8 +108,9 @@ private Properties createProperties() { final Properties tbl = new Properties(); // Set the configuration parameters - tbl.setProperty("columns", "abyte,ashort,aint,along,adouble,astring,amap,alist"); - tbl.setProperty("columns.types", "tinyint:smallint:int:bigint:double:string:map:array"); + tbl.setProperty("columns", "abyte,ashort,aint,along,adouble,astring,abinary,amap,alist"); + tbl.setProperty("columns.types", + "tinyint:smallint:int:bigint:double:string:binary:map:array"); tbl.setProperty(org.apache.hadoop.hive.serde.serdeConstants.SERIALIZATION_NULL_FORMAT, "NULL"); return tbl; } diff --git ql/src/test/queries/clientpositive/parquet_types.q ql/src/test/queries/clientpositive/parquet_types.q index 22585c3..38ffc7d 100644 --- ql/src/test/queries/clientpositive/parquet_types.q +++ ql/src/test/queries/clientpositive/parquet_types.q @@ -11,6 +11,7 @@ CREATE TABLE parquet_types_staging ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -29,6 +30,7 @@ CREATE TABLE parquet_types ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -36,11 +38,13 @@ CREATE TABLE parquet_types ( LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVERWRITE INTO TABLE parquet_types_staging; +SELECT * FROM parquet_types_staging; + INSERT OVERWRITE TABLE parquet_types SELECT * FROM parquet_types_staging; SELECT * FROM parquet_types; -SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar) FROM parquet_types; +SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cbinary FROM parquet_types; SELECT ctinyint, MAX(cint), diff --git ql/src/test/results/clientpositive/parquet_types.q.out ql/src/test/results/clientpositive/parquet_types.q.out index 275897c..41ba2c6 100644 --- ql/src/test/results/clientpositive/parquet_types.q.out +++ ql/src/test/results/clientpositive/parquet_types.q.out @@ -16,6 +16,7 @@ PREHOOK: query: CREATE TABLE parquet_types_staging ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -36,6 +37,7 @@ POSTHOOK: query: CREATE TABLE parquet_types_staging ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -56,6 +58,7 @@ PREHOOK: query: CREATE TABLE parquet_types ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -73,6 +76,7 @@ POSTHOOK: query: CREATE TABLE parquet_types ( t timestamp, cchar char(5), cvarchar varchar(10), + cbinary binary, m1 map, l1 array, st1 struct @@ -88,6 +92,35 @@ POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVE POSTHOOK: type: LOAD #### A masked pattern was here #### POSTHOOK: Output: default@parquet_types_staging +PREHOOK: query: SELECT * FROM parquet_types_staging +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_types_staging +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM parquet_types_staging +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_types_staging +#### A masked pattern was here #### +100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a ѽ4�M5�]u�M4� {"k1":"v1"} [101,200] {"c1":10,"c2":"a"} +101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab ѽ4�M5�]u�M4� {"k2":"v2"} [102,200] {"c1":10,"c2":"d"} +102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc ѽ4�]4�M4�Mt� {"k3":"v3"} [103,200] {"c1":10,"c2":"g"} +103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd ѽ4�Mt�M4�]4� {"k4":"v4"} [104,200] {"c1":10,"c2":"j"} +104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde ѽ4�]4�M4�Mt� {"k5":"v5"} [105,200] {"c1":10,"c2":"m"} +105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef ѽ4�Mt�M4�]4� {"k6":"v6"} [106,200] {"c1":10,"c2":"p"} +106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg ѽ4�]4�M4�Mt� {"k7":"v7"} [107,200] {"c1":10,"c2":"s"} +107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh ѽ4�Mt�M4�]4� {"k8":"v8"} [108,200] {"c1":10,"c2":"v"} +108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg abcdefghij ѽ4�]4�M4�Mt� {"k9":"v9"} [109,200] {"c1":10,"c2":"y"} +109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef ѽ4�Mt�M4�]4� {"k10":"v10"} [110,200] {"c1":10,"c2":"b"} +110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede ѽ4�]4�M4�Mt� {"k11":"v11"} [111,200] {"c1":10,"c2":"e"} +111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded ѽ4�Mt�M4�]4� {"k12":"v12"} [112,200] {"c1":10,"c2":"h"} +112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd ѽ4�]4�M4�Mt� {"k13":"v13"} [113,200] {"c1":10,"c2":"k"} +113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc ѽ4�Mt�M4�]4� {"k14":"v14"} [114,200] {"c1":10,"c2":"n"} +114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b ѽ4�]4�M4�Mt� {"k15":"v15"} [115,200] {"c1":10,"c2":"q"} +115 1 1 1.0 4.5 qrs 2026-04-04 16:16:16.161616161 rstuv abcded ѽ4�Mt�M4�]4� {"k16":"v16"} [116,200] {"c1":10,"c2":"q"} +116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded ѽ4�]4�M4�Mt� {"k17":"v17"} [117,200] {"c1":10,"c2":"w"} +117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded ѽ4�Mt�M4�]4� {"k18":"v18"} [118,200] {"c1":10,"c2":"z"} +118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede ѽ4�]4�M4�Mt� {"k19":"v19"} [119,200] {"c1":10,"c2":"c"} +119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede ѽ4�Mt�M4�]4� {"k20":"v20"} [120,200] {"c1":10,"c2":"f"} +120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde ѽ4�Mt�M4�]4� {"k21":"v21"} [121,200] {"c1":10,"c2":"i"} PREHOOK: query: INSERT OVERWRITE TABLE parquet_types SELECT * FROM parquet_types_staging PREHOOK: type: QUERY PREHOOK: Input: default@parquet_types_staging @@ -96,6 +129,7 @@ POSTHOOK: query: INSERT OVERWRITE TABLE parquet_types SELECT * FROM parquet_type POSTHOOK: type: QUERY POSTHOOK: Input: default@parquet_types_staging POSTHOOK: Output: default@parquet_types +POSTHOOK: Lineage: parquet_types.cbinary SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cbinary, type:binary, comment:null), ] POSTHOOK: Lineage: parquet_types.cchar SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cchar, type:char(5), comment:null), ] POSTHOOK: Lineage: parquet_types.cdouble SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cdouble, type:double, comment:null), ] POSTHOOK: Lineage: parquet_types.cfloat SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cfloat, type:float, comment:null), ] @@ -116,56 +150,56 @@ POSTHOOK: query: SELECT * FROM parquet_types POSTHOOK: type: QUERY POSTHOOK: Input: default@parquet_types #### A masked pattern was here #### -100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a {"k1":"v1"} [101,200] {"c1":10,"c2":"a"} -101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab {"k2":"v2"} [102,200] {"c1":10,"c2":"d"} -102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc {"k3":"v3"} [103,200] {"c1":10,"c2":"g"} -103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd {"k4":"v4"} [104,200] {"c1":10,"c2":"j"} -104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde {"k5":"v5"} [105,200] {"c1":10,"c2":"m"} -105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef {"k6":"v6"} [106,200] {"c1":10,"c2":"p"} -106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg {"k7":"v7"} [107,200] {"c1":10,"c2":"s"} -107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh {"k8":"v8"} [108,200] {"c1":10,"c2":"v"} -108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg abcdefghij {"k9":"v9"} [109,200] {"c1":10,"c2":"y"} -109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef {"k10":"v10"} [110,200] {"c1":10,"c2":"b"} -110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede {"k11":"v11"} [111,200] {"c1":10,"c2":"e"} -111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded {"k12":"v12"} [112,200] {"c1":10,"c2":"h"} -112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd {"k13":"v13"} [113,200] {"c1":10,"c2":"k"} -113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc {"k14":"v14"} [114,200] {"c1":10,"c2":"n"} -114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b {"k15":"v15"} [115,200] {"c1":10,"c2":"q"} -115 1 1 1.0 4.5 qrs 2026-04-04 16:16:16.161616161 rstuv abcded {"k16":"v16"} [116,200] {"c1":10,"c2":"q"} -116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded {"k17":"v17"} [117,200] {"c1":10,"c2":"w"} -117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded {"k18":"v18"} [118,200] {"c1":10,"c2":"z"} -118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede {"k19":"v19"} [119,200] {"c1":10,"c2":"c"} -119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede {"k20":"v20"} [120,200] {"c1":10,"c2":"f"} -120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde {"k21":"v21"} [121,200] {"c1":10,"c2":"i"} -PREHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar) FROM parquet_types +100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a ѽ4�M5�]u�M4� {"k1":"v1"} [101,200] {"c1":10,"c2":"a"} +101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab ѽ4�M5�]u�M4� {"k2":"v2"} [102,200] {"c1":10,"c2":"d"} +102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc ѽ4�]4�M4�Mt� {"k3":"v3"} [103,200] {"c1":10,"c2":"g"} +103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd ѽ4�Mt�M4�]4� {"k4":"v4"} [104,200] {"c1":10,"c2":"j"} +104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde ѽ4�]4�M4�Mt� {"k5":"v5"} [105,200] {"c1":10,"c2":"m"} +105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef ѽ4�Mt�M4�]4� {"k6":"v6"} [106,200] {"c1":10,"c2":"p"} +106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg ѽ4�]4�M4�Mt� {"k7":"v7"} [107,200] {"c1":10,"c2":"s"} +107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh ѽ4�Mt�M4�]4� {"k8":"v8"} [108,200] {"c1":10,"c2":"v"} +108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg abcdefghij ѽ4�]4�M4�Mt� {"k9":"v9"} [109,200] {"c1":10,"c2":"y"} +109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef ѽ4�Mt�M4�]4� {"k10":"v10"} [110,200] {"c1":10,"c2":"b"} +110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede ѽ4�]4�M4�Mt� {"k11":"v11"} [111,200] {"c1":10,"c2":"e"} +111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded ѽ4�Mt�M4�]4� {"k12":"v12"} [112,200] {"c1":10,"c2":"h"} +112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd ѽ4�]4�M4�Mt� {"k13":"v13"} [113,200] {"c1":10,"c2":"k"} +113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc ѽ4�Mt�M4�]4� {"k14":"v14"} [114,200] {"c1":10,"c2":"n"} +114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b ѽ4�]4�M4�Mt� {"k15":"v15"} [115,200] {"c1":10,"c2":"q"} +115 1 1 1.0 4.5 qrs 2026-04-04 16:16:16.161616161 rstuv abcded ѽ4�Mt�M4�]4� {"k16":"v16"} [116,200] {"c1":10,"c2":"q"} +116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded ѽ4�]4�M4�Mt� {"k17":"v17"} [117,200] {"c1":10,"c2":"w"} +117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded ѽ4�Mt�M4�]4� {"k18":"v18"} [118,200] {"c1":10,"c2":"z"} +118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede ѽ4�]4�M4�Mt� {"k19":"v19"} [119,200] {"c1":10,"c2":"c"} +119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede ѽ4�Mt�M4�]4� {"k20":"v20"} [120,200] {"c1":10,"c2":"f"} +120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde ѽ4�Mt�M4�]4� {"k21":"v21"} [121,200] {"c1":10,"c2":"i"} +PREHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cbinary FROM parquet_types PREHOOK: type: QUERY PREHOOK: Input: default@parquet_types #### A masked pattern was here #### -POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar) FROM parquet_types +POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cbinary FROM parquet_types POSTHOOK: type: QUERY POSTHOOK: Input: default@parquet_types #### A masked pattern was here #### -a 1 a 3 -ab 2 ab 3 -abc 3 abc 3 -abcd 4 abcd 4 -abcde 5 abcde 5 -abcde 5 abcdef 6 -abcde 5 abcdefg 7 -bcdef 5 abcdefgh 8 -cdefg 5 abcdefghij 10 -klmno 5 abcdedef 8 -pqrst 5 abcdede 7 -nopqr 5 abcded 6 -opqrs 5 abcdd 5 -pqrst 5 abc 3 -qrstu 5 b 1 -rstuv 5 abcded 6 -stuvw 5 abcded 6 -tuvwx 5 abcded 6 -uvwzy 5 abcdede 7 -vwxyz 5 abcdede 7 -wxyza 5 abcde 5 +a 1 a 3 ѽ4�M5�]u�M4� +ab 2 ab 3 ѽ4�M5�]u�M4� +abc 3 abc 3 ѽ4�]4�M4�Mt� +abcd 4 abcd 4 ѽ4�Mt�M4�]4� +abcde 5 abcde 5 ѽ4�]4�M4�Mt� +abcde 5 abcdef 6 ѽ4�Mt�M4�]4� +abcde 5 abcdefg 7 ѽ4�]4�M4�Mt� +bcdef 5 abcdefgh 8 ѽ4�Mt�M4�]4� +cdefg 5 abcdefghij 10 ѽ4�]4�M4�Mt� +klmno 5 abcdedef 8 ѽ4�Mt�M4�]4� +pqrst 5 abcdede 7 ѽ4�]4�M4�Mt� +nopqr 5 abcded 6 ѽ4�Mt�M4�]4� +opqrs 5 abcdd 5 ѽ4�]4�M4�Mt� +pqrst 5 abc 3 ѽ4�Mt�M4�]4� +qrstu 5 b 1 ѽ4�]4�M4�Mt� +rstuv 5 abcded 6 ѽ4�Mt�M4�]4� +stuvw 5 abcded 6 ѽ4�]4�M4�Mt� +tuvwx 5 abcded 6 ѽ4�Mt�M4�]4� +uvwzy 5 abcdede 7 ѽ4�]4�M4�Mt� +vwxyz 5 abcdede 7 ѽ4�Mt�M4�]4� +wxyza 5 abcde 5 ѽ4�Mt�M4�]4� PREHOOK: query: SELECT ctinyint, MAX(cint), MIN(csmallint),