У меня есть данные для вставки в улей каждую неделю, например, 1-ую неделю, которую я вставляю:
spark.range(0,2).write.mode("append").saveAsTable("batches")
и 2-ую неделю, которую я вставляю:
spark.range(2,4).write.mode("append").saveAsTable("batches")
Я беспокоюсь, когдавставляется запись с идентификатором 2, возникает какое-то исключение, 3 не вставляется, затем я снова вставляю данные 2-й недели, будет две 2.
Я гуглил, улей не подходит для удаления определенного наборазаписей: ссылка , поэтому я не могу удалить данные, оставленные до исключения, за исключением 2 недели.
Я думаю, что могу использовать транзакцию улья, но искра не сейчас (Версия 2.3), полностью совместимая с таблицами транзакций куста. , кажется, даже мы не можем прочитать куст, если мы включаем транзакцию улья.
И я вижу другой веб-сайт: функция ACID Hive (которая вводит транзакции)не требуется для вставок, только обновления и удаления.Вставки должны поддерживаться в ванильной оболочке Hive. , но я не знаю, почему транзакция не требуется для вставки, и что это значит.
Итак, если я не хочу получать дублированные данныеили как запустить не более одного раза, что мне делать?
Если вы скажете, что между 2 и 3 не будет исключения, но рассмотрим другой случай, если у меня будет много таблиц для записи:
spark.range(2,4).write.mode("append").saveAsTable("batches")
val x=1/0
spark.range(2,4).write.mode("append").saveAsTable("batches2")
Я проверил это, новые записи 2 и 3 были вставлены в таблицу "batch", но не вставлены в "batch2", поэтому, если я хочу вставить снова, я должен вставлять только "batch2"? Но как?Могу ли я узнать, где находится исключение, и какие таблицы я должен вставить снова? Мне нужно вставить много попыток и поймать, но это затрудняет чтение и запись кода. А что насчет исключения, когда диск заполнен или выключен?
Как предотвратить дублирование данных?