diff --git a/Cargo.lock b/Cargo.lock
index 5b0fa3e06f..7dbe1c3937 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1432,7 +1432,7 @@ dependencies = [
 [[package]]
 name = "datafusion"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "ahash 0.8.3",
  "arrow",
@@ -1481,7 +1481,7 @@ dependencies = [
 [[package]]
 name = "datafusion-common"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "arrow",
  "arrow-array",
@@ -1495,7 +1495,7 @@ dependencies = [
 [[package]]
 name = "datafusion-execution"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "dashmap",
  "datafusion-common",
@@ -1512,7 +1512,7 @@ dependencies = [
 [[package]]
 name = "datafusion-expr"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "ahash 0.8.3",
  "arrow",
@@ -1523,7 +1523,7 @@ dependencies = [
 [[package]]
 name = "datafusion-optimizer"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "arrow",
  "async-trait",
@@ -1540,7 +1540,7 @@ dependencies = [
 [[package]]
 name = "datafusion-physical-expr"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "ahash 0.8.3",
  "arrow",
@@ -1572,7 +1572,7 @@ dependencies = [
 [[package]]
 name = "datafusion-proto"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "arrow",
  "chrono",
@@ -1586,7 +1586,7 @@ dependencies = [
 [[package]]
 name = "datafusion-row"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "arrow",
  "datafusion-common",
@@ -1597,7 +1597,7 @@ dependencies = [
 [[package]]
 name = "datafusion-sql"
 version = "23.0.0"
-source = "git+https://github.com/apache/arrow-datafusion.git?rev=2787e7a36a6be83d91201df20827d3695f933300#2787e7a36a6be83d91201df20827d3695f933300"
+source = "git+https://github.com/apache/arrow-datafusion.git?rev=06e9f53637f20dd91bef43b74942ec36c38c22d5#06e9f53637f20dd91bef43b74942ec36c38c22d5"
 dependencies = [
  "arrow",
  "arrow-schema",
diff --git a/Cargo.toml b/Cargo.toml
index ea50bde0f2..cb5bfe369d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -115,8 +115,8 @@ license = "MIT OR Apache-2.0"
 [workspace.dependencies]
 arrow = { version = "38.0.0" }
 arrow-flight = { version = "38.0.0" }
-datafusion = { git = "https://github.com/apache/arrow-datafusion.git", rev="2787e7a36a6be83d91201df20827d3695f933300", default-features = false }
-datafusion-proto = { git = "https://github.com/apache/arrow-datafusion.git", rev="2787e7a36a6be83d91201df20827d3695f933300" }
+datafusion = { git = "https://github.com/apache/arrow-datafusion.git", rev="06e9f53637f20dd91bef43b74942ec36c38c22d5", default-features = false }
+datafusion-proto = { git = "https://github.com/apache/arrow-datafusion.git", rev="06e9f53637f20dd91bef43b74942ec36c38c22d5" }
 hashbrown = { version = "0.13.2" }
 parquet = { version = "38.0.0" }
 tonic = { version = "0.9.2", features = ["tls", "tls-webpki-roots"] }
diff --git a/influxdb_iox/tests/query_tests2/cases/in/date_bin.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/date_bin.sql.expected
index 04bf54f4cd..f4ed971ead 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/date_bin.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/date_bin.sql.expected
@@ -114,6 +114,6 @@
 |    |           RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1    |
 |    |             CoalesceBatchesExec: target_batch_size=8192    |
 |    |               FilterExec: time@0 >= 957528000000000000 AND time@0 <= 957531540000000000    |
-|    |                 ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000, projection=[time, user]    |
+|    |                 ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[time, user], predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet.sql.expected
index e9bd4a74ad..aec20cdbab 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet.sql.expected
@@ -17,7 +17,7 @@
 |    |   ProjectionExec: expr=[bar@1 as bar, foo@2 as foo, tag@3 as tag, time@4 as time]    |
 |    |     DeduplicateExec: [tag@3 ASC,time@4 ASC]    |
 |    |       SortPreservingMergeExec: [tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
-|    |         ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |         ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE tag='A';
@@ -37,7 +37,7 @@
 |    |     SortPreservingMergeExec: [tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
 |    |       CoalesceBatchesExec: target_batch_size=8192    |
 |    |         FilterExec: tag@3 = A    |
-|    |           ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=tag@2 = A, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |           ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=tag@2 = A, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE foo=1 AND bar=2;
@@ -57,7 +57,7 @@
 |    |     ProjectionExec: expr=[bar@1 as bar, foo@2 as foo, tag@3 as tag, time@4 as time]    |
 |    |       DeduplicateExec: [tag@3 ASC,time@4 ASC]    |
 |    |         SortPreservingMergeExec: [tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
-|    |           ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |           ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE time=to_timestamp('1970-01-01T00:00:00.000000000+00:00') ORDER BY tag;
@@ -80,7 +80,7 @@
 |    |       SortPreservingMergeExec: [tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
 |    |         CoalesceBatchesExec: target_batch_size=8192    |
 |    |           FilterExec: time@4 = 0    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=time@3 = 0, pruning_predicate=time_min@0 <= 0 AND 0 <= time_max@1, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=time@3 = 0, pruning_predicate=time_min@0 <= 0 AND 0 <= time_max@1    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE tag='A' AND foo=1 AND time=to_timestamp('1970-01-01T00:00:00.000000000+00:00');
@@ -102,6 +102,6 @@
 |    |         SortPreservingMergeExec: [tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
 |    |           CoalesceBatchesExec: target_batch_size=8192    |
 |    |             FilterExec: tag@3 = A AND time@4 = 0    |
-|    |               ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=tag@2 = A AND time@3 = 0, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1 AND time_min@2 <= 0 AND 0 <= time_max@3, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |               ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=tag@2 = A AND time@3 = 0, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1 AND time_min@2 <= 0 AND 0 <= time_max@3    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet_ingester.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet_ingester.sql.expected
index 77a4f28d59..eb5b686900 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet_ingester.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/dedup_and_predicates_parquet_ingester.sql.expected
@@ -20,7 +20,7 @@
 |    |         UnionExec    |
 |    |           SortExec: expr=[tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
 |    |             RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
-|    |           ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |           ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE tag='A';
@@ -46,7 +46,7 @@
 |    |                 RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
 |    |         CoalesceBatchesExec: target_batch_size=8192    |
 |    |           FilterExec: tag@3 = A    |
-|    |             ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=tag@2 = A, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |             ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=tag@2 = A, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE foo=1 AND bar=2;
@@ -69,7 +69,7 @@
 |    |           UnionExec    |
 |    |             SortExec: expr=[tag@3 ASC,time@4 ASC,__chunk_order@0 ASC]    |
 |    |               RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
-|    |             ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |             ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE time=to_timestamp('1970-01-01T00:00:00.000000000+00:00') ORDER BY tag;
@@ -98,7 +98,7 @@
 |    |                   RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
 |    |           CoalesceBatchesExec: target_batch_size=8192    |
 |    |             FilterExec: time@4 = 0    |
-|    |               ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=time@3 = 0, pruning_predicate=time_min@0 <= 0 AND 0 <= time_max@1, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |               ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=time@3 = 0, pruning_predicate=time_min@0 <= 0 AND 0 <= time_max@1    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM "table" WHERE tag='A' AND foo=1 AND time=to_timestamp('1970-01-01T00:00:00.000000000+00:00');
@@ -126,6 +126,6 @@
 |    |                     RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
 |    |             CoalesceBatchesExec: target_batch_size=8192    |
 |    |               FilterExec: tag@3 = A AND time@4 = 0    |
-|    |                 ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=tag@2 = A AND time@3 = 0, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1 AND time_min@2 <= 0 AND 0 <= time_max@3, output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, bar, foo, tag, time]    |
+|    |                 ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, bar, foo, tag, time], output_ordering=[tag@3 ASC, time@4 ASC, __chunk_order@0 ASC], predicate=tag@2 = A AND time@3 = 0, pruning_predicate=tag_min@0 <= A AND A <= tag_max@1 AND time_min@2 <= 0 AND 0 <= time_max@3    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/duplicates_ingester.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/duplicates_ingester.sql.expected
index f7650395f9..dc9fd64026 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/duplicates_ingester.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/duplicates_ingester.sql.expected
@@ -34,12 +34,12 @@
 | physical_plan    | SortPreservingMergeExec: [time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
 |    |   UnionExec    |
 |    |     SortExec: expr=[time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
-|    |       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC], projection=[time, state, city, min_temp, max_temp, area]    |
+|    |       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[time, state, city, min_temp, max_temp, area], output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC]    |
 |    |     SortExec: expr=[time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
 |    |       ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |         DeduplicateExec: [state@2 ASC,city@3 ASC,time@1 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@3 ASC,time@1 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC], projection=[__chunk_order, time, state, city, min_temp, max_temp, area]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, projection=[__chunk_order, time, state, city, min_temp, max_temp, area], output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC]    |
 |    |     SortExec: expr=[time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
 |    |       ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |         DeduplicateExec: [city@3 ASC,state@2 ASC,time@1 ASC]    |
@@ -55,11 +55,11 @@
 | logical_plan    | Projection: h2o.time, h2o.state, h2o.city, h2o.min_temp, h2o.max_temp, h2o.area    |
 |    |   TableScan: h2o projection=[area, city, max_temp, min_temp, state, time]    |
 | physical_plan    | UnionExec    |
-|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC], projection=[time, state, city, min_temp, max_temp, area]    |
+|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[time, state, city, min_temp, max_temp, area], output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC]    |
 |    |   ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |     DeduplicateExec: [state@2 ASC,city@3 ASC,time@1 ASC]    |
 |    |       SortPreservingMergeExec: [state@2 ASC,city@3 ASC,time@1 ASC,__chunk_order@0 ASC]    |
-|    |         ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC], projection=[__chunk_order, time, state, city, min_temp, max_temp, area]    |
+|    |         ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, projection=[__chunk_order, time, state, city, min_temp, max_temp, area], output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC]    |
 |    |   ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |     DeduplicateExec: [city@3 ASC,state@2 ASC,time@1 ASC]    |
 |    |       SortExec: expr=[city@3 ASC,state@2 ASC,time@1 ASC,__chunk_order@0 ASC]    |
@@ -79,22 +79,22 @@
 | physical_plan    | UnionExec    |
 |    |   ProjectionExec: expr=[state@0 as name]    |
 |    |     UnionExec    |
-|    |       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[state@0 ASC], projection=[state]    |
+|    |       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[state], output_ordering=[state@0 ASC]    |
 |    |       ProjectionExec: expr=[state@2 as state]    |
 |    |         DeduplicateExec: [state@2 ASC,city@1 ASC,time@3 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@1 ASC,time@3 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, projection=[__chunk_order, city, state, time], output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC]    |
 |    |       ProjectionExec: expr=[state@2 as state]    |
 |    |         DeduplicateExec: [city@1 ASC,state@2 ASC,time@3 ASC]    |
 |    |           SortExec: expr=[city@1 ASC,state@2 ASC,time@3 ASC,__chunk_order@0 ASC]    |
 |    |             RecordBatchesExec: batches_groups=1 batches=1 total_rows=6    |
 |    |   ProjectionExec: expr=[city@0 as name]    |
 |    |     UnionExec    |
-|    |       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[city]    |
+|    |       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[city]    |
 |    |       ProjectionExec: expr=[city@1 as city]    |
 |    |         DeduplicateExec: [state@2 ASC,city@1 ASC,time@3 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@1 ASC,time@3 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, projection=[__chunk_order, city, state, time], output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC]    |
 |    |       ProjectionExec: expr=[city@1 as city]    |
 |    |         DeduplicateExec: [city@1 ASC,state@2 ASC,time@3 ASC]    |
 |    |           SortExec: expr=[city@1 ASC,state@2 ASC,time@3 ASC,__chunk_order@0 ASC]    |
diff --git a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet.sql.expected
index 1c9dc7421e..b8293f2939 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet.sql.expected
@@ -34,12 +34,12 @@
 | physical_plan    | SortPreservingMergeExec: [time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
 |    |   UnionExec    |
 |    |     SortExec: expr=[time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
-|    |       ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC], projection=[time, state, city, min_temp, max_temp, area]    |
+|    |       ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[time, state, city, min_temp, max_temp, area], output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC]    |
 |    |     SortExec: expr=[time@0 ASC NULLS LAST,state@1 ASC NULLS LAST,city@2 ASC NULLS LAST]    |
 |    |       ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |         DeduplicateExec: [state@2 ASC,city@3 ASC,time@1 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@3 ASC,time@1 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC], projection=[__chunk_order, time, state, city, min_temp, max_temp, area]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, time, state, city, min_temp, max_temp, area], output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: EXPLAIN select time, state, city, min_temp, max_temp, area from h2o;
@@ -50,11 +50,11 @@
 | logical_plan    | Projection: h2o.time, h2o.state, h2o.city, h2o.min_temp, h2o.max_temp, h2o.area    |
 |    |   TableScan: h2o projection=[area, city, max_temp, min_temp, state, time]    |
 | physical_plan    | UnionExec    |
-|    |   ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC], projection=[time, state, city, min_temp, max_temp, area]    |
+|    |   ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[time, state, city, min_temp, max_temp, area], output_ordering=[state@1 ASC, city@2 ASC, time@0 ASC]    |
 |    |   ProjectionExec: expr=[time@1 as time, state@2 as state, city@3 as city, min_temp@4 as min_temp, max_temp@5 as max_temp, area@6 as area]    |
 |    |     DeduplicateExec: [state@2 ASC,city@3 ASC,time@1 ASC]    |
 |    |       SortPreservingMergeExec: [state@2 ASC,city@3 ASC,time@1 ASC,__chunk_order@0 ASC]    |
-|    |         ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC], projection=[__chunk_order, time, state, city, min_temp, max_temp, area]    |
+|    |         ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, time, state, city, min_temp, max_temp, area], output_ordering=[state@2 ASC, city@3 ASC, time@1 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: EXPLAIN select state as name from h2o UNION ALL select city as name from h2o;
@@ -70,18 +70,18 @@
 | physical_plan    | UnionExec    |
 |    |   ProjectionExec: expr=[state@0 as name]    |
 |    |     UnionExec    |
-|    |       ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[state@0 ASC], projection=[state]    |
+|    |       ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[state], output_ordering=[state@0 ASC]    |
 |    |       ProjectionExec: expr=[state@2 as state]    |
 |    |         DeduplicateExec: [state@2 ASC,city@1 ASC,time@3 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@1 ASC,time@3 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, city, state, time], output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC]    |
 |    |   ProjectionExec: expr=[city@0 as name]    |
 |    |     UnionExec    |
-|    |       ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[city]    |
+|    |       ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[city]    |
 |    |       ProjectionExec: expr=[city@1 as city]    |
 |    |         DeduplicateExec: [state@2 ASC,city@1 ASC,time@3 ASC]    |
 |    |           SortPreservingMergeExec: [state@2 ASC,city@1 ASC,time@3 ASC,__chunk_order@0 ASC]    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, city, state, time], output_ordering=[state@2 ASC, city@1 ASC, time@3 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: select count(*) from h2o;
@@ -100,12 +100,12 @@
 |    |   UnionExec, metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=10, spill_count=0, spilled_bytes=0]    |
 |    |     CoalesceBatchesExec: target_batch_size=8192, metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=5, spill_count=0, spilled_bytes=0]    |
 |    |       FilterExec: state@4 = MA, metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=5, spill_count=0, spilled_bytes=0]    |
-|    |         ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=state@4 = MA, pruning_predicate=state_min@0 <= MA AND MA <= state_max@1, output_ordering=[state@4 ASC, city@1 ASC, time@5 ASC], projection=[area, city, max_temp, min_temp, state, time], metrics=[bytes_scanned=1219, elapsed_compute=1.234ms, mem_used=0, num_predicate_creation_errors=0, output_rows=5, page_index_eval_time=1.234ms, page_index_rows_filtered=0, predicate_evaluation_errors=0, pushdown_eval_time=1.234ms, pushdown_rows_filtered=5, row_groups_pruned=0, spill_count=0, spilled_bytes=0, time_elapsed_opening=1.234ms, time_elapsed_processing=1.234ms, time_elapsed_scanning_total=1.234ms, time_elapsed_scanning_until_data=1.234ms]    |
+|    |         ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[area, city, max_temp, min_temp, state, time], output_ordering=[state@4 ASC, city@1 ASC, time@5 ASC], predicate=state@4 = MA, pruning_predicate=state_min@0 <= MA AND MA <= state_max@1, metrics=[bytes_scanned=1219, elapsed_compute=1.234ms, mem_used=0, num_predicate_creation_errors=0, output_rows=5, page_index_eval_time=1.234ms, page_index_rows_filtered=0, predicate_evaluation_errors=0, pushdown_eval_time=1.234ms, pushdown_rows_filtered=5, row_groups_pruned=0, spill_count=0, spilled_bytes=0, time_elapsed_opening=1.234ms, time_elapsed_processing=1.234ms, time_elapsed_scanning_total=1.234ms, time_elapsed_scanning_until_data=1.234ms]    |
 |    |     ProjectionExec: expr=[area@1 as area, city@2 as city, max_temp@3 as max_temp, min_temp@4 as min_temp, state@5 as state, time@6 as time], metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=5, spill_count=0, spilled_bytes=0]    |
 |    |       DeduplicateExec: [state@5 ASC,city@2 ASC,time@6 ASC], metrics=[elapsed_compute=1.234ms, mem_used=0, num_dupes=2, output_rows=5, spill_count=0, spilled_bytes=0]    |
 |    |         SortPreservingMergeExec: [state@5 ASC,city@2 ASC,time@6 ASC,__chunk_order@0 ASC], metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=7, spill_count=0, spilled_bytes=0]    |
 |    |           CoalesceBatchesExec: target_batch_size=8192, metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=7, spill_count=0, spilled_bytes=0]    |
 |    |             FilterExec: state@5 = MA, metrics=[elapsed_compute=1.234ms, mem_used=0, output_rows=7, spill_count=0, spilled_bytes=0]    |
-|    |               ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, predicate=state@4 = MA, pruning_predicate=state_min@0 <= MA AND MA <= state_max@1, output_ordering=[state@5 ASC, city@2 ASC, time@6 ASC, __chunk_order@0 ASC], projection=[__chunk_order, area, city, max_temp, min_temp, state, time], metrics=[bytes_scanned=1106, elapsed_compute=1.234ms, mem_used=0, num_predicate_creation_errors=0, output_rows=7, page_index_eval_time=1.234ms, page_index_rows_filtered=0, predicate_evaluation_errors=0, pushdown_eval_time=1.234ms, pushdown_rows_filtered=3, row_groups_pruned=0, spill_count=0, spilled_bytes=0, time_elapsed_opening=1.234ms, time_elapsed_processing=1.234ms, time_elapsed_scanning_total=1.234ms, time_elapsed_scanning_until_data=1.234ms]    |
+|    |               ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, area, city, max_temp, min_temp, state, time], output_ordering=[state@5 ASC, city@2 ASC, time@6 ASC, __chunk_order@0 ASC], predicate=state@4 = MA, pruning_predicate=state_min@0 <= MA AND MA <= state_max@1, metrics=[bytes_scanned=1106, elapsed_compute=1.234ms, mem_used=0, num_predicate_creation_errors=0, output_rows=7, page_index_eval_time=1.234ms, page_index_rows_filtered=0, predicate_evaluation_errors=0, pushdown_eval_time=1.234ms, pushdown_rows_filtered=3, row_groups_pruned=0, spill_count=0, spilled_bytes=0, time_elapsed_opening=1.234ms, time_elapsed_processing=1.234ms, time_elapsed_scanning_total=1.234ms, time_elapsed_scanning_until_data=1.234ms]    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_50_files.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_50_files.sql.expected
index 0e397532e6..87317eeddb 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_50_files.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_50_files.sql.expected
@@ -20,6 +20,6 @@
 |    |           DeduplicateExec: [tag1@2 ASC,tag2@3 ASC,tag3@4 ASC,tag4@5 ASC,time@6 ASC]    |
 |    |             SortPreservingMergeExec: [tag1@2 ASC,tag2@3 ASC,tag3@4 ASC,tag4@5 ASC,time@6 ASC,__chunk_order@0 ASC]    |
 |    |               SortExec: expr=[tag1@2 ASC,tag2@3 ASC,tag3@4 ASC,tag4@5 ASC,time@6 ASC,__chunk_order@0 ASC]    |
