Исключение при запросе базы данных Hive Derby через JDBC

Я новый пользователь Hive и только начал использовать его для проекта. У меня проблема с подключением к базе данных с помощью java. Это объясняется следующим образом:

Я запустил базу данных Hive на своем компьютере, который создал дерби metastore_db с помощью встроенного драйвера дерби. Теперь я хочу запросить этот metastore_db через отдельную программу Java для выдачи запросов.

Я следовал нескольким трюкам, которые мог найти в Интернете, но до сих пор не могу заставить это работать.

Снимок моего файла Java:

String url = "jdbc:derby:metastore_db;create=true"; 
String username = "APP"; 
String password = "mine"; 
String drivername = "org.apache.derby.jdbc.EmbeddedDriver";

Connection con = DriverManager.getConnection(url,username, password);
Statement stmt = con.createStatement();
res = stmt.executeQuery("describe " + tableName);

Запуск java-файла:

Я поместил его в ту же папку, что и metastore_db, а затем запустил его с помощью следующей команды:

java -cp "derby-10.4.2.jar:." ConnectTesting

Я получаю следующее синтаксическое исключение:

java.sql.SQLException: Syntax error: Encountered "describe" at line 1, column 1.

Некоторые из вещей, которые я уже пробовал:

  1. url = "jdbc:derby:metastore_db;create=false";
  2. url = "jdbc:derby://localhost:10000/metastore_db";
  3. url = "jdbc:derby://localhost:1527/metastore_dbDB"; // By default port at which hive listens
    Приведенные выше два выдают ошибку:

    Не найден подходящий драйвер для jdbc:derby://localhost:10000/metastore_db

  4. url = "jdbc:derby:<full_path_to_db>/metastore_db";

  5. Если у меня уже запущен сервер HIVE, а затем с другого терминала я запускаю java-файл, он говорит:
    "Другой экземпляр Derby, возможно, уже загрузил базу данных"

Может ли кто-нибудь указать, что я делаю неправильно и как я могу подключиться к уже существующей базе данных для выдачи запросов.


person user2013985    schedule 08.12.2013    source источник


Ответы (1)


Это много разных вопросов. На какой из них вам действительно нужен ответ?

«describe» — это команда, реализуемая инструментом «ij»; это не оператор SQL. Таким образом, чтобы запустить «describe», вы должны запустить его из «ij» (или с помощью утилиты RunScript для запуска «ij» в вашем приложении; вы не можете запустить его непосредственно из Statement.executeQuery().

Чтобы использовать драйвер клиент-сервер с синтаксисом hostname:port, вы должны (а) использовать derbyclient.jar, а не derby.jar в пути к классам, и (б) запустить сетевой сервер.

Кроме того, вы не можете открыть одну и ту же (встроенную) базу данных Derby в нескольких приложениях одновременно, поэтому во время работы вашего приложения вы не сможете запустить второе приложение для той же (встроенной) базы данных. Если вам нужна эта функциональность, вам нужно переключить все ваши приложения на использование клиентского драйвера и запустить сетевой сервер, чтобы обеспечить доступ нескольких приложений к вашей базе данных.

Вы уже запустили учебник по дерби? В нем более подробно рассматривается большинство этих тем: http://db.apache.org/derby/docs/10.10/getstart/

person Bryan Pendleton    schedule 09.12.2013