Чтобы проверить это, я написал функцию, которая намеренно вызывает исключение перед вызов write_deltalake. Я ожидал, что в случае возникновения исключения никаких изменений не произойдет и файлы не будут записаны. Однако это не то, что я наблюдал, и мне нужно уточнить, почему такое поведение происходит.
Вот функция, которую я использовал:
Код: Выделить всё
def create_dim(df: pd.DataFrame, table_path: str):
raise Exception("Raising Error") # Intentionally raise an exception before writing
write_deltalake(table_path, df, mode="overwrite", storage_options=STORAGE_OPTIONS)
Поскольку оператор поднять исключение выполняется перед вызовом write_deltalake , я ожидал, что:
Никакая папка не будет создана по пути table_path в моей корзине S3.
Ни один журнал Delta или файл Parquet не будут записаны.
Актуально Результат:
Когда я выполнил функцию (вызвав create_dim(..., ...)), произошло следующее:
A папка была создана по указанному table_path.
И журнал Delta, и файл Parquet были записаны в корзину S3.
Такое поведение кажется нелогичным, как я и ожидал от атомарности< Delta Lake. /strong> гарантирует, что никакие изменения не произойдут, если вся транзакция прошла успешно.
Почему файлы записываются, хотя исключение возникает до вызова функции write_deltalake? Я неправильно понимаю поведение Delta-RS или модель выполнения Python?
Будем очень признательны за любые рекомендации!
Подробнее здесь: https://stackoverflow.com/questions/792 ... tten-despi