-|    |                 ParquetExec: limit=None, partitions={4 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet, 1/1/1/00000000-0000-0000-0000-000000000005.parquet, 1/1/1/00000000-0000-0000-0000-000000000006.parquet, 1/1/1/00000000-0000-0000-0000-000000000007.parquet, 1/1/1/00000000-0000-0000-0000-000000000008.parquet, 1/1/1/00000000-0000-0000-0000-000000000009.parquet, 1/1/1/00000000-0000-0000-0000-00000000000a.parquet, 1/1/1/00000000-0000-0000-0000-00000000000b.parquet, 1/1/1/00000000-0000-0000-0000-00000000000c.parquet], [1/1/1/00000000-0000-0000-0000-00000000000d.parquet, 1/1/1/00000000-0000-0000-0000-00000000000e.parquet, 1/1/1/00000000-0000-0000-0000-00000000000f.parquet, 1/1/1/00000000-0000-0000-0000-000000000010.parquet, 1/1/1/00000000-0000-0000-0000-000000000011.parquet, 1/1/1/00000000-0000-0000-0000-000000000012.parquet, 1/1/1/00000000-0000-0000-0000-000000000013.parquet, 1/1/1/00000000-0000-0000-0000-000000000014.parquet, 1/1/1/00000000-0000-0000-0000-000000000015.parquet, 1/1/1/00000000-0000-0000-0000-000000000016.parquet, 1/1/1/00000000-0000-0000-0000-000000000017.parquet, 1/1/1/00000000-0000-0000-0000-000000000018.parquet, 1/1/1/00000000-0000-0000-0000-000000000019.parquet], [1/1/1/00000000-0000-0000-0000-00000000001a.parquet, 1/1/1/00000000-0000-0000-0000-00000000001b.parquet, 1/1/1/00000000-0000-0000-0000-00000000001c.parquet, 1/1/1/00000000-0000-0000-0000-00000000001d.parquet, 1/1/1/00000000-0000-0000-0000-00000000001e.parquet, 1/1/1/00000000-0000-0000-0000-00000000001f.parquet, 1/1/1/00000000-0000-0000-0000-000000000020.parquet, 1/1/1/00000000-0000-0000-0000-000000000021.parquet, 1/1/1/00000000-0000-0000-0000-000000000022.parquet, 1/1/1/00000000-0000-0000-0000-000000000023.parquet, 1/1/1/00000000-0000-0000-0000-000000000024.parquet, 1/1/1/00000000-0000-0000-0000-000000000025.parquet], [1/1/1/00000000-0000-0000-0000-000000000026.parquet, 1/1/1/00000000-0000-0000-0000-000000000027.parquet, 1/1/1/00000000-0000-0000-0000-000000000028.parquet, 1/1/1/00000000-0000-0000-0000-000000000029.parquet, 1/1/1/00000000-0000-0000-0000-00000000002a.parquet, 1/1/1/00000000-0000-0000-0000-00000000002b.parquet, 1/1/1/00000000-0000-0000-0000-00000000002c.parquet, 1/1/1/00000000-0000-0000-0000-00000000002d.parquet, 1/1/1/00000000-0000-0000-0000-00000000002e.parquet, 1/1/1/00000000-0000-0000-0000-00000000002f.parquet, 1/1/1/00000000-0000-0000-0000-000000000030.parquet, 1/1/1/00000000-0000-0000-0000-000000000031.parquet]]}, projection=[__chunk_order, f1, tag1, tag2, tag3, tag4, time]    |
+|    |                 ParquetExec: file_groups={4 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet, 1/1/1/00000000-0000-0000-0000-000000000005.parquet, 1/1/1/00000000-0000-0000-0000-000000000006.parquet, 1/1/1/00000000-0000-0000-0000-000000000007.parquet, 1/1/1/00000000-0000-0000-0000-000000000008.parquet, 1/1/1/00000000-0000-0000-0000-000000000009.parquet, 1/1/1/00000000-0000-0000-0000-00000000000a.parquet, 1/1/1/00000000-0000-0000-0000-00000000000b.parquet, 1/1/1/00000000-0000-0000-0000-00000000000c.parquet], [1/1/1/00000000-0000-0000-0000-00000000000d.parquet, 1/1/1/00000000-0000-0000-0000-00000000000e.parquet, 1/1/1/00000000-0000-0000-0000-00000000000f.parquet, 1/1/1/00000000-0000-0000-0000-000000000010.parquet, 1/1/1/00000000-0000-0000-0000-000000000011.parquet, 1/1/1/00000000-0000-0000-0000-000000000012.parquet, 1/1/1/00000000-0000-0000-0000-000000000013.parquet, 1/1/1/00000000-0000-0000-0000-000000000014.parquet, 1/1/1/00000000-0000-0000-0000-000000000015.parquet, 1/1/1/00000000-0000-0000-0000-000000000016.parquet, 1/1/1/00000000-0000-0000-0000-000000000017.parquet, 1/1/1/00000000-0000-0000-0000-000000000018.parquet, 1/1/1/00000000-0000-0000-0000-000000000019.parquet], [1/1/1/00000000-0000-0000-0000-00000000001a.parquet, 1/1/1/00000000-0000-0000-0000-00000000001b.parquet, 1/1/1/00000000-0000-0000-0000-00000000001c.parquet, 1/1/1/00000000-0000-0000-0000-00000000001d.parquet, 1/1/1/00000000-0000-0000-0000-00000000001e.parquet, 1/1/1/00000000-0000-0000-0000-00000000001f.parquet, 1/1/1/00000000-0000-0000-0000-000000000020.parquet, 1/1/1/00000000-0000-0000-0000-000000000021.parquet, 1/1/1/00000000-0000-0000-0000-000000000022.parquet, 1/1/1/00000000-0000-0000-0000-000000000023.parquet, 1/1/1/00000000-0000-0000-0000-000000000024.parquet, 1/1/1/00000000-0000-0000-0000-000000000025.parquet], [1/1/1/00000000-0000-0000-0000-000000000026.parquet, 1/1/1/00000000-0000-0000-0000-000000000027.parquet, 1/1/1/00000000-0000-0000-0000-000000000028.parquet, 1/1/1/00000000-0000-0000-0000-000000000029.parquet, 1/1/1/00000000-0000-0000-0000-00000000002a.parquet, 1/1/1/00000000-0000-0000-0000-00000000002b.parquet, 1/1/1/00000000-0000-0000-0000-00000000002c.parquet, 1/1/1/00000000-0000-0000-0000-00000000002d.parquet, 1/1/1/00000000-0000-0000-0000-00000000002e.parquet, 1/1/1/00000000-0000-0000-0000-00000000002f.parquet, 1/1/1/00000000-0000-0000-0000-000000000030.parquet, 1/1/1/00000000-0000-0000-0000-000000000031.parquet]]}, projection=[__chunk_order, f1, tag1, tag2, tag3, tag4, time]    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_many.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_many.sql.expected
index 76fd2547a5..d4c59b4416 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_many.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/duplicates_parquet_many.sql.expected
@@ -16,10 +16,10 @@
 |    |   CoalescePartitionsExec    |
 |    |     AggregateExec: mode=Partial, gby=[], aggr=[COUNT(UInt8(1)), SUM(m.f)]    |
 |    |       UnionExec    |
