Я пытаюсь записать DataFrame в таблицу Hive (на S3) в режиме Overwrite (необходимо для моего приложения), и мне нужно выбрать один из двух методов DataFrameWriter (Spark/Scala). Из того, что я могу прочитать в документации, df.write.saveAsTable отличается от df.write.insertInto в следующих отношениях:
-
saveAsTableиспользует разрешение на основе имени столбца, аinsertIntoиспользует разрешение на основе позиции - В режиме
saveAsTableуделяет больше внимания базовой схеме существующей таблицы для принятия определенных решений.
В целом, у меня saveAsTable впечатление, что saveAsTable - это просто более умная версия insertInto. В качестве альтернативы, в зависимости от insertInto использования, можно предпочесть insertInto
Но каждый ли из этих методов сопровождается некоторыми оговорками, такими как saveAsTable производительности в случае saveAsTable (поскольку он содержит больше функций)? Есть ли другие различия в их поведении помимо того, что сказано (не очень ясно) в документах?
EDIT-1
Документация говорит об этом относительно insertInto
Вставляет содержимое DataFrame в указанную таблицу
и это для saveAsTable
Если таблица уже существует, поведение этой функции зависит от режима сохранения, заданного функцией mode
Теперь я могу перечислить свои сомнения
- Всегда ли
insertIntoожидает, что таблица будет существовать? -
SaveModeлиSaveModeнаinsertInto? - Если ответ выше, то да, тогда
- какие различия между
saveAsTableсSaveMode.AppendиinsertIntoучитывая, что таблица уже существует? -
insertIntoли смыслinsertIntoсSaveMode.Overwrite?
- какие различия между