我在阅读文章时经常看到“增量加载”这样的表述
真正(技术上)意味着什么?这意味着什么?
欢迎使用用例进行解释。
通常意味着仅将自上次加载以来发生更改的记录(插入、更新和删除,如果适用)加载到仓库中;而不是将所有数据(所有记录,包括自上次加载以来未更改的记录)完全加载到仓库中。
优点是它减少了系统间传输的数据量,因为根据数据量,完全加载可能需要数小时/数天才能完成。
主要缺点是可维护性。 在完全加载的情况下,如果出现错误,您可以重新运行整个加载,而无需在清理/准备方面进行太多其他操作。 对于增量加载,文件通常需要按顺序加载。 因此,如果您的某一批次出现问题,其他批次就会在该批次后面排队,直到您纠正为止。 或者,您可能会发现几天前的某个批次有错误,需要在更正后重新加载该批次,然后再加载后续的每个批次,以确保仓库中的数据一致。
增量加载用于将数据从一个存储库(数据库)移动到另一个存储库时。
非增量加载是指目标端已将源端的全部数据推送到目标端。
增量只会传递新的和修改的数据。
具体例子:
一个公司可能有两个平台,一个 处理订单,以及一个单独的 会计系统。 账目 部门输入新客户详细信息 但必须进入会计系统 确保这些客户出现在 订单处理系统。
为此,它会每晚运行批处理作业 从会计发送数据 系统到订单系统。
如果他们删除所有客户 订单系统中的详细信息以及 为所有顾客补充 会计系统然后他们会 正在执行非增量负载。
如果他们只发送新的 客户和有过的客户 改变了他们将要表演的 增量负载。
if (len(tgt.collect())==0):
tgt_1=source_df
max_date=source_df.agg(max(col("last_updated"))).collect()[0][0]
dff=[
('table_1',max_date)
]
dff=spark.createDataFrame(dff,control_table_schema)
dff.write.mode("append").saveAsTable("hive_metastore.in1648.control_tb")
else:
ctrl=spark.read.table("hive_metastore.in1648.control_tb")
max_date=ctrl.agg(max(col("last_mod_date"))).collect()[0][0]
filtered=source_df.filter(source_df.last_updated>max_date)
tgt_1=filtered
tgt_1.write.mode("append").saveAsTable("hive_metastore.in1648.target_table_inc_new_2")