type
status
date
slug
summary
tags
category
icon
password
SQL样例
建表,插入数据
查看timeline,并且构建视图
在创建和查询增量视图的时候就可以开启debug源代码了
源码分析
区分增量/全量的入口类还是
DefaultSource
IncrementalRelation
就是我们需要研究的类,进去看下buildScan
是一个继承的方法,返回值是一个RDD,这应该是我们感兴趣的方法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查询到么?
不可以,按照上面的分析,只查询了最近的文件,而这个文件里不会包含这条数据。