{"record":{"id":"3081406c4570d0ee","repo":"apache/beam","slug":"s-does-not-support-predicate-project-push-down-yet-non-empty-308140","errorCode":null,"errorMessage":"%s does not support predicate/project push-down, yet non-empty 'fieldNames' is passed.","messagePattern":"(.+?) does not support predicate/project push-down, yet non-empty 'fieldNames' is passed\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/BaseBeamTable.java","lineNumber":47,"sourceCode":"public abstract class BaseBeamTable implements BeamSqlTable {\n\n  @Override\n  public BeamTableStatistics getTableStatistics(PipelineOptions options) {\n    return BeamTableStatistics.BOUNDED_UNKNOWN;\n  }\n\n  @Override\n  public PCollection<Row> buildIOReader(\n      PBegin begin, BeamSqlTableFilter filters, List<String> fieldNames) {\n    String error = \"%s does not support predicate/project push-down, yet non-empty %s is passed.\";\n\n    if (!(filters instanceof DefaultTableFilter)) {\n      throw new UnsupportedOperationException(\n          String.format(error, this.getClass().getName(), \"'filters'\"));\n    }\n\n    if (!fieldNames.isEmpty()) {\n      throw new UnsupportedOperationException(\n          String.format(error, this.getClass().getName(), \"'fieldNames'\"));\n    }\n\n    return buildIOReader(begin);\n  }\n\n  @Override\n  public BeamSqlTableFilter constructFilter(List<RexNode> filter) {\n    return new DefaultTableFilter(filter);\n  }\n\n  @Override\n  public ProjectSupport supportsProjects() {\n    return ProjectSupport.NONE;\n  }\n}\n","sourceCodeStart":29,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/BaseBeamTable.java#L29-L64","documentation":"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.","triggerScenarios":"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.","commonSituations":"See trigger scenarios.","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."],"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"}