apache/beam · error · UnsupportedOperationException

Filter pushdown is not yet supported in

Error message

Filter pushdown is not yet supported in %s. https://github.com/apache/beam/issues/21001

What it means

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.

Solutions

  1. Remove predicate push-down expectations: read the full table and apply WHERE conditions downstream in the pipeline.
  2. Wait for/track apache/beam#21001 for SchemaIO filter push-down support.
  3. Implement a custom BeamSqlTable with filter support if source-side filtering is essential.
Defensive patterns

Strategy: fallback

When it happens

Trigger: 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.

Common situations: See trigger scenarios.


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/d881a959eab7f45c. Report an issue: GitHub.

Appendix: source

Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/SchemaIOTableProviderWrapper.java:131

    }

    @Override
    public Schema getSchema() {
      return schemaIO.schema();
    }

    @Override
    public PCollection<Row> buildIOReader(PBegin begin) {
      PTransform<PBegin, PCollection<Row>> readerTransform = schemaIO.buildReader();
      return begin.apply(readerTransform);
    }

    @Override
    public PCollection<Row> buildIOReader(
        PBegin begin, BeamSqlTableFilter filters, List<String> fieldNames) {
      PTransform<PBegin, PCollection<Row>> readerTransform = schemaIO.buildReader();
      if (!(filters instanceof DefaultTableFilter)) {
        throw new UnsupportedOperationException(
            String.format(
                "Filter pushdown is not yet supported in %s. https://github.com/apache/beam/issues/21001",
                SchemaIOTableWrapper.class));
      }
      if (!fieldNames.isEmpty()) {
        if (readerTransform instanceof ProjectionProducer) {
          // The pushdown must return a PTransform that can be applied to a PBegin, or this cast
          // will fail.
          ProjectionProducer<PTransform<PBegin, PCollection<Row>>> projectionProducer =
              (ProjectionProducer<PTransform<PBegin, PCollection<Row>>>) readerTransform;
          FieldAccessDescriptor fieldAccessDescriptor =
              FieldAccessDescriptor.withFieldNames(fieldNames);
          readerTransform =
              projectionProducer.actuateProjectionPushdown(
                  ImmutableMap.of(new TupleTag<PCollection<Row>>("output"), fieldAccessDescriptor));
        } else {
          throw new UnsupportedOperationException(
              String.format("%s does not support projection pushdown.", this.getClass()));

View on GitHub (pinned to 12126d8942)