{"record":{"id":"e29a1f6e29689a29","repo":"apache/beam","slug":"s-does-not-support-predicate-project-push-down-yet-non-empty","errorCode":null,"errorMessage":"%s does not support predicate/project push-down, yet non-empty %s is passed.","messagePattern":"(.+?) does not support predicate/project push-down, yet non-empty (.+?) is passed\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/delta/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/delta/DeltaTable.java","lineNumber":155,"sourceCode":"    }\n  }\n\n  @Override\n  public PCollection<Row> buildIOReader(PBegin begin) {\n    return begin\n        .apply(Managed.read(Managed.DELTA_LAKE).withConfig(getBaseConfig()))\n        .getSinglePCollection();\n  }\n\n  @Override\n  public PCollection<Row> buildIOReader(\n      PBegin begin, BeamSqlTableFilter filters, List<String> fieldNames) {\n    // TODO: Support predicate pushdown and column pruning when supported by DeltaIO\n    // / Managed Delta\n    // Lake source.\n    String error = \"%s does not support predicate/project push-down, yet non-empty %s is passed.\";\n    if (!(filters instanceof DefaultTableFilter)) {\n      throw new UnsupportedOperationException(\n          String.format(error, this.getClass().getName(), \"'filters'\"));\n    }\n    if (!fieldNames.isEmpty()) {\n      throw new UnsupportedOperationException(\n          String.format(error, this.getClass().getName(), \"'fieldNames'\"));\n    }\n    return buildIOReader(begin);\n  }\n\n  @Override\n  public POutput buildIOWriter(PCollection<Row> input) {\n    // TODO: Support writing to Delta Lake tables once a Delta Lake sink is\n    // available.\n    throw new UnsupportedOperationException(\n        \"Writing to Delta Lake tables is currently not supported.\");\n  }\n\n  @Override","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/delta/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/delta/DeltaTable.java#L137-L173","documentation":"DeltaTable.buildIOReader does not support predicate or projection push-down because DeltaIO/Managed Delta Lake does not expose them. If the planner passes a non-default table filter (indicating actual predicates) the table throws UnsupportedOperationException rather than silently ignoring the push-down.","triggerScenarios":"Querying a Delta table through Beam SQL with WHERE clauses that the planner could not fully evaluate locally, producing a filter object that is not a DefaultTableFilter, passed into buildIOReader.","commonSituations":"Complex predicates or user-defined functions in WHERE clauses on Delta tables; SQL queries whose filter chains retain non-default filter objects.","solutions":["Rewrite the query so the unsupported predicate is evaluated after the scan, or simplify the WHERE clause.","Upgrade Beam — the TODO indicates push-down may land in a later DeltaIO/Managed version.","Wrap or materialize the filtering in a subsequent transform rather than relying on push-down."],"exampleFix":"// before\nSELECT * FROM delta_t WHERE custom_udf(x) = 1 -- non-default filter reaches reader\n// after\nSELECT * FROM delta_t -- then filter the resulting PCollection in your pipeline","handlingStrategy":"validation","validationCode":"// ensure filters are only default (non-pushdown) filters before reading\nif (!(filters instanceof DefaultTableFilter)) {\n  throw new IllegalArgumentException(\"Delta provider supports only default (no-op) filters\");\n}","typeGuard":"boolean supportsPushdown(BeamSqlTableFilter filters) { return filters instanceof DefaultTableFilter; }","tryCatchPattern":"try {\n  result = deltaTable.buildIOReader(begin, filters, fieldNames);\n} catch (UnsupportedOperationException e) {\n  // fall back to reading full table and filtering in the pipeline\n  result = deltaTable.buildIOReader(begin);\n}","preventionTips":["Avoid predicates the Delta provider cannot handle; filter after the scan.","Do not rely on push-down optimizations for Delta tables in Beam SQL.","Keep WHERE clauses simple and verify no custom filter chains reach the reader."],"tags":["java","beam-sql","delta-lake","pushdown"],"backgroundTag":"unsupported-operation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}