Skip to content

Commit 5684ac1

Browse files
committed
Filter manifests with the data filter.
1 parent 661e10f commit 5684ac1

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

core/src/main/java/com/netflix/iceberg/ManifestGroup.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616

1717
package com.netflix.iceberg;
1818

19+
import com.google.common.cache.CacheBuilder;
20+
import com.google.common.cache.CacheLoader;
21+
import com.google.common.cache.LoadingCache;
1922
import com.google.common.collect.ImmutableList;
2023
import com.google.common.collect.Iterables;
2124
import com.google.common.collect.Lists;
2225
import com.google.common.collect.Sets;
2326
import com.netflix.iceberg.expressions.Evaluator;
2427
import com.netflix.iceberg.expressions.Expression;
2528
import com.netflix.iceberg.expressions.Expressions;
29+
import com.netflix.iceberg.expressions.InclusiveManifestEvaluator;
2630
import com.netflix.iceberg.io.CloseableIterable;
2731
import com.netflix.iceberg.types.Types;
2832
import java.io.Closeable;
@@ -40,6 +44,16 @@ class ManifestGroup {
4044
private final boolean ignoreDeleted;
4145
private final List<String> columns;
4246

47+
private final LoadingCache<Integer, InclusiveManifestEvaluator> EVAL_CACHE = CacheBuilder
48+
.newBuilder()
49+
.build(new CacheLoader<Integer, InclusiveManifestEvaluator>() {
50+
@Override
51+
public InclusiveManifestEvaluator load(Integer specId) {
52+
PartitionSpec spec = ops.current().spec(specId);
53+
return new InclusiveManifestEvaluator(spec, dataFilter);
54+
}
55+
});
56+
4357
ManifestGroup(TableOperations ops, Iterable<ManifestFile> manifests) {
4458
this(ops, Sets.newHashSet(manifests), Expressions.alwaysTrue(), Expressions.alwaysTrue(),
4559
false, ImmutableList.of("*"));
@@ -91,7 +105,8 @@ public CloseableIterable<ManifestEntry> entries() {
91105
Evaluator evaluator = new Evaluator(DataFile.getType(EMPTY_STRUCT), fileFilter);
92106
List<Closeable> toClose = Lists.newArrayList();
93107

94-
Iterable<ManifestFile> matchingManifests = manifests;
108+
Iterable<ManifestFile> matchingManifests = Iterables.filter(manifests,
109+
manifest -> EVAL_CACHE.getUnchecked(manifest.partitionSpecId()).eval(manifest));
95110

96111
if (ignoreDeleted) {
97112
// remove any manifests that don't have any existing or added files. if either the added or

0 commit comments

Comments
 (0)