From c9f508e460318565531ab223c4043c4986b40d9f Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Tue, 26 Sep 2023 07:53:56 +0900 Subject: [PATCH] Restore predicate pushdown of metadata field in CheckpointEntryIterator --- .../checkpoint/CheckpointEntryIterator.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointEntryIterator.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointEntryIterator.java index 131aa96789a1..ca064005718d 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointEntryIterator.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/transactionlog/checkpoint/CheckpointEntryIterator.java @@ -72,6 +72,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.google.common.collect.Iterables.getOnlyElement; +import static com.google.common.collect.MoreCollectors.onlyElement; import static io.trino.plugin.deltalake.DeltaLakeColumnType.REGULAR; import static io.trino.plugin.deltalake.DeltaLakeErrorCode.DELTA_LAKE_BAD_DATA; import static io.trino.plugin.deltalake.DeltaLakeErrorCode.DELTA_LAKE_INVALID_SCHEMA; @@ -182,9 +183,20 @@ public CheckpointEntryIterator( .map(field -> buildColumnHandle(field, checkpointSchemaManager, this.metadataEntry, this.protocolEntry).toHiveColumnHandle()) .collect(toImmutableList()); - TupleDomain tupleDomain = columns.size() > 1 ? - TupleDomain.all() : - buildTupleDomainColumnHandle(getOnlyElement(fields), getOnlyElement(columns)); + TupleDomain tupleDomain; + if (columns.size() == 1) { + tupleDomain = buildTupleDomainColumnHandle(getOnlyElement(fields), getOnlyElement(columns)); + } + else if (columns.size() == 2 && fields.contains(METADATA) && fields.contains(PROTOCOL)) { + // TODO https://github.com/trinodb/trino/issues/19156 Add support for predicate pushdown for both metadata and protocol in CheckpointEntryIterator + HiveColumnHandle metadata = columns.stream() + .filter(column -> column.getBaseColumnName().equals("metadata")) + .collect(onlyElement()); + tupleDomain = buildTupleDomainColumnHandle(METADATA, metadata); + } + else { + tupleDomain = TupleDomain.all(); + } ReaderPageSource pageSource = ParquetPageSourceFactory.createPageSource( checkpoint,