7575NULL
7676NULL
7777
78+ query T
79+ select a from t_pushdown where b > 2 ORDER BY a;
80+ ----
81+ baz
82+ foo
83+ NULL
84+ NULL
85+ NULL
86+
87+ query TT
88+ EXPLAIN select a from t where b > 2 ORDER BY a;
89+ ----
90+ logical_plan
91+ 01)Sort: t.a ASC NULLS LAST
92+ 02)--Projection: t.a
93+ 03)----Filter: t.b > Int32(2)
94+ 04)------TableScan: t projection=[a, b], partial_filters=[t.b > Int32(2)]
95+ physical_plan
96+ 01)SortPreservingMergeExec: [a@0 ASC NULLS LAST]
97+ 02)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
98+ 03)----CoalesceBatchesExec: target_batch_size=8192
99+ 04)------FilterExec: b@1 > 2, projection=[a@0]
100+ 05)--------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=2
101+ 06)----------DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a, b], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
102+
78103query TT
79104EXPLAIN select a from t_pushdown where b > 2 ORDER BY a;
80105----
@@ -88,6 +113,104 @@ physical_plan
8811302)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
8911403)----DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
90115
116+ # If we set the setting to `true` it override's the table's setting
117+ statement ok
118+ set datafusion.execution.parquet.pushdown_filters = true;
119+
120+ query T
121+ select a from t where b > 2 ORDER BY a;
122+ ----
123+ baz
124+ foo
125+ NULL
126+ NULL
127+ NULL
128+
129+ query T
130+ select a from t_pushdown where b > 2 ORDER BY a;
131+ ----
132+ baz
133+ foo
134+ NULL
135+ NULL
136+ NULL
137+
138+ query TT
139+ EXPLAIN select a from t where b > 2 ORDER BY a;
140+ ----
141+ logical_plan
142+ 01)Sort: t.a ASC NULLS LAST
143+ 02)--Projection: t.a
144+ 03)----Filter: t.b > Int32(2)
145+ 04)------TableScan: t projection=[a, b], partial_filters=[t.b > Int32(2)]
146+ physical_plan
147+ 01)SortPreservingMergeExec: [a@0 ASC NULLS LAST]
148+ 02)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
149+ 03)----DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
150+
151+ query TT
152+ EXPLAIN select a from t_pushdown where b > 2 ORDER BY a;
153+ ----
154+ logical_plan
155+ 01)Sort: t_pushdown.a ASC NULLS LAST
156+ 02)--Projection: t_pushdown.a
157+ 03)----Filter: t_pushdown.b > Int32(2)
158+ 04)------TableScan: t_pushdown projection=[a, b], partial_filters=[t_pushdown.b > Int32(2)]
159+ physical_plan
160+ 01)SortPreservingMergeExec: [a@0 ASC NULLS LAST]
161+ 02)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
162+ 03)----DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
163+
164+ # If we reset the default the table created without pushdown goes back to disabling it
165+ statement ok
166+ set datafusion.execution.parquet.pushdown_filters = false;
167+
168+ query T
169+ select a from t where b > 2 ORDER BY a;
170+ ----
171+ baz
172+ foo
173+ NULL
174+ NULL
175+ NULL
176+
177+ query T
178+ select a from t_pushdown where b > 2 ORDER BY a;
179+ ----
180+ baz
181+ foo
182+ NULL
183+ NULL
184+ NULL
185+
186+ query TT
187+ EXPLAIN select a from t where b > 2 ORDER BY a;
188+ ----
189+ logical_plan
190+ 01)Sort: t.a ASC NULLS LAST
191+ 02)--Projection: t.a
192+ 03)----Filter: t.b > Int32(2)
193+ 04)------TableScan: t projection=[a, b], partial_filters=[t.b > Int32(2)]
194+ physical_plan
195+ 01)SortPreservingMergeExec: [a@0 ASC NULLS LAST]
196+ 02)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
197+ 03)----CoalesceBatchesExec: target_batch_size=8192
198+ 04)------FilterExec: b@1 > 2, projection=[a@0]
199+ 05)--------RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=2
200+ 06)----------DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a, b], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
201+
202+ query TT
203+ EXPLAIN select a from t_pushdown where b > 2 ORDER BY a;
204+ ----
205+ logical_plan
206+ 01)Sort: t_pushdown.a ASC NULLS LAST
207+ 02)--Projection: t_pushdown.a
208+ 03)----Filter: t_pushdown.b > Int32(2)
209+ 04)------TableScan: t_pushdown projection=[a, b], partial_filters=[t_pushdown.b > Int32(2)]
210+ physical_plan
211+ 01)SortPreservingMergeExec: [a@0 ASC NULLS LAST]
212+ 02)--SortExec: expr=[a@0 ASC NULLS LAST], preserve_partitioning=[true]
213+ 03)----DataSourceExec: file_groups={2 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/1.parquet], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/parquet_filter_pushdown/parquet_table/2.parquet]]}, projection=[a], file_type=parquet, predicate=b@1 > 2, pruning_predicate=b_null_count@1 != row_count@2 AND b_max@0 > 2, required_guarantees=[]
91214
92215# When filter pushdown *is* enabled, ParquetExec can filter exactly,
93216# not just metadata, so we expect to see no FilterExec
0 commit comments