Как я могу объединить данные из базы данных mssql и базы данных mysql, если я запрашиваю в Java? - PullRequest
2 голосов
/ 05 июля 2019

Я пытаюсь выполнить некоторый анализ данных, которые хранятся в двух отдельных базах данных, где один является сервером mysql, а другой - mssql.Они должны быть объединены на основе одного из столбцов, так что я получаю одну структуру данных.

Я пытался хранить данные отдельно в pandas dataframes в python, соединяя их в pandas, затем записывая вCSV и загрузка его обратно в Java.Но это очень громоздко и не очень масштабируемо.

По сути, у меня есть два таких запроса:

MySQL

String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = "jdbc:mysql://localhost/test";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "root", "");
String query = "SELECT * FROM users";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);

mssql

String url = "jdbc:msql://someMSsqlserver/";
Connection conn = DriverManager.getConnection(url,"","");
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT * FROM people");

И я хочу, чтобы они были объединеныв одну структуру данных.Есть ли в любом случае это может быть сделано в Java?

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы должны сопоставить свои результаты с POJO Arraylist и затем объединить их.

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

0 голосов
/ 05 июля 2019

Различные стратегии, которые вы можете попробовать:

  1. Используя вашу программу Java, создайте временную таблицу на сервере A, затем скопируйте необходимые данные с сервера B (используя SELECT на сервере B иВСТАВИТЬ на сервере А).Затем выполните соответствующие запросы на сервере A, чтобы присоединиться к таблицам, уже находящимся на этом сервере, с временной таблицей.Возможно, у вас есть разрешение на создание временных таблиц на любом сервере.

  2. Используйте постоянную таблицу на сервере A, если у вас есть разрешение на ее создание.Затем скопируйте данные с сервера B на сервер A всякий раз, когда они изменяются с помощью одной программы Java, и запрашивайте их с помощью другой программы Java.

  3. Перетащите данные из меньшей из двух таблиц в HashMap в вашей Java-программе, где ключ HashMap - это переменная соединения.Затем обработайте набор результатов из более крупной таблицы построчно, просматривая объединенную запись в своей HashMap.

  4. Переключитесь на MariaDB и используйте механизм хранения CONNECT, чтобы сделать вашу таблицу SQL Server доступной дляваши запросы MySQL.

Как вы выбираете стратегию?Это зависит от многих вещей. Сколько сотрудничества вы можете получить от своего DBA KREWE?Насколько велики ваши столы?Вы всегда обрабатываете все строки или иногда подмножество?(В ваших примерах запросов не было предложений WHERE, поэтому, возможно, вы обрабатываете все.) Можете ли вы получить достаточно ОЗУ в ваших экземплярах JVM для хранения всей таблицы?Вам нужно делать это несколько раз в час или раз в неделю?Сколько времени может занять каждый раз, когда вы это делаете?

Совет Pro: Для запросов, подобных вашим примерам, сначала введите команду SQL SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; (на обоих типах серверов), чтобы выне блокируйте доступ других программ к вашим таблицам во время получения наборов результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...