{"record":{"id":"dd17643ef31950c6","repo":"apache/seatunnel","slug":"table-query-exception-dd1764","errorCode":"TABLE_QUERY_EXCEPTION","errorMessage":"HBase table [%s] does not exist","messagePattern":"HBase table \\[(.+?)\\] does not exist","errorType":"error_code","errorClass":"HbaseConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/source/HbaseSourceSplitEnumerator.java","lineNumber":233,"sourceCode":"                currentTaskSplits.stream()\n                        .map(HbaseSourceSplit::splitId)\n                        .collect(Collectors.joining(\",\")));\n        context.signalNoMoreSplits(taskId);\n    }\n\n    @VisibleForTesting\n    public Set<HbaseSourceSplit> getTableSplits() {\n        String namespace = hbaseParameters.getNamespace();\n        TableName tableName = TableName.valueOf(namespace, hbaseParameters.getTable());\n        try {\n            HbaseClient hbaseClient = getHbaseClient();\n            log.info(\"Enumerating HBase source splits for table [{}]\", tableName.getNameAsString());\n            if (!hbaseClient.tableExists(tableName.getNameAsString())) {\n                String errorMsg =\n                        String.format(\n                                \"HBase table [%s] does not exist\", tableName.getNameAsString());\n                log.error(errorMsg);\n                throw new HbaseConnectorException(\n                        HbaseConnectorErrorCode.TABLE_QUERY_EXCEPTION, errorMsg);\n            }\n\n            try (RegionLocator regionLocator =\n                    hbaseClient.getRegionLocator(namespace, hbaseParameters.getTable())) {\n                byte[][] startKeys = regionLocator.getStartKeys();\n                byte[][] endKeys = regionLocator.getEndKeys();\n                if (startKeys.length == 0 || endKeys.length == 0) {\n                    String errorMsg =\n                            String.format(\n                                    \"No region information found for HBase table [%s], please check whether the table exists \"\n                                            + \"and current user has permission to access it\",\n                                    tableName.getNameAsString());\n                    log.error(errorMsg);\n                    throw new HbaseConnectorException(\n                            HbaseConnectorErrorCode.TABLE_QUERY_EXCEPTION, errorMsg);\n                }\n                List<HbaseSourceSplit> splits = new ArrayList<>();","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-hbase/src/main/java/org/apache/seatunnel/connectors/seatunnel/hbase/source/HbaseSourceSplitEnumerator.java#L215-L251","documentation":"This error is thrown by the HBase source split enumerator when the configured table does not exist in the HBase cluster. Before enumerating regions/splits, SeaTunnel calls hbaseClient.tableExists(); if the table is absent it fails fast with TABLE_QUERY_EXCEPTION so the job does not proceed with an empty or invalid source.","triggerScenarios":"Calling splits()/tableSplits() during job startup when hbaseParameters.table (or the namespace-qualified table name) does not exist in the target HBase cluster, e.g. a typo in the table name or the table was dropped before submission.","commonSituations":"Typo in table name in the HOCON config; job submitted against the wrong cluster/ZK quorum (namespace mismatch); table dropped or renamed between job submission and execution; missing namespace prefix.","solutions":["Verify the table exists: run 'list' in the HBase shell (or 'exists <table>') on the cluster the job points to.","Correct the 'table' (and 'namespace' if set) option in the SeaTunnel source config, including namespace qualification.","Confirm the job is connecting to the intended cluster (hbase.zookeeper.quorum / zookeeper.znode.parent match the cluster hosting the table).","If the table should exist, check the user's HBase ACLs ('user_permission') since visibility issues can also surface here.","Recreate or re-enable the table if it was dropped or disabled before submission."],"exampleFix":"// before\ntable = \"user_events\"   // typo, table is 'user_eventsv2'\n// after\ntable = \"user_eventsv2\"","handlingStrategy":"validation","validationCode":"// HBase shell\nexists 'ns:user_events'\n// or Java\ntry (Admin admin = connection.getAdmin()) { admin.tableExists(TableName.valueOf(\"ns:user_events\")); }","typeGuard":null,"tryCatchPattern":"try { ... } catch (HbaseConnectorException e) {\n  if (e.getErrorCode() == HbaseConnectorErrorCode.TABLE_QUERY_EXCEPTION && e.getMessage().contains(\"does not exist\")) {\n    // recreate table or abort with clear config error\n  }\n}","preventionTips":["Validate table names in config against the cluster before submitting the job.","Use namespace-qualified table names consistently.","Add a pre-flight HBase shell check to deployment scripts.","Pin zookeeper.quorum to the cluster that actually hosts the table."],"tags":["hbase","table-not-found","source-split-enumeration","config"],"backgroundTag":"resource-not-found","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}