🗒️Hudi|增量读源码
2023-6-1
| 2023-6-12
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

SQL样例

建表,插入数据
查看timeline,并且构建视图
在创建和查询增量视图的时候就可以开启debug源代码了

源码分析

区分增量/全量的入口类还是DefaultSource
IncrementalRelation就是我们需要研究的类,进去看下
buildScan是一个继承的方法,返回值是一个RDD,这应该是我们感兴趣的方法
notion image
buildScan方法很长,这里一步步分析:
commitsTimelineToReturn从timeline上获取了起止时间范围里的所有commit。对于一次查询,可能会涉及到多个commit。
对于commitsTimelineToReturn里的每一个commit,将涉及到的文件保存到regularFileIdToFullPath中。
regularFileIdToFullPath是一个map结构,其中key是FileId,value是文件名。因此对一个文件的多次提交最后只会有一个文件被记录(也就是上面的commit必须是从小到大排序过的)。
regularFileIdToFullPath复制到filteredRegularFullPaths(这一步还没看懂)
filteredRegularFullPaths里保存了有关的文件,根据这些文件构建dataframe,并且在filter条件里加入对COMMIT_TIME_METADATA_FIELD这个元数据的过滤:大于等于开始时间,小于等于结束时间。

拓展

如果我们删除了数据,能通过copy_to_temp_view查询到么?
不可以,按照上面的分析,只查询了最近的文件,而这个文件里不会包含这条数据。
 
  • Hudi
  • Hudi|删除数据实现Hudi|查询加速
    Loading...
    目录