diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/TypeConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/TypeConverter.java index edb31992cb..039d9e52ff 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/TypeConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/TypeConverter.java @@ -160,7 +160,7 @@ public static RelDataType convert(TypeInfo type, RelDataTypeFactory dtFactory) convertedType = convert((UnionTypeInfo) type, dtFactory); break; } - return convertedType; + return dtFactory.createTypeWithNullability(convertedType, true); } public static RelDataType convert(PrimitiveTypeInfo type, RelDataTypeFactory dtFactory) { diff --git a/ql/src/test/queries/clientpositive/structin.q b/ql/src/test/queries/clientpositive/structin.q index 962119574f..32411da805 100644 --- a/ql/src/test/queries/clientpositive/structin.q +++ b/ql/src/test/queries/clientpositive/structin.q @@ -21,3 +21,14 @@ IN ( struct('1234-1111-0074578664','3'), struct('1234-1111-0074578695',1) ); + +CREATE TABLE test_struct +( + f1 string, + demo_struct struct, + datestr string +); + +explain select * from test_struct where datestr='2019-01-01' and demo_struct is not null; + +DROP TABLE test_struct; \ No newline at end of file diff --git a/ql/src/test/results/clientpositive/structin.q.out b/ql/src/test/results/clientpositive/structin.q.out index 0fe88f5125..9267aaddf1 100644 --- a/ql/src/test/results/clientpositive/structin.q.out +++ b/ql/src/test/results/clientpositive/structin.q.out @@ -119,3 +119,71 @@ STAGE PLANS: Processor Tree: ListSink +PREHOOK: query: CREATE TABLE test_struct +( + f1 string, + demo_struct struct, + datestr string +) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@test_struct +POSTHOOK: query: CREATE TABLE test_struct +( + f1 string, + demo_struct struct, + datestr string +) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@test_struct +PREHOOK: query: explain select * from test_struct where datestr='2019-01-01' and demo_struct is not null +PREHOOK: type: QUERY +PREHOOK: Input: default@test_struct +#### A masked pattern was here #### +POSTHOOK: query: explain select * from test_struct where datestr='2019-01-01' and demo_struct is not null +POSTHOOK: type: QUERY +POSTHOOK: Input: default@test_struct +#### A masked pattern was here #### +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: test_struct + filterExpr: ((datestr = '2019-01-01') and demo_struct is not null) (type: boolean) + Statistics: Num rows: 1 Data size: 886 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: ((datestr = '2019-01-01') and demo_struct is not null) (type: boolean) + Statistics: Num rows: 1 Data size: 886 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: f1 (type: string), demo_struct (type: struct), '2019-01-01' (type: string) + outputColumnNames: _col0, _col1, _col2 + Statistics: Num rows: 1 Data size: 886 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 1 Data size: 886 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 + Execution mode: vectorized + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: DROP TABLE test_struct +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@test_struct +PREHOOK: Output: default@test_struct +POSTHOOK: query: DROP TABLE test_struct +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@test_struct +POSTHOOK: Output: default@test_struct