Сравнивайте согласованные срезы по небольшим диапазонам ключа: сначала агрегаты, затем детализируйте только различающиеся участки и дозагружайте конкретные записи.
[имя] спросил: кейс: есть таблица-источник в Postgres и таблица-target в Greenplum, в каждой миллиарды строк. Из-за сетевых ограничений и лимитов по памяти нельзя выгрузить обе таблицы целиком для сравнения. Обнаружены расхождения по агрегатам (например, count). Как эффективно найти расхождения между источником и таргетом и организовать процесс точечной дозагрузки недостающих данных?
Сравнивайте согласованные срезы по небольшим диапазонам ключа: сначала агрегаты, затем детализируйте только различающиеся участки и дозагружайте конкретные записи.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сравнивайте согласованные срезы по небольшим диапазонам ключа: сначала агрегаты, затем детализируйте только различающиеся участки и дозагружайте конкретные записи.
Зафиксируйте границу данных, иначе параллельные изменения будут выглядеть как ошибки загрузки. Считайте на каждой стороне количество и контрольные признаки по диапазонам или хеш-бакетам; проблемные участки делите дальше.
На последнем уровне сравните ключи и канонизированные значения ограниченными порциями. Хеши полезны для поиска, но совпадение не является математическим доказательством идентичности. Дозагрузка должна быть идемпотентной и учитывать обновления и удаления, а после неё нужна повторная сверка. Ограничивайте скорость, чтобы не мешать рабочим запросам.