#jdbc #hive #database-metadata
#jdbc #улей #база данных-метаданные
Вопрос:
Я пытаюсь получить имена таблиц для hive, используя DatabaseMetaData
аналогично RDBMS.
Пример кода:
try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
DatabaseMetaData metadata = con.getMetaData();
ResultSet rs = metadata.getTables(null, null, tableName, null);
while (rs.next()) {
System.out.println(rs.getString(3));
}
} catch (SQLException e) {
}
private static void registerDriver(String driverName) {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
LOG.error("No class found for " driverName ". Details: " e);
}
}
private static Connection getJdbcConnection(String connectionUri, String driverName, String username,
String password) throws SQLException{
registerDriver(driverName);
return DriverManager.getConnection(connectionUri, username,password);
}
В конкретной базе данных нет таблицы. Используя разные имена таблиц, я получаю разные выходные данные.
Например:
Я ввел имя таблицы emp
, есть 3 записи с именем emp
Я ввел имя таблицы employee
, есть 5 записей с именем employee
Я ввожу имя таблицы emp12
, оно не возвращает записей (что ожидается)
-
Я делаю что-то не так?
-
Разве я не должен использовать
DatabaseMetaData
для проверки существования таблицы?
Ответ №1:
Мне нужно передать имя схемы в getTables
методе
Подпись:
ResultSet getTables(String catalog,
String schemaPattern,
String tableNamePattern,
String[] types)
throws SQLException
Я передал следующие agruments:
- каталог = null;
- schemaPattern = имя схемы улья
- tableNamePattern = имя таблицы улья
- типы =
new String[] { "TABLE" }
Пример кода:
try (Connection con = getJdbcConnection(connectionUri, driverName, username, password);) {
DatabaseMetaData metadata = con.getMetaData();
ResultSet rs = metadata.getTables(null, schemaName, tableName, new String[] { "TABLE" });
while (rs.next()) {
String tName = rs.getString("TABLE_NAME");
if (tName != null amp;amp; tName.equals(tableName)) {
LOG.info("Table [" tableName "] is present in the Database.");
return true;
}
}
rs.close();
LOG.info("Table [" tableName "] is not present in the Database.");
return false;
} catch (SQLException e) {
LOG.error("Not able to get Table Metadata . Caused By: " e);
}