{"record":{"id":"d881a959eab7f45c","repo":"apache/beam","slug":"filter-pushdown-is-not-yet-supported-in-s-https-github-com","errorCode":null,"errorMessage":"Filter pushdown is not yet supported in %s. https://github.com/apache/beam/issues/21001","messagePattern":"Filter pushdown is not yet supported in (.+?)\\. https://github\\.com/apache/beam/issues/21001","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/SchemaIOTableProviderWrapper.java","lineNumber":131,"sourceCode":"    }\n\n    @Override\n    public Schema getSchema() {\n      return schemaIO.schema();\n    }\n\n    @Override\n    public PCollection<Row> buildIOReader(PBegin begin) {\n      PTransform<PBegin, PCollection<Row>> readerTransform = schemaIO.buildReader();\n      return begin.apply(readerTransform);\n    }\n\n    @Override\n    public PCollection<Row> buildIOReader(\n        PBegin begin, BeamSqlTableFilter filters, List<String> fieldNames) {\n      PTransform<PBegin, PCollection<Row>> readerTransform = schemaIO.buildReader();\n      if (!(filters instanceof DefaultTableFilter)) {\n        throw new UnsupportedOperationException(\n            String.format(\n                \"Filter pushdown is not yet supported in %s. https://github.com/apache/beam/issues/21001\",\n                SchemaIOTableWrapper.class));\n      }\n      if (!fieldNames.isEmpty()) {\n        if (readerTransform instanceof ProjectionProducer) {\n          // The pushdown must return a PTransform that can be applied to a PBegin, or this cast\n          // will fail.\n          ProjectionProducer<PTransform<PBegin, PCollection<Row>>> projectionProducer =\n              (ProjectionProducer<PTransform<PBegin, PCollection<Row>>>) readerTransform;\n          FieldAccessDescriptor fieldAccessDescriptor =\n              FieldAccessDescriptor.withFieldNames(fieldNames);\n          readerTransform =\n              projectionProducer.actuateProjectionPushdown(\n                  ImmutableMap.of(new TupleTag<PCollection<Row>>(\"output\"), fieldAccessDescriptor));\n        } else {\n          throw new UnsupportedOperationException(\n              String.format(\"%s does not support projection pushdown.\", this.getClass()));","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/SchemaIOTableProviderWrapper.java#L113-L149","documentation":"SchemaIOTableProviderWrapper.buildIOReader supports only full reads: if a non-DefaultTableFilter is passed (i.e. the planner tries to push a predicate into a SchemaIO-backed table), this guard throws UnsupportedOperationException. Filter push-down for SchemaIO tables is not implemented (tracked as Beam issue 21001); filtering must happen after the read.","triggerScenarios":"Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/SchemaIOTableProviderWrapper.java:131 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove predicate push-down expectations: read the full table and apply WHERE conditions downstream in the pipeline.","Wait for/track apache/beam#21001 for SchemaIO filter push-down support.","Implement a custom BeamSqlTable with filter support if source-side filtering is essential."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}