{"record":{"id":"c3bd5d1a77b703e8","repo":"apache/seatunnel","slug":"hive-does-not-support-schema-in-table-name-when","errorCode":null,"errorMessage":"Hive does not support schema in `table_name` when `use_regex` is enabled. Please use `databasePattern.tablePattern` (only one unescaped '.') and escape dots in regex as '\\.' (in HOCON string, write '\\\\.' instead). Examples: `db0.\\.*`, `db1.user_table_[0-9]+`, `db[1-2].[app|web]order_\\.*`. Invalid `table_name`: ${processedPattern}","messagePattern":"Hive does not support schema in `table_name` when `use_regex` is enabled\\. Please use `databasePattern\\.tablePattern` \\(only one unescaped '\\.'\\) and escape dots in regex as '\\\\\\.' \\(in HOCON string, write '\\\\\\\\\\.' instead\\)\\. Examples: `db0\\.\\\\\\.\\*`, `db1\\.user_table_\\[0-9\\]\\+`, `db\\[1-2\\]\\.\\[app\\|web\\]order_\\\\\\.\\*`\\. Invalid `table_name`: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/source/config/HiveTableNamePattern.java","lineNumber":72,"sourceCode":"            throw new IllegalArgumentException(\n                    \"Hive `table_name` must use `databasePattern.tablePattern` when `use_regex` is enabled. \"\n                            + \"Invalid `table_name`: \"\n                            + processed.replace(DOT_PLACEHOLDER, \".\"));\n        }\n\n        databasePattern = databasePattern.replace(DOT_PLACEHOLDER, \".\");\n        tablePattern = tablePattern.replace(DOT_PLACEHOLDER, \".\");\n        return new HiveTableNamePattern(databasePattern, tablePattern);\n    }\n\n    private static Optional<Integer> findTableSeparator(String processedPattern) {\n        int firstDot = processedPattern.indexOf('.');\n        if (firstDot < 0) {\n            return Optional.empty();\n        }\n        int lastDot = processedPattern.lastIndexOf('.');\n        if (firstDot != lastDot) {\n            throw new IllegalArgumentException(\n                    \"Hive does not support schema in `table_name` when `use_regex` is enabled. \"\n                            + \"Please use `databasePattern.tablePattern` (only one unescaped '.') and escape dots in regex as '\\\\.' \"\n                            + \"(in HOCON string, write '\\\\\\\\.' instead). \"\n                            + \"Examples: `db0.\\\\.*`, `db1.user_table_[0-9]+`, `db[1-2].[app|web]order_\\\\.*`. \"\n                            + \"Invalid `table_name`: \"\n                            + processedPattern.replace(DOT_PLACEHOLDER, \".\"));\n        }\n        return Optional.of(firstDot);\n    }\n\n    String getDatabasePattern() {\n        return databasePattern;\n    }\n\n    String getTablePattern() {\n        return tablePattern;\n    }\n}","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hive/src/main/java/org/apache/seatunnel/connectors/seatunnel/hive/source/config/HiveTableNamePattern.java#L54-L90","documentation":"`table_name` must contain exactly one unescaped dot, separating database regex from table regex. If more than one unescaped dot is found, the parser cannot decide which dot is the separator (Hive has no schema level; extra dots are usually regex that forgot escaping), so findTableSeparator throws with a detailed explanation and examples of valid patterns.","triggerScenarios":"HiveTableNamePattern.parse (via findTableSeparator) receives a pattern like \"db.v1.orders\" or \"db\\\\.v1.orders\" where escaping was missed — firstDot != lastDot among unescaped dots.","commonSituations":"Users coming from catalogs with schema layers (e.g. Iceberg/Trino three-part names) write db.schema.table; regex containing an unescaped literal dot such as version numbers (`db.v1.table`); HOCON escaping confusion so `\\\\.` becomes a real dot.","solutions":["Escape every literal dot inside the regex fragments with `\\\\.` (write `\\\\\\\\.` in a HOCON string), keeping exactly one unescaped separator dot: \"db1.v\\\\.1.\\\\.*\"","Drop the schema segment — Hive only has database.table","Follow the documented examples: `db0.\\\\.*`, `db1.user_table_[0-9]+`, `db[1-2].[app|web]order_\\\\.*`"],"exampleFix":"// before\ntable_name = \"db.v1.orders\" // two unescaped dots\n\n// after\ntable_name = \"db.v\\\\.1.\\\\.*\" // separator dot unescaped, literal dots escaped","handlingStrategy":"validation","validationCode":"int first = raw.indexOf('.');\nint last = raw.lastIndexOf('.');\nif (first != -1 && first != last) {\n    throw new IllegalArgumentException(\"Only one unescaped dot allowed in table_name (escape literal dots with \\\\\\\\.)\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Escape every literal dot in regex with \\\\.","Never use Hive-style three-part names; Hive has db.table only","Double escaping in HOCON: write \\\\\\\\. for a literal dot"],"tags":["hive","config","regex","escaping"],"backgroundTag":"invalid-regex-pattern","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"}