Я также заметил, что команда Delta Vacuum довольно медленная. Разработчики с открытым исходным кодом, вероятно, ограничены в возможности делать AWS специфичных c оптимизаций в репо, потому что эта библиотека является кроссплатформенной (должна работать во всех облаках).
Я заметил, что вакуум даже медленный локально. Вы можете клонировать репозиторий Delta, запустить набор тестов на своем локальном компьютере и убедиться в этом сами.
Удаление сотен тысяч файлов, хранящихся в S3, происходит медленно, даже если вы используете AWS CLI . Вы должны посмотреть, сможете ли вы провести рефакторинг операции сжатия, чтобы создать меньше файлов, которые нужно очистить.
Предположим, ваша цель - создать файлы размером 1 ГБ. Возможно, у вас есть 15 000 файлов размером в один гигабайт и 20 000 файлов небольшого размера. Прямо сейчас ваша операция уплотнения перезаписывает все данные (поэтому все 35 000 исходных файлов необходимо очистить после сжатия). Попробуйте выполнить рефакторинг своего кода, чтобы сжать только 20 000 небольших файлов (так что операция вакуумирования должна удалить только 20 000 файлов).
Реальное решение - создать команду очистки, оптимизированную для AWS. Delta Lake должна работать со всеми популярными облаками и локальной файловой системой. Должно быть довольно легко создать библиотеку с открытым исходным кодом, которая читает журнал транзакций, определяет, какие файлы необходимо удалить, выполняет эффективный вызов API удаления файлов, а затем записывает запись в журнал транзакций, совместимую с Delta. Может быть, я сделаю это репо;)
Вот дополнительная информация о команде вакуума . В качестве примечания вы можете использовать coalesce
вместо repartition
при уплотнении, , как описано здесь .
EDIT: Delta issue: https://github.com/delta-io/delta/issues/395 и PR: https://github.com/delta-io/delta/pull/416