{"record":{"id":"2f01bd4186897ec0","repo":"apache/seatunnel","slug":"dont-support-sink","errorCode":"DONT_SUPPORT_SINK","errorMessage":"The Hive jdbc connector don't support sink","messagePattern":"The Hive jdbc connector don't support sink","errorType":"error_code","errorClass":"JdbcConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/hive/HiveJdbcRowConverter.java","lineNumber":44,"sourceCode":"\nimport javax.annotation.Nullable;\n\nimport java.sql.PreparedStatement;\n\npublic class HiveJdbcRowConverter extends AbstractJdbcRowConverter {\n\n    @Override\n    public String converterName() {\n        return DatabaseIdentifier.HIVE;\n    }\n\n    @Override\n    public PreparedStatement toExternal(\n            TableSchema tableSchema,\n            @Nullable TableSchema databaseTableSchema,\n            SeaTunnelRow row,\n            PreparedStatement statement) {\n        throw new JdbcConnectorException(\n                JdbcConnectorErrorCode.DONT_SUPPORT_SINK,\n                \"The Hive jdbc connector don't support sink\");\n    }\n}\n","sourceCodeStart":26,"sourceCodeEnd":49,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/hive/HiveJdbcRowConverter.java#L26-L49","documentation":"HiveJdbcRowConverter.toExternal is the write-path (sink) converter for the Hive dialect, and Hive over JDBC is read-only in this connector; any attempt to write rows throws JdbcConnectorException with DONT_SUPPORT_SINK.","triggerScenarios":"Configuring Hive (jdbc:hive2:) as a SeaTunnel Sink so the row converter's toExternal(PreparedStatement) is invoked during writing.","commonSituations":"Users assume Hive supports INSERT via JDBC the same way as MySQL/Postgres and configure it as a sink; generic JDBC sink templates applied to Hive URLs.","solutions":["Use Hive as a Source only; pick a different sink (e.g. HDFS/File connector or a JDBC dialect that supports writes).","If writing to a Hive-backed store is required, write to the underlying table via a supported sink connector instead of the Hive JDBC dialect.","Check dialect capability before configuring pipelines (Hive dialect sink is intentionally unsupported)."],"exampleFix":"// before\nsink { plugin_name = \"Jdbc\", url = \"jdbc:hive2://host:10000/db\", ... }\n// after\nsource { plugin_name = \"Jdbc\", url = \"jdbc:hive2://host:10000/db\", ... }\nsink { plugin_name = \"HdfsFile\", ... }","handlingStrategy":"validation","validationCode":"if (dialect instanceof HiveDialect && isSink) { throw new IllegalArgumentException(\"Hive jdbc cannot be used as a sink; use Source only\"); }","typeGuard":"boolean supportsSink(JdbcDialect d) { return !(d instanceof HiveDialect); }","tryCatchPattern":"try { sink.write(row); } catch (JdbcConnectorException e) { if (e.getErrorCode() == JdbcConnectorErrorCode.DONT_SUPPORT_SINK) { /* reconfigure pipeline to use a writable sink */ } else throw e; }","preventionTips":["Use Hive only as a source; choose HDFS/File or other sinks for writes","Check dialect capability matrix before designing pipelines","Validate pipeline DAG in CI to catch sink misuse early"],"tags":["jdbc","hive","sink","unsupported"],"backgroundTag":"operation-not-supported","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}