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
- 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.
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)