#pyspark #databricks #delta-lake
Вопрос:
У нас есть скрипт databricks для создания таблиц, подобный этому,
finalDF.write.format('delta').option("mergeSchema", "true").mode('overwrite').save(table_path)
spark.sql("CREATE TABLE IF NOT EXISTS {}.{} USING DELTA LOCATION '{}' ".format('GOLDDB', table, table_path))
Таким образом, в table_path изначально при первой загрузке у нас есть только 1 файл.. Таким образом, это выполняется по мере накопления дополнительных и повседневных файлов.. Таким образом, после 10 дополнительных нагрузок это займет около 10 часов. Не могли бы вы, пожалуйста, помочь мне в том, как оптимизировать нагрузку? Можно ли объединить файлы?
Я просто попытался удалить некоторые файлы для целей тестирования, но это не удалось с ошибкой, что некоторые файлы, присутствующие в файле журнала, отсутствуют, и это происходит, когда вы вручную удаляете файлы..
пожалуйста, подскажите, как оптимизировать этот запрос
Ответ №1:
Вместо write
create table
вы можете просто сделать все за один шаг, используя path
опцию saveAsTable
:
finalDF.write.format('delta')
.option("mergeSchema", "true")
.option("path", table_path)
.mode('overwrite')
.saveAsTable(table_name) # like 'GOLDDB.name'
Для очистки старых данных вам необходимо использовать VACUUM
команду (doc), возможно, вам потребуется уменьшить время хранения с 30 дней по умолчанию (см. delta.logRetentionDuration
параметр doc on).
Комментарии:
1. Большое спасибо за предложение.. Вакуум мы выступаем в субботу вечером. Я попробую эту команду один раз и обновлю, если она работает
2. Попробовал вышеприведенное решение, но оно снова заняло много времени.
3. Вам нужно изучить планы выполнения и т. Д.