type
status
date
slug
summary
tags
category
icon
password
以Spark为例说明Hudi源码中删除数据的实现流程。
删除数据也是写入操作,所以可以找到在
SparkRDDWriteClient
中定义了入口方法。从
table.delete
一步步跟进到HoodieDeleteHelper.execute
方法,这里包含了实现的细节。分成以下几个步骤:
- 推导删除操作的并行度
优先使用用户通过
"hoodie.delete.shuffle.parallelism"
设置了并行度,如果没有则使用HoodieData::getNumPartitions
,即分区的数量。- 对原始数据进行去重
- 找到删除数据所在文件,这里用到了
HoodieIndex.
tagLocation
方法,这是Hudi里索引实现非常重要的方法,感兴趣的同学可以再详细学习下这个地方的实现
- 执行删除数据,这里的
taggedValidRecords
是要删除的数据
这里要进入到
BaseSparkCommitActionExecutor.execute
方法做具体执行但是这里存在一个疑问:
这个方法看起来是把输入数据(inputRecords)进行写入的。但是我们的目标是将这些数据从文件中删除并且生成新的数据文件(cow模式),这里没有看出来怎么把其他数据找到的。留待以后完善。