{"record":{"id":"ce5273733136a596","repo":"apache/beam","slug":"writing-to-hcatalog-is-not-supported-in-beam-sql","errorCode":null,"errorMessage":"Writing to HCatalog is not supported in Beam SQL","messagePattern":"Writing to HCatalog is not supported in Beam SQL","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/hcatalog/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/hcatalog/HCatalogTable.java","lineNumber":60,"sourceCode":"\n  public abstract String database();\n\n  public abstract String table();\n\n  @Override\n  public PCollection<Row> buildIOReader(PBegin begin) {\n    return begin.apply(\n        \"HCatalog-Read-\" + database() + \"-\" + table(),\n        HCatToRow.fromSpec(\n            HCatalogIO.read()\n                .withConfigProperties(config())\n                .withDatabase(database())\n                .withTable(table())));\n  }\n\n  @Override\n  public POutput buildIOWriter(PCollection<Row> input) {\n    throw new UnsupportedOperationException(\"Writing to HCatalog is not supported in Beam SQL\");\n  }\n\n  @Override\n  public PCollection.IsBounded isBounded() {\n    return PCollection.IsBounded.BOUNDED;\n  }\n\n  @Override\n  public Schema getSchema() {\n    return schema();\n  }\n\n  static Builder builder() {\n    return new AutoValue_HCatalogTable.Builder();\n  }\n\n  @AutoValue.Builder\n  abstract static class Builder {","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/hcatalog/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/hcatalog/HCatalogTable.java#L42-L78","documentation":"HCatalogTable implements the Beam SQL table interface as read-only: buildIOWriter, which would produce an output PTransform for writing rows, unconditionally throws UnsupportedOperationException. Beam SQL can read from HCatalog but not sink to it.","triggerScenarios":"Using an hcatalog table as a sink, e.g. INSERT INTO hcatalog.tbl SELECT ... or calling buildIOWriter directly on the BeamSqlTable.","commonSituations":"Trying to persist query results back into a Hive table; migrating pipelines that wrote to Hive via other mechanisms into Beam SQL.","solutions":["Write results with the HCatalog/Hive IO connector (HCatalogIO.write) instead of Beam SQL sinks.","Write to a supported sink (e.g. text, BigQuery, parquet files) from Beam SQL.","Materialize the PCollection<Row> and apply HCatalogIO manually."],"exampleFix":"// before\nrows.apply(SqlTransform.query(\n    \"INSERT INTO hcatalog.db.tbl SELECT * FROM PCOLLECTION\"));\n// after\nrows.apply(HCatalogIO.write()\n    .withConfigProperties(hiveProps)\n    .withDatabase(\"db\")\n    .withTable(\"tbl\"));","handlingStrategy":"try-catch","validationCode":"if (isSink && \"hcatalog\".equals(tableType)) {\n  throw new IllegalArgumentException(\"Use HCatalogIO.write for HCatalog sinks\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  beamSqlTable.buildIOWriter(rows);\n} catch (UnsupportedOperationException e) {\n  rows.apply(HCatalogIO.write().withDatabase(db).withTable(tbl));\n}","preventionTips":["Never use hcatalog tables as INSERT INTO sinks in Beam SQL.","Sink results via HCatalogIO or another supported sink.","Restrict hcatalog usage in Beam SQL to read-only SELECTs."],"tags":["java","beam-sql","hcatalog","io"],"backgroundTag":"operation-not-supported","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"}