diff --git a/kernel/kernel-api/src/main/java/io/delta/kernel/internal/ScanImpl.java b/kernel/kernel-api/src/main/java/io/delta/kernel/internal/ScanImpl.java index 99efa88be7a..bd6e59e2ec5 100644 --- a/kernel/kernel-api/src/main/java/io/delta/kernel/internal/ScanImpl.java +++ b/kernel/kernel-api/src/main/java/io/delta/kernel/internal/ScanImpl.java @@ -101,6 +101,17 @@ public ScanImpl( .filter(field -> partitionColNames.contains(field.getName().toLowerCase(Locale.ROOT))) .collect(toMap(field -> field.getName().toLowerCase(Locale.ROOT), identity())); }; + if (metadata.getConfiguration().containsKey("delta.partitionFilterRequired")) { + if ("true".equalsIgnoreCase(metadata.getConfiguration().get("delta.partitionFilterRequired"))) { + Optional partitionColumnPredicate = partitionAndDataFilters.map( + padf -> padf._1); + if (!partitionColumnPredicate.isPresent() + || AlwaysTrue.ALWAYS_TRUE.equals(partitionColumnPredicate.get())) { + throw new IllegalArgumentException("Cannot query over table without a filter" + + " that can be used for partition elimination"); + } + } + } this.snapshotReport = snapshotReport; }