Я пытаюсь записать 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
?
- какие различия между