apache/beam · error · UnsupportedOperationException
does not support predicate/project push-down, yet non-empty…
Error message
%s does not support predicate/project push-down, yet non-empty 'fieldNames' is passed.
What it means
Same guard as the filters case, but for project push-down: BaseBeamTable.buildIOReader rejects a non-empty fieldNames list when the concrete table does not support column projection. The table can only be read in full; requesting a column subset at the source is unsupported.
Solutions
- Drop the projection request and read all columns, selecting the needed fields downstream in the pipeline.
- Use a provider implementation that overrides buildIOReader to support field projection.
- Reconfigure the query so Calcite does not attempt project push-down on this table.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/BaseBeamTable.java:47 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/3081406c4570d0ee.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/BaseBeamTable.java:47
public abstract class BaseBeamTable implements BeamSqlTable {
@Override
public BeamTableStatistics getTableStatistics(PipelineOptions options) {
return BeamTableStatistics.BOUNDED_UNKNOWN;
}
@Override
public PCollection<Row> buildIOReader(
PBegin begin, BeamSqlTableFilter filters, List<String> fieldNames) {
String error = "%s does not support predicate/project push-down, yet non-empty %s is passed.";
if (!(filters instanceof DefaultTableFilter)) {
throw new UnsupportedOperationException(
String.format(error, this.getClass().getName(), "'filters'"));
}
if (!fieldNames.isEmpty()) {
throw new UnsupportedOperationException(
String.format(error, this.getClass().getName(), "'fieldNames'"));
}
return buildIOReader(begin);
}
@Override
public BeamSqlTableFilter constructFilter(List<RexNode> filter) {
return new DefaultTableFilter(filter);
}
@Override
public ProjectSupport supportsProjects() {
return ProjectSupport.NONE;
}
}
View on GitHub (pinned to 12126d8942)