{"record":{"id":"fa8340b838d38e2a","repo":"apache/beam","slug":"buildiowriter-unsupported","errorCode":null,"errorMessage":"buildIOWriter unsupported!","messagePattern":"buildIOWriter unsupported!","errorType":"validation","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/seqgen/GenerateSequenceTable.java","lineNumber":74,"sourceCode":"\n  @Override\n  public PCollection<Row> buildIOReader(PBegin begin) {\n    return begin\n        .apply(GenerateSequence.from(0).withRate(elementsPerSecond, Duration.standardSeconds(1)))\n        .apply(\n            MapElements.into(TypeDescriptor.of(Row.class))\n                .via(elm -> Row.withSchema(TABLE_SCHEMA).addValues(elm, Instant.now()).build()))\n        .setRowSchema(getSchema());\n  }\n\n  @Override\n  public BeamTableStatistics getTableStatistics(PipelineOptions options) {\n    return BeamTableStatistics.createUnboundedTableStatistics((double) elementsPerSecond);\n  }\n\n  @Override\n  public POutput buildIOWriter(PCollection<Row> input) {\n    throw new UnsupportedOperationException(\"buildIOWriter unsupported!\");\n  }\n}\n","sourceCodeStart":56,"sourceCodeEnd":77,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/seqgen/GenerateSequenceTable.java#L56-L77","documentation":"GenerateSequenceTable is a read-only virtual table: buildIOWriter — the interface hook for writing a PCollection back to the source — unconditionally throws UnsupportedOperationException. Beam SQL calls it when executing INSERT/DML against a table backed by the sequence generator.","triggerScenarios":"Running INSERT INTO seq_table SELECT ... where seq_table is of type 'seqgen'; any pipeline attempt to write output through the GenerateSequence provider.","commonSituations":"Developers assuming a sequence generator table can also sink data; DML statements generated by generic SQL tooling against a read-only provider.","solutions":["Remove the INSERT/writing statement — seqgen tables only support reading (SELECT).","Write output to a supported sink table type (text, kafka, bigquery, etc.) instead.","If writing is required, implement buildIOWriter in a custom table provider."],"exampleFix":"// before\nINSERT INTO seq_table SELECT * FROM src\n// after\nINSERT INTO output_text_table SELECT * FROM seq_table","handlingStrategy":"validation","validationCode":"if (tableProvider instanceof GenerateSequenceTable || \"seqgen\".equals(tableType)) {\n  throw new UnsupportedOperationException(\"Sequence tables are read-only; use a different sink\");\n}","typeGuard":null,"tryCatchPattern":"try { writer = table.buildIOWriter(input); } catch (UnsupportedOperationException e) { /* route output to a writable sink */ }","preventionTips":["Treat seqgen as SELECT-only","Check provider capabilities before DML","Document read-only tables in your SQL layer"],"tags":["java","apache-beam","sql","read-only","dml"],"backgroundTag":"unsupported-operation","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"}