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