По работе появилась потребность в полном сравнении двух баз данных.
У нас есть озеро данных на HIVE, куда мы реплицируем (загружаем) данные для дальнейшей работы с ними DS, DM, BI и тд. как правило в 99% случаев это полная загрузка таблицы из других баз данных.
Мой вопрос заключается в том, что я никак не могу разобраться и в принципе понять, как можно и возможно ли, составлять межбазовые запросы.
я имею таблицу в HIVE назовем её TABLE-1 и таблицу в Oracle, назовем её TABLE-2, каким образом я могу сджойнить и вывести результаты несовпадения между этими БД. На данный момент я имею менеджер БД DBeaver, может мне нужно установить что-то ещё, пока из идей, получать данные на питоне и дальше с ними работать, но это займёт очень много времени, так как таблицы с большим количеством данных (100+млн строк) и на питоне это всё выполняется очень долго. Сравнивать необходимо именно содержание самих таблиц, а не метаданные.
В порядке размышлений... если просто хочется понимать, что есть различие и эти две базы расходятся по значениям, то может покопать в сторону хэша таблиц?
з.ы. в скуле не сильно силен, может кто более точно напишет, делается ли подобная штука.
Мне кажется что автор затеял совершенно безнадёжное дело. Чтоб сделать JOIN двух 100 млн-ных таблиц в любой системе - нужно иметь эти таблицы внутри БД а не через db-link. В противном случае каждый join будет требовать
трансфера всех 100 млн строк в целевую систему.
Поэтому тут надо уточнить само задание. Чем мы заняты? Это единоразовая операция. Ну попробуй посчитай число строк. Потом половинным делением найди медиану по среднему ключу. И так далее пока не найдешь различия.
Вообще в алгоритмах для сравнения двух толстых (огромных) блобов применяется Дерево Меркла. Вот. Это то что в биткоине используется для синхронизации логов транзакций. Очень умная и быстрая структура данных. Но как реализовать ее в данном конкретном кейсе - я не знаю. И ее задача не выяснять кто виноват - а просто очень быстро сделать sync от master к slave.
vadimeasy, если сравнение будет ежедневным, может, стоит определиться, что вообще меняется в этих базах за столь ограниченный срок? Вряд ли все 100 миллионов строк.
Хранение уже имеющихся различий и добавление к ним текущих изменений может оказаться куда проще и быстрее.
Adamos, Сравнение будет происходить два раза, в момент первого теста и приёмочного теста, поменяться может мало чего, важно чтобы таблицы полностью совпадали, по этому после первого теста могут быть внесены изменения в поток обновления, а значит и на приёмочном тестировании в таблицен могут быть вновь допущены ошибки, соотстветственно делаю вывод, что нужно будет проверять всё полностью с первой и до последней строки
Можно выполнять запросы между базами данных для объединения таблиц из разных баз данных, таких как HIVE и Oracle.
Один из способов сделать это — использовать инструмент под названием Apache Drill, который позволяет запрашивать данные из нескольких источников данных, включая HIVE и Oracle.
Вы можете использовать оператор SQL JOIN в тренировке, чтобы соединить таблицы из разных баз данных.
Другой способ — использовать язык программирования, такой как Python, и библиотеки, такие как PyHive или cx_Oracle, для подключения к обеим базам данных и выполнения объединения и сравнения в коде.
Этот подход может занять больше времени для больших таблиц с миллионами строк.
Вы также можете использовать сторонние инструменты интеграции данных, такие как Talend, Informatica и DataStage, для объединения и сравнения двух баз данных.
Лучше всего проверить производительность каждого подхода и выбрать тот, который лучше всего подходит для вашего случая использования.