-|    |         ParquetExec: limit=None, partitions={4 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet, 1/1/1/00000000-0000-0000-0000-000000000005.parquet], [1/1/1/00000000-0000-0000-0000-000000000006.parquet, 1/1/1/00000000-0000-0000-0000-000000000007.parquet], [1/1/1/00000000-0000-0000-0000-000000000008.parquet, 1/1/1/00000000-0000-0000-0000-000000000009.parquet]]}, projection=[f]    |
+|    |         ParquetExec: file_groups={4 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet, 1/1/1/00000000-0000-0000-0000-000000000005.parquet], [1/1/1/00000000-0000-0000-0000-000000000006.parquet, 1/1/1/00000000-0000-0000-0000-000000000007.parquet], [1/1/1/00000000-0000-0000-0000-000000000008.parquet, 1/1/1/00000000-0000-0000-0000-000000000009.parquet]]}, projection=[f]    |
 |    |         ProjectionExec: expr=[f@1 as f]    |
 |    |           DeduplicateExec: [tag@2 ASC,time@3 ASC]    |
 |    |             SortPreservingMergeExec: [tag@2 ASC,time@3 ASC,__chunk_order@0 ASC]    |
-|    |               ParquetExec: limit=None, partitions={10 groups: [[1/1/1/00000000-0000-0000-0000-00000000000a.parquet], [1/1/1/00000000-0000-0000-0000-00000000000b.parquet], [1/1/1/00000000-0000-0000-0000-00000000000c.parquet], [1/1/1/00000000-0000-0000-0000-00000000000d.parquet], [1/1/1/00000000-0000-0000-0000-00000000000e.parquet], [1/1/1/00000000-0000-0000-0000-00000000000f.parquet], [1/1/1/00000000-0000-0000-0000-000000000010.parquet], [1/1/1/00000000-0000-0000-0000-000000000011.parquet], [1/1/1/00000000-0000-0000-0000-000000000012.parquet], [1/1/1/00000000-0000-0000-0000-000000000013.parquet]]}, output_ordering=[tag@2 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, f, tag, time]    |
+|    |               ParquetExec: file_groups={10 groups: [[1/1/1/00000000-0000-0000-0000-00000000000a.parquet], [1/1/1/00000000-0000-0000-0000-00000000000b.parquet], [1/1/1/00000000-0000-0000-0000-00000000000c.parquet], [1/1/1/00000000-0000-0000-0000-00000000000d.parquet], [1/1/1/00000000-0000-0000-0000-00000000000e.parquet], [1/1/1/00000000-0000-0000-0000-00000000000f.parquet], [1/1/1/00000000-0000-0000-0000-000000000010.parquet], [1/1/1/00000000-0000-0000-0000-000000000011.parquet], [1/1/1/00000000-0000-0000-0000-000000000012.parquet], [1/1/1/00000000-0000-0000-0000-000000000013.parquet]]}, projection=[__chunk_order, f, tag, time], output_ordering=[tag@2 ASC, time@3 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/gapfill.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/gapfill.sql.expected
index c2e80ba884..3b33e02a8d 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/gapfill.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/gapfill.sql.expected
@@ -37,7 +37,7 @@
 |    |                 RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1    |
 |    |                   CoalesceBatchesExec: target_batch_size=8192    |
 |    |                     FilterExec: time@0 >= 957528000000000000 AND time@0 <= 957531540000000000    |
-|    |                       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000, projection=[time, user]    |
+|    |                       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[time, user], predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000    |
 |    |    |
 ----------
 -- SQL: SELECT date_bin_gapfill(interval '10 minute', time) as minute, count(cpu.user) from cpu where time between timestamp '2000-05-05T12:00:00Z' and timestamp '2000-05-05T12:59:00Z' group by minute;
@@ -130,7 +130,7 @@ Error during planning: gap-filling query is missing lower time bound
 |    |                 RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1    |
 |    |                   CoalesceBatchesExec: target_batch_size=8192    |
 |    |                     FilterExec: time@1 >= 957528000000000000 AND time@1 <= 957531540000000000    |
-|    |                       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000, output_ordering=[region@0 ASC, time@1 ASC], projection=[region, time, user]    |
+|    |                       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[region, time, user], output_ordering=[region@0 ASC, time@1 ASC], predicate=time@2 >= 957528000000000000 AND time@2 <= 957531540000000000, pruning_predicate=time_max@0 >= 957528000000000000 AND time_min@1 <= 957531540000000000    |
 |    |    |
 ----------
 -- SQL: SELECT region, date_bin_gapfill(interval '5 minute', time) as minute, locf(min(cpu.user)) from cpu where time between timestamp '2000-05-05T12:15:00Z' and timestamp '2000-05-05T12:59:00Z' group by region, minute;
diff --git a/influxdb_iox/tests/query_tests2/cases/in/issue_6112.influxql.expected b/influxdb_iox/tests/query_tests2/cases/in/issue_6112.influxql.expected
index b8310946e3..5764200f57 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/issue_6112.influxql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/issue_6112.influxql.expected
@@ -927,14 +927,14 @@ name: physical_plan
              RepartitionExec: partitioning=Hash([Column { name: "tag0", index: 0 }], 4), input_partitions=4
                RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
                  AggregateExec: mode=Partial, gby=[tag0@1 as tag0], aggr=[COUNT(m0.f64), SUM(m0.f64), STDDEV(m0.f64)]
-                   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[f64, tag0]
+                   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[f64, tag0]
        ProjectionExec: expr=[m1 as iox::measurement, 0 as time, tag0@0 as tag0, COUNT(m1.f64)@1 as count, SUM(m1.f64)@2 as sum, STDDEV(m1.f64)@3 as stddev]
          AggregateExec: mode=FinalPartitioned, gby=[tag0@0 as tag0], aggr=[COUNT(m1.f64), SUM(m1.f64), STDDEV(m1.f64)]
            CoalesceBatchesExec: target_batch_size=8192
              RepartitionExec: partitioning=Hash([Column { name: "tag0", index: 0 }], 4), input_partitions=4
                RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1
                  AggregateExec: mode=Partial, gby=[tag0@1 as tag0], aggr=[COUNT(m1.f64), SUM(m1.f64), STDDEV(m1.f64)], ordering_mode=FullyOrdered
-                   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, output_ordering=[tag0@1 ASC], projection=[f64, tag0]
+                   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[f64, tag0], output_ordering=[tag0@1 ASC]
 -- InfluxQL: SELECT COUNT(f64), SUM(f64), stddev(f64) FROM m0, m1 GROUP BY tag0;
 name: m0
 tags: tag0=val00
diff --git a/influxdb_iox/tests/query_tests2/cases/in/pushdown.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/pushdown.sql.expected
index 50282e8bd0..258af2512c 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/pushdown.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/pushdown.sql.expected
@@ -18,7 +18,7 @@
 | plan_type    | plan    |
 ----------
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town]    |
-| physical_plan    | ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+| physical_plan    | ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC]    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where count > 200;
@@ -41,7 +41,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.count > UInt64(200)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: count@0 > 200    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=count@0 > 200, pruning_predicate=count_max@0 > 200, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=count@0 > 200, pruning_predicate=count_max@0 > 200    |
 |    |    |
 ----------
 -- SQL: EXPLAIN SELECT * from restaurant where count > 200.0;
