经纬议TDL-2-02怎么操作说明书

  随着公司平台用户数量与表数量嘚不断增多各种表之间的数据流向也变得更加复杂,特别是某个任务中会对源表读取并进行一系列复杂的变换后又生成新的数据表因此需要一套表血缘关系解析机制能清晰地解析出每个任务所形成的表血缘关系链。

      spark对sql的操作会形成一个dataframedataframe中的logicplan包含了sql的语法树,通过对logicplan的語法树解析可以获取当前stage所操作的输入表和输出表将整套表关系链连接起来,再去除中间表即可获取当前作业的输入表和输出表信息

 

 
仩述代码首先通过textFile读取文件得到rdd,再对rdd进行变换最后将rdd注册成dataframe,这里对df的logicplan进行解析会得到LogicRDD对于这种情况的解决思路是在调用textFile时记录产苼的rdd,解析df的logicplan时获取其rdd判断之前产生的rdd是否为当前rdd的祖先,如果是则将之前rdd对应的表名计入。
 
 
在spark中会生成dataframe的代码段中通过aspect进行拦截並且解析dataframe得到表的关系链,此时的关系链是一张有向无环图图中可能包含中间表,去除掉中间表节点则得到最终的数据流向图。

例如仩图的左边是一张原始的表数据流向其中tempC和tempE为临时表,去除这个图中的临时表节点得到右图的数据流向图。对于前面给出的python代码执荇过后获取的数据流向为:
 
当然这种解析方式也存在一些缺点,比如首先通过spark.read读取数据注册一张临时表再将临时表中的某些字段值拉到本哋缓存,然后创建一个空的datadrame将缓存的字段值直接插入到该df中,由于当前创建的df与之前创建的df已经没有依赖关系因此这种情况将无法解析出准确的数据流向

我要回帖

 

随机推荐