我每周都有要插入的数据,例如,我插入的第一周:
spark.range(0,2).write.mode("append").saveAsTable("batches")
然后我插入第二周:
spark.range(2,4).write.mode("append").saveAsTable("batches")
我担心插入id为2的记录时发生一些异常,没有插入3,然后我再次插入第二周的数据,会有两个2。
我用谷歌搜索, 蜂巢不适用于删除特定的记录集:link,因此我无法删除第二周之前剩余的数据。
我认为我可以使用配置单元事务,但是spark is not right now (2.3 version) fully compliant with hive transactional tables.似乎启用了配置单元事务也无法读取配置单元。
我看到了另一个网站:Hive's ACID feature (which introduces transactions) is not required for inserts, only updates and deletes. Inserts should be supported on a vanilla Hive shell.,但是我不明白为什么插入不需要交易,这是什么意思。
那么,如果我不想获取重复的数据,或者像一次运行一样,该怎么办?
如果您说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已插入表“ batches”中,但未插入“ batches2”中,因此,如果我要再次插入,必须仅插入“ batches2”?但是我怎么知道例外在哪里,我应该再次插入哪些表?我必须插入许多try and catch,但是这会使代码难以读写。那例外是磁盘已满或电源关闭了吗?
如何防止重复数据?