@@ -52,7 +52,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[CAST(restaurant.count AS Float64) > Float64(200)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: CAST(count@0 AS Float64) > 200    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=CAST(count@0 AS Float64) > 200, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=CAST(count@0 AS Float64) > 200    |
 |    |    |
 ----------
 -- SQL: EXPLAIN SELECT * from restaurant where system > 4.0;
@@ -63,7 +63,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.system > Float64(4)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: system@1 > 4    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=system@1 > 4, pruning_predicate=system_max@0 > 4, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=system@1 > 4, pruning_predicate=system_max@0 > 4    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where count > 200 and town != 'tewsbury';
@@ -85,7 +85,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.count > UInt64(200), restaurant.town != Dictionary(Int32, Utf8("tewsbury"))]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: count@0 > 200 AND town@3 != tewsbury    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=count@0 > 200 AND town@3 != tewsbury, pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2), output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=count@0 > 200 AND town@3 != tewsbury, pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2)    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where count > 200 and town != 'tewsbury' and (system =5 or town = 'lawrence');
@@ -106,7 +106,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.count > UInt64(200), restaurant.town != Dictionary(Int32, Utf8("tewsbury")), restaurant.system = Float64(5) OR restaurant.town = Dictionary(Int32, Utf8("lawrence"))]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence)    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence), pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND (system_min@3 <= 5 AND 5 <= system_max@4 OR town_min@1 <= lawrence AND lawrence <= town_max@2), output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence), pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND (system_min@3 <= 5 AND 5 <= system_max@4 OR town_min@1 <= lawrence AND lawrence <= town_max@2)    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where count > 200 and town != 'tewsbury' and (system =5 or town = 'lawrence') and count < 40000;
@@ -126,7 +126,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.count > UInt64(200), restaurant.town != Dictionary(Int32, Utf8("tewsbury")), restaurant.system = Float64(5) OR restaurant.town = Dictionary(Int32, Utf8("lawrence")), restaurant.count < UInt64(40000)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence) AND count@0 < 40000    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence) AND count@0 < 40000, pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND (system_min@3 <= 5 AND 5 <= system_max@4 OR town_min@1 <= lawrence AND lawrence <= town_max@2) AND count_min@5 < 40000, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=count@0 > 200 AND town@3 != tewsbury AND (system@1 = 5 OR town@3 = lawrence) AND count@0 < 40000, pruning_predicate=count_max@0 > 200 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND (system_min@3 <= 5 AND 5 <= system_max@4 OR town_min@1 <= lawrence AND lawrence <= town_max@2) AND count_min@5 < 40000    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where count > 200  and count < 40000;
@@ -148,7 +148,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.count > UInt64(200), restaurant.count < UInt64(40000)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: count@0 > 200 AND count@0 < 40000    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=count@0 > 200 AND count@0 < 40000, pruning_predicate=count_max@0 > 200 AND count_min@1 < 40000, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=count@0 > 200 AND count@0 < 40000, pruning_predicate=count_max@0 > 200 AND count_min@1 < 40000    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where system > 4.0 and system < 7.0;
@@ -171,7 +171,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.system > Float64(4), restaurant.system < Float64(7)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: system@1 > 4 AND system@1 < 7    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=system@1 > 4 AND system@1 < 7, pruning_predicate=system_max@0 > 4 AND system_min@1 < 7, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=system@1 > 4 AND system@1 < 7, pruning_predicate=system_max@0 > 4 AND system_min@1 < 7    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where system > 5.0 and system < 7.0;
@@ -191,7 +191,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.system > Float64(5), restaurant.system < Float64(7)]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: system@1 > 5 AND system@1 < 7    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=system@1 > 5 AND system@1 < 7, pruning_predicate=system_max@0 > 5 AND system_min@1 < 7, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=system@1 > 5 AND system@1 < 7, pruning_predicate=system_max@0 > 5 AND system_min@1 < 7    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where system > 5.0 and town != 'tewsbury' and 7.0 > system;
@@ -210,7 +210,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.system > Float64(5), restaurant.town != Dictionary(Int32, Utf8("tewsbury")), Float64(7) > restaurant.system]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: system@1 > 5 AND town@3 != tewsbury AND 7 > system@1    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=system@1 > 5 AND town@3 != tewsbury AND 7 > system@1, pruning_predicate=system_max@0 > 5 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND system_min@3 < 7, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=system@1 > 5 AND town@3 != tewsbury AND 7 > system@1, pruning_predicate=system_max@0 > 5 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND system_min@3 < 7    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where system > 5.0 and 'tewsbury' != town and system < 7.0 and (count = 632 or town = 'reading');
@@ -228,7 +228,7 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[restaurant.system > Float64(5), Dictionary(Int32, Utf8("tewsbury")) != restaurant.town, restaurant.system < Float64(7), restaurant.count = UInt64(632) OR restaurant.town = Dictionary(Int32, Utf8("reading"))]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: system@1 > 5 AND tewsbury != town@3 AND system@1 < 7 AND (count@0 = 632 OR town@3 = reading)    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=system@1 > 5 AND tewsbury != town@3 AND system@1 < 7 AND (count@0 = 632 OR town@3 = reading), pruning_predicate=system_max@0 > 5 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND system_min@3 < 7 AND (count_min@4 <= 632 AND 632 <= count_max@5 OR town_min@1 <= reading AND reading <= town_max@2), output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=system@1 > 5 AND tewsbury != town@3 AND system@1 < 7 AND (count@0 = 632 OR town@3 = reading), pruning_predicate=system_max@0 > 5 AND (town_min@1 != tewsbury OR tewsbury != town_max@2) AND system_min@3 < 7 AND (count_min@4 <= 632 AND 632 <= count_max@5 OR town_min@1 <= reading AND reading <= town_max@2)    |
 |    |    |
 ----------
 -- SQL: SELECT * from restaurant where 5.0 < system and town != 'tewsbury' and system < 7.0 and (count = 632 or town = 'reading') and time > to_timestamp('1970-01-01T00:00:00.000000130+00:00');
