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 6091882..783c77f 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 @@ -154,7 +154,12 @@ public Object getStructFieldData(final Object data, final StructField fieldRef) @Override public StructField getStructFieldRef(final String name) { - return fieldsByName.get(name); + for(final StructField field: fields) { + if (field.getFieldName().equalsIgnoreCase(name)) { + return field; + } + } + return null; } @Override diff --git ql/src/test/queries/clientpositive/parquet_mixed_case.q ql/src/test/queries/clientpositive/parquet_mixed_case.q index 95fc958..e377c0d 100644 --- ql/src/test/queries/clientpositive/parquet_mixed_case.q +++ ql/src/test/queries/clientpositive/parquet_mixed_case.q @@ -11,3 +11,17 @@ CREATE TABLE parquet_mixed_case ( LOAD DATA LOCAL INPATH '../../data/files/parquet_mixed_case' OVERWRITE INTO TABLE parquet_mixed_case; SELECT lowercase, "|", uppercase, "|", stats, "|", moreuppercase, "|", morelowercase FROM parquet_mixed_case; + +-- Also test mixed cases for nested columns (columns within a struct) + +DROP TABLE table_with_struct; + +CREATE TABLE table_with_struct(a struct) STORED AS PARQUET; + +INSERT OVERWRITE TABLE table_with_struct SELECT named_struct('lowercase', 'foo', 'MixedCase', 'bar') FROM srcpart LIMIT 2; + +SELECT a.lowercase, a.MixedCase FROM table_with_struct; +SELECT a.LowerCase, a.mixedcase FROM table_with_struct; + +DROP TABLE table_with_struct; + diff --git ql/src/test/results/clientpositive/parquet_mixed_case.q.out ql/src/test/results/clientpositive/parquet_mixed_case.q.out index 5b8cf59..d1e5553 100644 --- ql/src/test/results/clientpositive/parquet_mixed_case.q.out +++ ql/src/test/results/clientpositive/parquet_mixed_case.q.out @@ -40,3 +40,64 @@ POSTHOOK: Input: default@parquet_mixed_case #### A masked pattern was here #### test lowercase string | test upperCase string | NULL | more upperCase string | more lowercase string test lowercase string2 | test upperCase string2 | NULL | more upperCase string2 | more lowercase string2 +PREHOOK: query: -- Also test mixed cases for nested columns (columns within a struct) + +DROP TABLE table_with_struct +PREHOOK: type: DROPTABLE +POSTHOOK: query: -- Also test mixed cases for nested columns (columns within a struct) + +DROP TABLE table_with_struct +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE table_with_struct(a struct) STORED AS PARQUET +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@table_with_struct +POSTHOOK: query: CREATE TABLE table_with_struct(a struct) STORED AS PARQUET +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@table_with_struct +PREHOOK: query: INSERT OVERWRITE TABLE table_with_struct SELECT named_struct('lowercase', 'foo', 'MixedCase', 'bar') FROM srcpart LIMIT 2 +PREHOOK: type: QUERY +PREHOOK: Input: default@srcpart +PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11 +PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12 +PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=11 +PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=12 +PREHOOK: Output: default@table_with_struct +POSTHOOK: query: INSERT OVERWRITE TABLE table_with_struct SELECT named_struct('lowercase', 'foo', 'MixedCase', 'bar') FROM srcpart LIMIT 2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@srcpart +POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=11 +POSTHOOK: Input: default@srcpart@ds=2008-04-08/hr=12 +POSTHOOK: Input: default@srcpart@ds=2008-04-09/hr=11 +POSTHOOK: Input: default@srcpart@ds=2008-04-09/hr=12 +POSTHOOK: Output: default@table_with_struct +POSTHOOK: Lineage: table_with_struct.a EXPRESSION [] +PREHOOK: query: SELECT a.lowercase, a.MixedCase FROM table_with_struct +PREHOOK: type: QUERY +PREHOOK: Input: default@table_with_struct +#### A masked pattern was here #### +POSTHOOK: query: SELECT a.lowercase, a.MixedCase FROM table_with_struct +POSTHOOK: type: QUERY +POSTHOOK: Input: default@table_with_struct +#### A masked pattern was here #### +foo bar +foo bar +PREHOOK: query: SELECT a.LowerCase, a.mixedcase FROM table_with_struct +PREHOOK: type: QUERY +PREHOOK: Input: default@table_with_struct +#### A masked pattern was here #### +POSTHOOK: query: SELECT a.LowerCase, a.mixedcase FROM table_with_struct +POSTHOOK: type: QUERY +POSTHOOK: Input: default@table_with_struct +#### A masked pattern was here #### +foo bar +foo bar +PREHOOK: query: DROP TABLE table_with_struct +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@table_with_struct +PREHOOK: Output: default@table_with_struct +POSTHOOK: query: DROP TABLE table_with_struct +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@table_with_struct +POSTHOOK: Output: default@table_with_struct