diff --git ql/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java ql/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java index 3b918b0..1663d78 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java @@ -573,7 +573,7 @@ static ExpressionTree pushDownNot(ExpressionTree root) { * @param expr The expression to clean up * @return The cleaned up expression */ - ExpressionTree foldMaybe(ExpressionTree expr) { + static ExpressionTree foldMaybe(ExpressionTree expr) { if (expr.children != null) { for(int i=0; i < expr.children.size(); ++i) { ExpressionTree child = foldMaybe(expr.children.get(i)); @@ -594,6 +594,9 @@ ExpressionTree foldMaybe(ExpressionTree expr) { expr.children.set(i, child); } } + if (expr.children.isEmpty()) { + return new ExpressionTree(TruthValue.YES_NO_NULL); + } } return expr; } diff --git ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java index 57b4177..6a2a56a 100644 --- ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java +++ ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java @@ -147,6 +147,31 @@ public void testFlatten() throws Exception { } @Test + public void testFoldMaybe() throws Exception { + assertEquals("(and leaf-1)", + ExpressionBuilder.foldMaybe(and(leaf(1), + constant(TruthValue.YES_NO_NULL))).toString()); + assertEquals("(and leaf-1 leaf-2)", + ExpressionBuilder.foldMaybe(and(leaf(1), + constant(TruthValue.YES_NO_NULL), leaf(2))).toString()); + assertEquals("(and leaf-1 leaf-2)", + ExpressionBuilder.foldMaybe(and(constant(TruthValue.YES_NO_NULL), + leaf(1), leaf(2), constant(TruthValue.YES_NO_NULL))).toString()); + assertEquals("YES_NO_NULL", + ExpressionBuilder.foldMaybe(and(constant(TruthValue.YES_NO_NULL), + constant(TruthValue.YES_NO_NULL))).toString()); + assertEquals("YES_NO_NULL", + ExpressionBuilder.foldMaybe(or(leaf(1), + constant(TruthValue.YES_NO_NULL))).toString()); + assertEquals("(or leaf-1 (and leaf-2))", + ExpressionBuilder.foldMaybe(or(leaf(1), + and(leaf(2), constant(TruthValue.YES_NO_NULL)))).toString()); + assertEquals("(and leaf-1)", + ExpressionBuilder.foldMaybe(and(or(leaf(2), + constant(TruthValue.YES_NO_NULL)), leaf(1))).toString()); + } + + @Test public void testCNF() throws Exception { assertEquals("leaf-1", ExpressionBuilder.convertToCNF(leaf(1)).toString()); assertEquals("NO", ExpressionBuilder.convertToCNF( diff --git ql/src/test/queries/clientpositive/orc_create.q ql/src/test/queries/clientpositive/orc_create.q index 0a322f8..823727d 100644 --- ql/src/test/queries/clientpositive/orc_create.q +++ ql/src/test/queries/clientpositive/orc_create.q @@ -92,6 +92,15 @@ SET hive.optimize.index.filter=true; -- test predicate push down with partition pruning SELECT COUNT(*) FROM orc_create_people where id < 10 and state = 'Ca'; +-- test predicate push down +SELECT COUNT(*) FROM orc_create_people where id = 50; +SELECT COUNT(*) FROM orc_create_people where id between 10 and 20; +SELECT COUNT(*) FROM orc_create_people where id > 10 and id < 100; +SELECT COUNT(*) FROM orc_create_people where (id + 1) = 20; +SELECT COUNT(*) FROM orc_create_people where (id + 10) < 200; +SELECT COUNT(*) FROM orc_create_people where id < 30 or first_name = "Rafael"; +SELECT COUNT(*) FROM orc_create_people where length(substr(first_name, 1, 2)) <= 2 and last_name like '%'; + -- test predicate push down with no column projection SELECT id, first_name, last_name, address FROM orc_create_people WHERE id > 90; diff --git ql/src/test/results/clientpositive/orc_create.q.out ql/src/test/results/clientpositive/orc_create.q.out index 3527917..259520e 100644 --- ql/src/test/results/clientpositive/orc_create.q.out +++ ql/src/test/results/clientpositive/orc_create.q.out @@ -506,6 +506,183 @@ POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] 5 +PREHOOK: query: -- test predicate push down +SELECT COUNT(*) FROM orc_create_people where id = 50 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: -- test predicate push down +SELECT COUNT(*) FROM orc_create_people where id = 50 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +1 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where id between 10 and 20 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where id between 10 and 20 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +11 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where id > 10 and id < 100 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where id > 10 and id < 100 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +89 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where (id + 1) = 20 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where (id + 1) = 20 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +1 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where (id + 10) < 200 +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where (id + 10) < 200 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +100 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where id < 30 or first_name = "Rafael" +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where id < 30 or first_name = "Rafael" +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +30 +PREHOOK: query: SELECT COUNT(*) FROM orc_create_people where length(substr(first_name, 1, 2)) <= 2 and last_name like '%' +PREHOOK: type: QUERY +PREHOOK: Input: default@orc_create_people +PREHOOK: Input: default@orc_create_people@state=Ca +PREHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: query: SELECT COUNT(*) FROM orc_create_people where length(substr(first_name, 1, 2)) <= 2 and last_name like '%' +POSTHOOK: type: QUERY +POSTHOOK: Input: default@orc_create_people +POSTHOOK: Input: default@orc_create_people@state=Ca +POSTHOOK: Input: default@orc_create_people@state=Or +#### A masked pattern was here #### +POSTHOOK: Lineage: orc_create_complex.lst SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:lst, type:array, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.mp SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:mp, type:map, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.str SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:str, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_complex.strct SIMPLE [(orc_create_staging)orc_create_staging.FieldSchema(name:strct, type:struct, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Ca).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).address SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:address, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).first_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:first_name, type:string, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).id SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: orc_create_people PARTITION(state=Or).last_name SIMPLE [(orc_create_people_staging)orc_create_people_staging.FieldSchema(name:last_name, type:string, comment:null), ] +100 PREHOOK: query: -- test predicate push down with no column projection SELECT id, first_name, last_name, address FROM orc_create_people WHERE id > 90