@@ -276,6 +276,6 @@
 | logical_plan    | TableScan: restaurant projection=[count, system, time, town], full_filters=[CAST(restaurant.town AS Utf8) AS restaurant.town LIKE Utf8("%foo%") OR CAST(restaurant.town AS Utf8) AS restaurant.town LIKE Utf8("%bar%") OR CAST(restaurant.town AS Utf8) AS restaurant.town LIKE Utf8("%baz%") AS influx_regex_match(restaurant.town,Utf8("foo|bar|baz")), CAST(restaurant.town AS Utf8) AS restaurant.town NOT LIKE Utf8("%one%") AND CAST(restaurant.town AS Utf8) AS restaurant.town NOT LIKE Utf8("%two%") AS influx_regex_not_match(restaurant.town,Utf8("one|two"))]    |
 | physical_plan    | CoalesceBatchesExec: target_batch_size=8192    |
 |    |   FilterExec: (CAST(town@3 AS Utf8) LIKE %foo% OR CAST(town@3 AS Utf8) LIKE %bar% OR CAST(town@3 AS Utf8) LIKE %baz%) AND CAST(town@3 AS Utf8) NOT LIKE %one% AND CAST(town@3 AS Utf8) NOT LIKE %two%    |
-|    |     ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=(CAST(town@3 AS Utf8) LIKE %foo% OR CAST(town@3 AS Utf8) LIKE %bar% OR CAST(town@3 AS Utf8) LIKE %baz%) AND CAST(town@3 AS Utf8) NOT LIKE %one% AND CAST(town@3 AS Utf8) NOT LIKE %two%, output_ordering=[town@3 ASC, time@2 ASC], projection=[count, system, time, town]    |
+|    |     ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[count, system, time, town], output_ordering=[town@3 ASC, time@2 ASC], predicate=(CAST(town@3 AS Utf8) LIKE %foo% OR CAST(town@3 AS Utf8) LIKE %bar% OR CAST(town@3 AS Utf8) LIKE %baz%) AND CAST(town@3 AS Utf8) NOT LIKE %one% AND CAST(town@3 AS Utf8) NOT LIKE %two%    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/retention.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/retention.sql.expected
index 4b372beec1..7df1d1a843 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/retention.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/retention.sql.expected
@@ -28,7 +28,7 @@
 |    |                   RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
 |    |           CoalesceBatchesExec: target_batch_size=8192    |
 |    |             FilterExec: time@3 < <REDACTED> OR time@3 > <REDACTED>    |
-|    |               ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=time@2 < <REDACTED> OR time@2 > <REDACTED>, pruning_predicate=time_min@0 < <REDACTED> OR time_max@1 > <REDACTED>, output_ordering=[host@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, host, load, time]    |
+|    |               ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, host, load, time], output_ordering=[host@1 ASC, time@3 ASC, __chunk_order@0 ASC], predicate=time@2 < <REDACTED> OR time@2 > <REDACTED>, pruning_predicate=time_min@0 < <REDACTED> OR time_max@1 > <REDACTED>    |
 |    |    |
 ----------
 -- SQL: SELECT * FROM cpu WHERE host != 'b' ORDER BY host,time;
@@ -59,6 +59,6 @@
 |    |                   RecordBatchesExec: batches_groups=1 batches=1 total_rows=2    |
 |    |           CoalesceBatchesExec: target_batch_size=8192    |
 |    |             FilterExec: host@1 != b AND (time@3 < <REDACTED> OR time@3 > <REDACTED>)    |
-|    |               ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, predicate=host@0 != b AND (time@2 < <REDACTED> OR time@2 > <REDACTED>), pruning_predicate=(host_min@0 != b OR b != host_max@1) AND (time_min@2 < <REDACTED> OR time_max@3 > <REDACTED>), output_ordering=[host@1 ASC, time@3 ASC, __chunk_order@0 ASC], projection=[__chunk_order, host, load, time]    |
+|    |               ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet], [1/1/1/00000000-0000-0000-0000-000000000001.parquet]]}, projection=[__chunk_order, host, load, time], output_ordering=[host@1 ASC, time@3 ASC, __chunk_order@0 ASC], predicate=host@0 != b AND (time@2 < <REDACTED> OR time@2 > <REDACTED>), pruning_predicate=(host_min@0 != b OR b != host_max@1) AND (time_min@2 < <REDACTED> OR time_max@3 > <REDACTED>)    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/influxdb_iox/tests/query_tests2/cases/in/several_chunks.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/several_chunks.sql.expected
index fcb26f6ae9..1568a7ee73 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/several_chunks.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/several_chunks.sql.expected
@@ -19,11 +19,11 @@
 ----------
 | logical_plan    | TableScan: h2o projection=[city, other_temp, state, temp, time]    |
 | physical_plan    | UnionExec    |
-|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[city@0 ASC, state@2 ASC, time@4 ASC], projection=[city, other_temp, state, temp, time]    |
+|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[city, other_temp, state, temp, time], output_ordering=[city@0 ASC, state@2 ASC, time@4 ASC]    |
 |    |   ProjectionExec: expr=[city@1 as city, other_temp@2 as other_temp, state@3 as state, temp@4 as temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@3 ASC,time@5 ASC]    |
 |    |       SortPreservingMergeExec: [city@1 ASC,state@3 ASC,time@5 ASC,__chunk_order@0 ASC]    |
-|    |         ParquetExec: limit=None, partitions={3 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, other_temp, state, temp, time]    |
+|    |         ParquetExec: file_groups={3 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, city, other_temp, state, temp, time], output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC]    |
 |    |   ProjectionExec: expr=[city@1 as city, other_temp@2 as other_temp, state@3 as state, temp@4 as temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@3 ASC,time@5 ASC]    |
 |    |       SortExec: expr=[city@1 ASC,state@3 ASC,time@5 ASC,__chunk_order@0 ASC]    |
@@ -51,11 +51,11 @@
 | logical_plan    | Projection: h2o.temp, h2o.other_temp, h2o.time    |
 |    |   TableScan: h2o projection=[other_temp, temp, time]    |
 | physical_plan    | UnionExec    |
-|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[temp, other_temp, time]    |
+|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[temp, other_temp, time]    |
 |    |   ProjectionExec: expr=[temp@3 as temp, other_temp@4 as other_temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@2 ASC,time@5 ASC]    |
 |    |       SortPreservingMergeExec: [city@1 ASC,state@2 ASC,time@5 ASC,__chunk_order@0 ASC]    |
-|    |         ParquetExec: limit=None, partitions={3 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, output_ordering=[city@1 ASC, state@2 ASC, time@5 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, temp, other_temp, time]    |
+|    |         ParquetExec: file_groups={3 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet], [1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[__chunk_order, city, state, temp, other_temp, time], output_ordering=[city@1 ASC, state@2 ASC, time@5 ASC, __chunk_order@0 ASC]    |
 |    |   ProjectionExec: expr=[temp@3 as temp, other_temp@4 as other_temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@2 ASC,time@5 ASC]    |
 |    |       SortExec: expr=[city@1 ASC,state@2 ASC,time@5 ASC,__chunk_order@0 ASC]    |
@@ -71,13 +71,13 @@
 | physical_plan    | UnionExec    |
 |    |   CoalesceBatchesExec: target_batch_size=8192    |
 |    |     FilterExec: time@4 >= 250    |
-|    |       ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, predicate=time@4 >= 250, pruning_predicate=time_max@0 >= 250, output_ordering=[city@0 ASC, state@2 ASC, time@4 ASC], projection=[city, other_temp, state, temp, time]    |
+|    |       ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[city, other_temp, state, temp, time], output_ordering=[city@0 ASC, state@2 ASC, time@4 ASC], predicate=time@4 >= 250, pruning_predicate=time_max@0 >= 250    |
 |    |   ProjectionExec: expr=[city@1 as city, other_temp@2 as other_temp, state@3 as state, temp@4 as temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@3 ASC,time@5 ASC]    |
 |    |       SortPreservingMergeExec: [city@1 ASC,state@3 ASC,time@5 ASC,__chunk_order@0 ASC]    |
 |    |         CoalesceBatchesExec: target_batch_size=8192    |
 |    |           FilterExec: time@5 >= 250    |
-|    |             ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, predicate=time@4 >= 250, pruning_predicate=time_max@0 >= 250, output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, other_temp, state, temp, time]    |
+|    |             ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet], [1/1/1/00000000-0000-0000-0000-000000000002.parquet]]}, projection=[__chunk_order, city, other_temp, state, temp, time], output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC], predicate=time@4 >= 250, pruning_predicate=time_max@0 >= 250    |
 |    |   ProjectionExec: expr=[city@1 as city, other_temp@2 as other_temp, state@3 as state, temp@4 as temp, time@5 as time]    |
 |    |     DeduplicateExec: [city@1 ASC,state@3 ASC,time@5 ASC]    |
 |    |       SortExec: expr=[city@1 ASC,state@3 ASC,time@5 ASC,__chunk_order@0 ASC]    |
