{"record":{"id":"0e7714b3946574be","repo":"apache/seatunnel","slug":"can-t-create-jdbcdialect-without-compatible-mode-f-0e7714","errorCode":null,"errorMessage":"Can't create JdbcDialect without compatible mode for Hive","messagePattern":"Can't create JdbcDialect without compatible mode for Hive","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/hive/HiveDialectFactory.java","lineNumber":43,"sourceCode":"import com.google.auto.service.AutoService;\n\n/** Factory for {@link HiveDialect}. */\n@AutoService(JdbcDialectFactory.class)\npublic class HiveDialectFactory implements JdbcDialectFactory {\n\n    @Override\n    public String dialectFactoryName() {\n        return DatabaseIdentifier.HIVE;\n    }\n\n    @Override\n    public boolean acceptsURL(String url) {\n        return url.startsWith(\"jdbc:hive2:\");\n    }\n\n    @Override\n    public JdbcDialect create() {\n        throw new UnsupportedOperationException(\n                \"Can't create JdbcDialect without compatible mode for Hive\");\n    }\n\n    @Override\n    public JdbcDialect create(String compatibleMode, String fieldId) {\n        if (\"inceptor\".equals(compatibleMode)) {\n            return new InceptorDialect();\n        }\n        return new HiveDialect();\n    }\n}\n","sourceCodeStart":25,"sourceCodeEnd":55,"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/HiveDialectFactory.java#L25-L55","documentation":"HiveDialectFactory.create() throws UnsupportedOperationException because the Hive dialect requires a compatible mode (e.g. 'inceptor'). Only the create(compatibleMode, fieldId) overload is supported for jdbc:hive2: URLs.","triggerScenarios":"A jdbc:hive2: URL resolves to HiveDialectFactory and the framework calls the no-arg create() method.","commonSituations":"Hive connector config missing the compatible_mode option; framework versions that default to the no-arg factory; users expecting plain HiveServer2 support without specifying a mode.","solutions":["Set compatible_mode = \"inceptor\" (or the supported mode) in the Hive JDBC sink/source config so the two-arg create() is used.","If plain HiveServer2 is needed without a compatible mode, use a different dialect/URL scheme.","Upgrade or patch the calling code to pass a compatible mode to the factory."],"exampleFix":"// before\nsink = { url = \"jdbc:hive2://host:10000/db\" }\n// after\nsink = { url = \"jdbc:hive2://host:10000/db\", compatible_mode = \"inceptor\" }","handlingStrategy":"type-guard","validationCode":"if (url.startsWith(\"jdbc:hive2:\") && compatibleMode == null) { throw new IllegalArgumentException(\"Hive dialect requires compatible_mode (e.g. inceptor)\"); }","typeGuard":"JdbcDialect safeCreate(JdbcDialectFactory f, String mode, String fieldId) { return f instanceof HiveDialectFactory ? f.create(mode, fieldId) : f.create(); }","tryCatchPattern":"try { dialect = factory.create(); } catch (UnsupportedOperationException e) { dialect = factory.create(compatibleMode, fieldId); }","preventionTips":["Set compatible_mode in Hive JDBC configs","Don't rely on the no-arg create() for jdbc:hive2: URLs","Document required compatible mode in pipeline templates"],"tags":["jdbc","hive","dialect-factory","compatible-mode"],"backgroundTag":"missing-required-config-field","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}