如何解决无法从 HiveMetaStoreClient 检索现有数据库或表名
我有一些 Java 代码试图使用 Trino JDBC 连接器和 org.apache.hadoop.hive.metastore.HiveMetaStoreClient
对象将外部表写入 Hive 元存储。
Table table = buildTestTable(table);
hiveMetaStoreClient.createTable();
dbName = table.getDbName();
String newTableName = table.getTableName();
logger.info("Created table " + table + "\nnamed " + newTableName +
" in database " + dbName);
dbs = hiveMetaStoreClient.getAllDatabases();
tables = hiveMetaStoreClient.getAllTables(dbName);
logger.info("Databases = " + dbs +
",tables in " + dbName + " = " + tables);
try {
Database db = hiveMetaStoreClient.getDatabase(dbName);
logger.info("db = " + db);
}
catch (NoSuchObjectException e) {
logger.warning("Could not get database " + dbName + ": " + e.getMessage());
}
try {
metaStoreClient.createTable(tb);
} catch (TException e) {
String msg = "Unable to create table " + tb.getTableName() +
": " + e.getMessage();
logger.log(Level.WARNING,msg,e);
throw new StorageProviderException(msg,e);
}
此代码的调试输出如下:
INFO: Created table Table(tableName:kc_test_table_11,dbName:mp_java_test,... (detail omitted)
named kc_test_table_11 in database mp_java_test
Jul 28,2021 9:39:19 AM com.mycompany.HiveConnectorIT testCreateTable
INFO: Databases = [],tables in mp_java_test = []
Jul 28,2021 9:39:19 AM com.mycompany.HiveConnectorIT testCreateTable
WARNING: Could not get database mp_java_test: @hive#mp_java_test
Jul 28,2021 9:39:20 AM com.mycompany.HiveConnector createTable
WARNING: Unable to create table kc_test_table_11: Table kc_test_table_11 already exists
AlreadyExistsException(message:Table kc_test_table_11 already exists)
at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$create_table_with_environment_context_result$create_table_with_environment_context_resultStandardScheme.read(ThriftHiveMetastore.java:54890)
at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$create_table_with_environment_context_result$create_table_with_environment_context_resultStandardScheme.read(ThriftHiveMetastore.java:54876)
at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$create_table_with_environment_context_result.read(ThriftHiveMetastore.java:54802)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:86)
at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.recv_create_table_with_environment_context(ThriftHiveMetastore.java:1556)
at org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.create_table_with_environment_context(ThriftHiveMetastore.java:1542)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.create_table_with_environment_context(HiveMetaStoreClient.java:2867)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:837)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:822)
... (more stack omitted)
您可以看到 table
似乎在第一次尝试时成功创建 - 没有抛出异常,第二次尝试创建 table
失败,因为它已经存在。然而,我对 getAllDatabases()
和 getAllTables()
的调用返回空列表。如何成功查询数据库状态?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。