diff --git a/influxdb_iox/tests/query_tests2/cases/in/two_chunks.sql.expected b/influxdb_iox/tests/query_tests2/cases/in/two_chunks.sql.expected
index 39dcbdfcd0..b9db74230c 100644
--- a/influxdb_iox/tests/query_tests2/cases/in/two_chunks.sql.expected
+++ b/influxdb_iox/tests/query_tests2/cases/in/two_chunks.sql.expected
@@ -20,7 +20,7 @@
 |    |       UnionExec    |
 |    |         SortExec: expr=[city@1 ASC,state@3 ASC,time@5 ASC,__chunk_order@0 ASC]    |
 |    |           RecordBatchesExec: batches_groups=1 batches=1 total_rows=1    |
-|    |         ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, other_temp, state, temp, time]    |
+|    |         ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, city, other_temp, state, temp, time], output_ordering=[city@1 ASC, state@3 ASC, time@5 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
 -- SQL: select temp, other_temp, time from h2o;
@@ -44,6 +44,6 @@
 |    |       UnionExec    |
 |    |         SortExec: expr=[city@1 ASC,state@2 ASC,time@5 ASC,__chunk_order@0 ASC]    |
 |    |           RecordBatchesExec: batches_groups=1 batches=1 total_rows=1    |
-|    |         ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[city@1 ASC, state@2 ASC, time@5 ASC, __chunk_order@0 ASC], projection=[__chunk_order, city, state, temp, other_temp, time]    |
+|    |         ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[__chunk_order, city, state, temp, other_temp, time], output_ordering=[city@1 ASC, state@2 ASC, time@5 ASC, __chunk_order@0 ASC]    |
 |    |    |
 ----------
\ No newline at end of file
diff --git a/iox_query/src/physical_optimizer/combine_chunks.rs b/iox_query/src/physical_optimizer/combine_chunks.rs
index 00b6d7377e..971f986e8c 100644
--- a/iox_query/src/physical_optimizer/combine_chunks.rs
+++ b/iox_query/src/physical_optimizer/combine_chunks.rs
@@ -115,15 +115,15 @@ mod tests {
           - " UnionExec"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, projection=[]"
+          - "     ParquetExec: file_groups={1 group: [[2.parquet]]}"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[4.parquet], [5.parquet]]}, projection=[]"
+          - "     ParquetExec: file_groups={2 groups: [[4.parquet], [5.parquet]]}"
         output:
           Ok:
             - " UnionExec"
             - "   RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-            - "   ParquetExec: limit=None, partitions={2 groups: [[2.parquet, 5.parquet], [4.parquet]]}, projection=[]"
+            - "   ParquetExec: file_groups={2 groups: [[2.parquet, 5.parquet], [4.parquet]]}"
         "###
         );
     }
@@ -153,19 +153,19 @@ mod tests {
         input:
           - " UnionExec"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}"
           - "   FilterExec: false"
           - "     UnionExec"
-          - "       ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[]"
+          - "       ParquetExec: file_groups={1 group: [[1.parquet]]}"
         output:
           Ok:
             - " UnionExec"
-            - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [1.parquet]]}, projection=[]"
+            - "   ParquetExec: file_groups={2 groups: [[1.parquet], [1.parquet]]}"
             - "   FilterExec: false"
             - "     UnionExec"
-            - "       ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[]"
+            - "       ParquetExec: file_groups={1 group: [[1.parquet]]}"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/dedup/dedup_null_columns.rs b/iox_query/src/physical_optimizer/dedup/dedup_null_columns.rs
index 11107ad82b..cc13bc06a0 100644
--- a/iox_query/src/physical_optimizer/dedup/dedup_null_columns.rs
+++ b/iox_query/src/physical_optimizer/dedup/dedup_null_columns.rs
@@ -140,12 +140,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -163,12 +163,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
     }
@@ -195,12 +195,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,zzz@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@0 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time]"
         "###
         );
     }
@@ -236,12 +236,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,tag3@2 ASC,tag4@3 ASC,time@4 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, tag4, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, tag4, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,tag3@2 ASC,time@4 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, tag4, time]"
+            - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, tag4, time]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/dedup/dedup_sort_order.rs b/iox_query/src/physical_optimizer/dedup/dedup_sort_order.rs
index da70c6f8bd..a177b1c144 100644
--- a/iox_query/src/physical_optimizer/dedup/dedup_sort_order.rs
+++ b/iox_query/src/physical_optimizer/dedup/dedup_sort_order.rs
@@ -212,12 +212,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -241,12 +241,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC], projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time], output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@2 ASC,tag1@1 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC], projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time], output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC]"
         "###
         );
     }
@@ -270,12 +270,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC, __chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC, __chunk_order@4 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@2 ASC,tag1@1 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC, __chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC, __chunk_order@4 ASC]"
         "###
         );
     }
@@ -299,12 +299,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[time@3 ASC, tag1@1 ASC, tag2@2 ASC], projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time], output_ordering=[time@3 ASC, tag1@1 ASC, tag2@2 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [time@3 ASC,tag1@1 ASC,tag2@2 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[time@3 ASC, tag1@1 ASC, tag2@2 ASC], projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time], output_ordering=[time@3 ASC, tag1@1 ASC, tag2@2 ASC]"
         "###
         );
     }
@@ -328,12 +328,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,zzz@4 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC], projection=[field, tag1, tag2, time, zzz]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, zzz], output_ordering=[tag2@2 ASC, tag1@1 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@2 ASC,tag1@1 ASC,zzz@4 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, zzz]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[field, tag1, tag2, time, zzz]"
         "###
         );
     }
@@ -361,12 +361,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,zzz@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag1@0 ASC], projection=[tag1, tag2, zzz, time]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time], output_ordering=[tag1@0 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,zzz@2 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, output_ordering=[tag1@0 ASC, tag2@1 ASC, zzz@2 ASC, time@3 ASC], projection=[tag1, tag2, zzz, time]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet]]}, projection=[tag1, tag2, zzz, time], output_ordering=[tag1@0 ASC, tag2@1 ASC, zzz@2 ASC, time@3 ASC]"
         "###
         );
     }
@@ -397,12 +397,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -432,12 +432,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC], projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time], output_ordering=[tag2@2 ASC, tag1@1 ASC, time@3 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@2 ASC,tag1@1 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -462,12 +462,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@2 ASC,tag1@1 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -519,12 +519,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,tag3@2 ASC,time@3 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@1 ASC,tag3@2 ASC,tag1@0 ASC,time@3 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, output_ordering=[tag2@1 ASC, tag3@2 ASC, tag1@0 ASC, time@3 ASC], projection=[tag1, tag2, tag3, time]"
+            - "     ParquetExec: file_groups={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, projection=[tag1, tag2, tag3, time], output_ordering=[tag2@1 ASC, tag3@2 ASC, tag1@0 ASC, time@3 ASC]"
         "###
         );
     }
@@ -570,12 +570,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,time@2 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC], projection=[tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, projection=[tag1, tag2, time], output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@1 ASC,tag1@0 ASC,time@2 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC], projection=[tag1, tag2, time]"
+            - "     ParquetExec: file_groups={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, projection=[tag1, tag2, time], output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC]"
         "###
         );
     }
