Мне нужно разработать приложение, которое может получать данные из нескольких источников данных ( Oracle, Excel, Microsoft Sql Server
и т. д.), используя один SQL query
. Например:
SELECT o.employeeId, count(o.orderId)
FROM employees@excel e. customers@microsoftsql c, orders@oracle o
WHERE o.employeeId = e.employeeId and o.customerId = c.customerId
GROUP BY o.employeeId;
Этот sql и источники данных должны динамически изменяться программой Java. Мои клиенты хотят писать и запускать sql-like query
из другой базы данных и хранилища одновременно с group by, having, count, sum
и т. д. в веб-интерфейсе моего приложения. Другими требованиями являются производительность и легкость.
Я нахожу этот способ сделать это (и какие недостатки я вижу, пожалуйста, поправьте меня, если я ошибаюсь):
Apache Spark (недостатки: тяжелое решение, больше подходит для больших данных, медленный, если вам нужно получать актуальную информацию без ее кэширования в Spark),
Распределенные запросы на сервере SQL (ссылка на базу данных Oracle, Связанный сервер Microsoft SQL Server, Power Query Excel) - недостатки< /strong>: проблема с динамическим изменением источников данных программой java и проблема с работой с Excel,
Prestodb (недостатки: тяжелое решение, лучше для больших данных),
Apache Drill (недостатки: довольно молодое решение, некоторые проблемы с не последним odbc драйвера и некоторые баги при работе),
Apache Calcite (легкий фреймворк, используемый Apache Drill, недостатки: довольно молодое решение еще),
Выполняйте объединение из источников данных вручную (недостатки: много работы по разработке правильного объединения, "группировка по" в наборе результатов, поиск наилучшего плана выполнения и т. д.)
Может быть, вы знаете какой-нибудь другой способ (используя бесплатные решения с открытым исходным кодом) или дадите мне какой-нибудь совет из своего опыта о способах, описанных выше? Любая помощь будет принята с благодарностью.
SSIS
и собирать данные в центральном месте (SQL Server), а затем запросите его. - person Lukasz Szozda   schedule 20.01.2016