@@ -623,12 +623,12 @@ mod tests {
         input:
           - " DeduplicateExec: [tag1@0 ASC,tag2@1 ASC,time@2 ASC]"
           - "   UnionExec"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC], projection=[tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[1.parquet, 3.parquet], [2.parquet]]}, projection=[tag1, tag2, time], output_ordering=[tag2@1 ASC, tag1@0 ASC, time@2 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [tag2@1 ASC,tag1@0 ASC,time@2 ASC]"
             - "   UnionExec"
-            - "     ParquetExec: limit=None, partitions={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, projection=[tag1, tag2, time]"
+            - "     ParquetExec: file_groups={3 groups: [[1.parquet], [3.parquet], [2.parquet]]}, projection=[tag1, tag2, time]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/dedup/partition_split.rs b/iox_query/src/physical_optimizer/dedup/partition_split.rs
index bc4c3759ac..ea293c109a 100644
--- a/iox_query/src/physical_optimizer/dedup/partition_split.rs
+++ b/iox_query/src/physical_optimizer/dedup/partition_split.rs
@@ -157,13 +157,13 @@ mod tests {
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
             - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-            - "     ParquetExec: limit=None, partitions={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -190,18 +190,18 @@ mod tests {
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[3.parquet, 5.parquet], [4.parquet, 6.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[3.parquet, 5.parquet], [4.parquet, 6.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " UnionExec"
             - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "     UnionExec"
             - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-            - "       ParquetExec: limit=None, partitions={2 groups: [[3.parquet, 6.parquet], [5.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "       ParquetExec: file_groups={2 groups: [[3.parquet, 6.parquet], [5.parquet]]}, projection=[field, tag1, tag2, time]"
             - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "     UnionExec"
             - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-            - "       ParquetExec: limit=None, partitions={1 group: [[4.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "       ParquetExec: file_groups={1 group: [[4.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/dedup/time_split.rs b/iox_query/src/physical_optimizer/dedup/time_split.rs
index 1ab3cf1e40..cbf71670cc 100644
--- a/iox_query/src/physical_optimizer/dedup/time_split.rs
+++ b/iox_query/src/physical_optimizer/dedup/time_split.rs
@@ -146,13 +146,13 @@ mod tests {
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "   UnionExec"
             - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-            - "     ParquetExec: limit=None, partitions={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "     ParquetExec: file_groups={1 group: [[3.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
@@ -187,18 +187,18 @@ mod tests {
           - " DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
           - "   UnionExec"
           - "     RecordBatchesExec: batches_groups=2 batches=0 total_rows=0"
-          - "     ParquetExec: limit=None, partitions={2 groups: [[3.parquet, 5.parquet], [4.parquet, 6.parquet]]}, projection=[field, tag1, tag2, time]"
+          - "     ParquetExec: file_groups={2 groups: [[3.parquet, 5.parquet], [4.parquet, 6.parquet]]}, projection=[field, tag1, tag2, time]"
         output:
           Ok:
             - " UnionExec"
             - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "     UnionExec"
             - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-            - "       ParquetExec: limit=None, partitions={2 groups: [[6.parquet, 5.parquet], [3.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "       ParquetExec: file_groups={2 groups: [[6.parquet, 5.parquet], [3.parquet]]}, projection=[field, tag1, tag2, time]"
             - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
             - "     UnionExec"
             - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-            - "       ParquetExec: limit=None, partitions={1 group: [[4.parquet]]}, projection=[field, tag1, tag2, time]"
+            - "       ParquetExec: file_groups={1 group: [[4.parquet]]}, projection=[field, tag1, tag2, time]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/predicate_pushdown.rs b/iox_query/src/physical_optimizer/predicate_pushdown.rs
index 2da2ec9869..d55eea9ffa 100644
--- a/iox_query/src/physical_optimizer/predicate_pushdown.rs
+++ b/iox_query/src/physical_optimizer/predicate_pushdown.rs
@@ -335,11 +335,11 @@ mod tests {
         ---
         input:
           - " FilterExec: tag1@0 = field@2"
-          - "   ParquetExec: limit=None, partitions={0 groups: []}, predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1, projection=[tag1, tag2, field]"
+          - "   ParquetExec: file_groups={0 groups: []}, projection=[tag1, tag2, field], predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1"
         output:
           Ok:
             - " FilterExec: tag1@0 = field@2"
-            - "   ParquetExec: limit=None, partitions={0 groups: []}, predicate=tag1@0 = foo AND tag1@0 = field@2, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1, projection=[tag1, tag2, field]"
+            - "   ParquetExec: file_groups={0 groups: []}, projection=[tag1, tag2, field], predicate=tag1@0 = foo AND tag1@0 = field@2, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/projection_pushdown.rs b/iox_query/src/physical_optimizer/projection_pushdown.rs
index 002c83b3a8..9e608eceee 100644
--- a/iox_query/src/physical_optimizer/projection_pushdown.rs
+++ b/iox_query/src/physical_optimizer/projection_pushdown.rs
@@ -764,10 +764,10 @@ mod tests {
         ---
         input:
           - " ProjectionExec: expr=[tag2@2 as tag2, tag3@1 as tag3]"
-          - "   ParquetExec: limit=None, partitions={0 groups: []}, predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1, output_ordering=[tag3@1 ASC, field@0 ASC, tag2@2 ASC], projection=[field, tag3, tag2]"
+          - "   ParquetExec: file_groups={0 groups: []}, projection=[field, tag3, tag2], output_ordering=[tag3@1 ASC, field@0 ASC, tag2@2 ASC], predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1"
         output:
           Ok:
-            - " ParquetExec: limit=None, partitions={0 groups: []}, predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1, output_ordering=[tag3@1 ASC], projection=[tag2, tag3]"
+            - " ParquetExec: file_groups={0 groups: []}, projection=[tag2, tag3], output_ordering=[tag3@1 ASC], predicate=tag1@0 = foo, pruning_predicate=tag1_min@0 <= foo AND foo <= tag1_max@1"
         "###
         );
 
@@ -1369,7 +1369,7 @@ mod tests {
           - "   FilterExec: tag2@1 = foo"
           - "     DeduplicateExec: [tag1@0 ASC,tag2@1 ASC]"
           - "       UnionExec"
-          - "         ParquetExec: limit=None, partitions={0 groups: []}, projection=[tag1, tag2, field1, field2]"
+          - "         ParquetExec: file_groups={0 groups: []}, projection=[tag1, tag2, field1, field2]"
         output:
           Ok:
             - " ProjectionExec: expr=[field1@0 as field1]"
@@ -1377,7 +1377,7 @@ mod tests {
             - "     ProjectionExec: expr=[field1@0 as field1, tag2@2 as tag2]"
             - "       DeduplicateExec: [tag1@1 ASC,tag2@2 ASC]"
             - "         UnionExec"
-            - "           ParquetExec: limit=None, partitions={0 groups: []}, projection=[field1, tag1, tag2]"
+            - "           ParquetExec: file_groups={0 groups: []}, projection=[field1, tag1, tag2]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/sort/parquet_sortness.rs b/iox_query/src/physical_optimizer/sort/parquet_sortness.rs
index e500237094..1bc70cd21c 100644
--- a/iox_query/src/physical_optimizer/sort/parquet_sortness.rs
+++ b/iox_query/src/physical_optimizer/sort/parquet_sortness.rs
@@ -207,11 +207,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         "###
         );
     }
@@ -243,11 +243,11 @@ mod tests {
         ---
         input:
           - " DeduplicateExec: [col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC, __chunk_order@3 ASC], projection=[col1, col2, col3, __chunk_order]"
+          - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3, __chunk_order], output_ordering=[col2@1 ASC, col1@0 ASC, __chunk_order@3 ASC]"
         output:
           Ok:
             - " DeduplicateExec: [col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC, __chunk_order@3 ASC], projection=[col1, col2, col3, __chunk_order]"
+            - "   ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[col1, col2, col3, __chunk_order], output_ordering=[col2@1 ASC, col1@0 ASC, __chunk_order@3 ASC]"
         "###
         );
     }
@@ -283,11 +283,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet, 2.parquet], [3.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={2 groups: [[1.parquet, 2.parquet], [3.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={3 groups: [[1.parquet], [2.parquet], [3.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={3 groups: [[1.parquet], [2.parquet], [3.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         "###
         );
 
@@ -320,11 +320,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={2 groups: [[1.parquet], [2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={2 groups: [[1.parquet], [2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         "###
         );
     }
@@ -355,11 +355,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col1@0 ASC, col2@1 ASC], projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col1@0 ASC, col2@1 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col1@0 ASC, col2@1 ASC], projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col1@0 ASC, col2@1 ASC]"
         "###
         );
     }
@@ -390,11 +390,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3]"
         "###
         );
     }
@@ -430,11 +430,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet, 3.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+          - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet, 3.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet, 3.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+            - "   ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet, 3.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         "###
         );
     }
@@ -484,10 +484,10 @@ mod tests {
             @r###"
         ---
         input:
-          - " ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+          - " ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         output:
           Ok:
-            - " ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col2@1 ASC, col1@0 ASC], projection=[col1, col2, col3]"
+            - " ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col2@1 ASC, col1@0 ASC]"
         "###
         );
     }
@@ -519,12 +519,12 @@ mod tests {
         input:
           - " SortExec: fetch=42, expr=[col1@0 ASC,col2@1 ASC]"
           - "   SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-          - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col1@0 ASC, col2@1 ASC], projection=[col1, col2, col3]"
+          - "     ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col1@0 ASC, col2@1 ASC]"
         output:
           Ok:
             - " SortExec: fetch=42, expr=[col1@0 ASC,col2@1 ASC]"
             - "   SortExec: fetch=42, expr=[col2@1 ASC,col1@0 ASC]"
-            - "     ParquetExec: limit=None, partitions={1 group: [[1.parquet, 2.parquet]]}, output_ordering=[col1@0 ASC, col2@1 ASC], projection=[col1, col2, col3]"
+            - "     ParquetExec: file_groups={1 group: [[1.parquet, 2.parquet]]}, projection=[col1, col2, col3], output_ordering=[col1@0 ASC, col2@1 ASC]"
         "###
         );
     }
diff --git a/iox_query/src/physical_optimizer/sort/redundant_sort.rs b/iox_query/src/physical_optimizer/sort/redundant_sort.rs
index 32f380cb0a..9638748c00 100644
--- a/iox_query/src/physical_optimizer/sort/redundant_sort.rs
+++ b/iox_query/src/physical_optimizer/sort/redundant_sort.rs
@@ -85,11 +85,11 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=10, expr=[col@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={0 groups: []}, projection=[col]"
+          - "   ParquetExec: file_groups={0 groups: []}, projection=[col]"
         output:
           Ok:
             - " SortExec: fetch=10, expr=[col@0 ASC]"
-            - "   ParquetExec: limit=None, partitions={0 groups: []}, projection=[col]"
+            - "   ParquetExec: file_groups={0 groups: []}, projection=[col]"
         "###
         );
     }
@@ -121,10 +121,10 @@ mod tests {
         ---
         input:
           - " SortExec: fetch=10, expr=[col@0 ASC]"
-          - "   ParquetExec: limit=None, partitions={0 groups: []}, output_ordering=[col@0 ASC], projection=[col]"
+          - "   ParquetExec: file_groups={0 groups: []}, projection=[col], output_ordering=[col@0 ASC]"
         output:
           Ok:
-            - " ParquetExec: limit=None, partitions={0 groups: []}, output_ordering=[col@0 ASC], projection=[col]"
+            - " ParquetExec: file_groups={0 groups: []}, projection=[col], output_ordering=[col@0 ASC]"
         "###
         );
     }
diff --git a/iox_query/src/provider.rs b/iox_query/src/provider.rs
index 63e99b4d1d..7b398ac2b4 100644
--- a/iox_query/src/provider.rs
+++ b/iox_query/src/provider.rs
@@ -410,7 +410,7 @@ mod test {
         - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "     UnionExec"
         - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "       ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "       ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -427,7 +427,7 @@ mod test {
         - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "     UnionExec"
         - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "       ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "       ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -448,7 +448,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -462,7 +462,7 @@ mod test {
         - "   DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "     UnionExec"
         - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "       ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "       ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
     }
@@ -508,7 +508,7 @@ mod test {
         - " ProjectionExec: expr=[field@0 as field, tag1@1 as tag1, tag2@2 as tag2, time@3 as time]"
         - "   UnionExec"
         - "     RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "     ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "     ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -524,7 +524,7 @@ mod test {
         - " ProjectionExec: expr=[tag1@1 as tag1, time@3 as time]"
         - "   UnionExec"
         - "     RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "     ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "     ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -553,7 +553,7 @@ mod test {
         - "   FilterExec: false AND tag1@1 = CAST(foo AS Dictionary(Int32, Utf8))"
         - "     UnionExec"
         - "       RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "       ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "       ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -566,7 +566,7 @@ mod test {
         - " ProjectionExec: expr=[field@0 as field, tag1@1 as tag1, tag2@2 as tag2, time@3 as time]"
         - "   UnionExec"
         - "     RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "     ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "     ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
     }
@@ -614,7 +614,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -632,7 +632,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -654,7 +654,7 @@ mod test {
         - "       DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "         UnionExec"
         - "           RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "           ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "           ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -669,7 +669,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
     }
@@ -719,7 +719,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -737,7 +737,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -758,7 +758,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
 
@@ -773,7 +773,7 @@ mod test {
         - "     DeduplicateExec: [tag1@1 ASC,tag2@2 ASC,time@3 ASC]"
         - "       UnionExec"
         - "         RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "         ParquetExec: limit=None, partitions={1 group: [[2.parquet]]}, output_ordering=[__chunk_order@4 ASC], projection=[field, tag1, tag2, time, __chunk_order]"
+        - "         ParquetExec: file_groups={1 group: [[2.parquet]]}, projection=[field, tag1, tag2, time, __chunk_order], output_ordering=[__chunk_order@4 ASC]"
         "###
         );
     }
diff --git a/iox_query/src/provider/physical.rs b/iox_query/src/provider/physical.rs
index 3f085baac7..27b6125415 100644
--- a/iox_query/src/provider/physical.rs
+++ b/iox_query/src/provider/physical.rs
@@ -478,7 +478,7 @@ mod tests {
             @r###"
         ---
         - " UnionExec"
-        - "   ParquetExec: limit=None, partitions={1 group: [[0.parquet]]}, projection=[]"
+        - "   ParquetExec: file_groups={1 group: [[0.parquet]]}"
         "###
         );
     }
@@ -500,7 +500,7 @@ mod tests {
             @r###"
         ---
         - " UnionExec"
-        - "   ParquetExec: limit=None, partitions={2 groups: [[0.parquet, 2.parquet], [1.parquet]]}, projection=[]"
+        - "   ParquetExec: file_groups={2 groups: [[0.parquet, 2.parquet], [1.parquet]]}"
         "###
         );
     }
@@ -521,8 +521,8 @@ mod tests {
             @r###"
         ---
         - " UnionExec"
-        - "   ParquetExec: limit=None, partitions={1 group: [[0.parquet]]}, projection=[]"
-        - "   ParquetExec: limit=None, partitions={1 group: [[1.parquet]]}, projection=[]"
+        - "   ParquetExec: file_groups={1 group: [[0.parquet]]}"
+        - "   ParquetExec: file_groups={1 group: [[1.parquet]]}"
         "###
         );
     }
@@ -540,7 +540,7 @@ mod tests {
         ---
         - " UnionExec"
         - "   RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "   ParquetExec: limit=None, partitions={1 group: [[0.parquet]]}, projection=[]"
+        - "   ParquetExec: file_groups={1 group: [[0.parquet]]}"
         "###
         );
     }
@@ -569,7 +569,7 @@ mod tests {
         ---
         - " UnionExec"
         - "   RecordBatchesExec: batches_groups=1 batches=0 total_rows=0"
-        - "   ParquetExec: limit=None, partitions={1 group: [[0.parquet]]}, output_ordering=[__chunk_order@1 ASC], projection=[tag, __chunk_order]"
+        - "   ParquetExec: file_groups={1 group: [[0.parquet]]}, projection=[tag, __chunk_order], output_ordering=[__chunk_order@1 ASC]"
         "###
         );
     }
diff --git a/querier/src/namespace/query_access.rs b/querier/src/namespace/query_access.rs
index c6b1fd4d85..4335451afe 100644
--- a/querier/src/namespace/query_access.rs
+++ b/querier/src/namespace/query_access.rs
@@ -484,7 +484,7 @@ mod tests {
         - "| plan_type    | plan    |"
         - "----------"
         - "| logical_plan    | TableScan: cpu projection=[foo, host, load, time]    |"
-        - "| physical_plan    | ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet]]}, projection=[foo, host, load, time]    |"
+        - "| physical_plan    | ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet, 1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet, 1/1/1/00000000-0000-0000-0000-000000000004.parquet]]}, projection=[foo, host, load, time]    |"
         - "|    |    |"
         - "----------"
         "###
@@ -502,7 +502,7 @@ mod tests {
         - "| logical_plan    | Sort: mem.host ASC NULLS LAST, mem.time ASC NULLS LAST    |"
         - "|    |   TableScan: mem projection=[host, perc, time]    |"
         - "| physical_plan    | SortExec: expr=[host@0 ASC NULLS LAST,time@2 ASC NULLS LAST]    |"
-        - "|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[host@0 ASC, time@2 ASC], projection=[host, perc, time]    |"
+        - "|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[host, perc, time], output_ordering=[host@0 ASC, time@2 ASC]    |"
         - "|    |    |"
         - "----------"
         "###
@@ -552,12 +552,12 @@ mod tests {
         - "----------"
         - "| logical_plan    | TableScan: cpu projection=[foo, host, load, time]    |"
         - "| physical_plan    | UnionExec    |"
-        - "|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, output_ordering=[host@1 ASC, time@3 ASC], projection=[foo, host, load, time]    |"
-        - "|    |   ParquetExec: limit=None, partitions={1 group: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[foo, host, load, time]    |"
+        - "|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000000.parquet]]}, projection=[foo, host, load, time], output_ordering=[host@1 ASC, time@3 ASC]    |"
+        - "|    |   ParquetExec: file_groups={1 group: [[1/1/1/00000000-0000-0000-0000-000000000001.parquet, 1/1/1/00000000-0000-0000-0000-000000000002.parquet, 1/1/1/00000000-0000-0000-0000-000000000003.parquet]]}, projection=[foo, host, load, time]    |"
         - "|    |   ProjectionExec: expr=[foo@1 as foo, host@2 as host, load@3 as load, time@4 as time]    |"
         - "|    |     DeduplicateExec: [host@2 ASC,time@4 ASC]    |"
         - "|    |       SortPreservingMergeExec: [host@2 ASC,time@4 ASC,__chunk_order@0 ASC]    |"
-        - "|    |         ParquetExec: limit=None, partitions={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000004.parquet], [1/1/1/00000000-0000-0000-0000-000000000005.parquet]]}, output_ordering=[host@2 ASC, time@4 ASC, __chunk_order@0 ASC], projection=[__chunk_order, foo, host, load, time]    |"
+        - "|    |         ParquetExec: file_groups={2 groups: [[1/1/1/00000000-0000-0000-0000-000000000004.parquet], [1/1/1/00000000-0000-0000-0000-000000000005.parquet]]}, projection=[__chunk_order, foo, host, load, time], output_ordering=[host@2 ASC, time@4 ASC, __chunk_order@0 ASC]    |"
         - "|    |    |"
         - "----------"
         "###
diff --git a/workspace-hack/Cargo.toml b/workspace-hack/Cargo.toml
index 763595b17e..0d07e07fff 100644
--- a/workspace-hack/Cargo.toml
+++ b/workspace-hack/Cargo.toml
@@ -30,9 +30,9 @@ bytes = { version = "1" }
 chrono = { version = "0.4", default-features = false, features = ["alloc", "clock", "serde"] }
 crossbeam-utils = { version = "0.8" }
 crypto-common = { version = "0.1", default-features = false, features = ["std"] }
-datafusion = { git = "https://github.com/apache/arrow-datafusion.git", rev = "2787e7a36a6be83d91201df20827d3695f933300" }
-datafusion-optimizer = { git = "https://github.com/apache/arrow-datafusion.git", rev = "2787e7a36a6be83d91201df20827d3695f933300", default-features = false, features = ["crypto_expressions", "regex_expressions", "unicode_expressions"] }
-datafusion-physical-expr = { git = "https://github.com/apache/arrow-datafusion.git", rev = "2787e7a36a6be83d91201df20827d3695f933300", default-features = false, features = ["crypto_expressions", "regex_expressions", "unicode_expressions"] }
+datafusion = { git = "https://github.com/apache/arrow-datafusion.git", rev = "06e9f53637f20dd91bef43b74942ec36c38c22d5" }
+datafusion-optimizer = { git = "https://github.com/apache/arrow-datafusion.git", rev = "06e9f53637f20dd91bef43b74942ec36c38c22d5", default-features = false, features = ["crypto_expressions", "regex_expressions", "unicode_expressions"] }
+datafusion-physical-expr = { git = "https://github.com/apache/arrow-datafusion.git", rev = "06e9f53637f20dd91bef43b74942ec36c38c22d5", default-features = false, features = ["crypto_expressions", "regex_expressions", "unicode_expressions"] }
 digest = { version = "0.10", features = ["mac", "std"] }
 either = { version = "1" }
 fixedbitset = { version = "0.4" }