马哈鱼SQLFLow数据血缘分析器分析SQL中的函数

马哈鱼数据血缘分析器是一个分析数据血缘关系的平台,支持20多种数据库的分析,满足数据血缘95%的分析场景,对表级,字段级的血缘关系有强大的分析能力,支持对大量复杂的数据快速准确的分析,并通过操作便捷的UI界面展示分析后的血缘。

关于马哈鱼的强大能力后续会陆续介绍,本文主要介绍如何利用马哈鱼分析SQL中的函数。

一个简单的Case,利用SQLFLow分析聚合函数

SQL:

insert into  vsal (
	deptno,
	sal_sum
)
  SELECT emp.deptno, 
         SUM(emp.sal) sal_sum 
  FROM   scott.emp emp
  WHERE  city = 'NYC' 
  group by emp.deptno;

SQLFLow分析后的结果:
马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第1张图片

可以直观的看出 scott.emp.deptno->vsal.deptno,scott.emp.sal->vsal.sal_num两个直接关系,而对于其中的sal_num实际上是来自于SUM(scott.emp.sal)的聚合,在SQLFLow中默认是不显示这些function的关系,查看需要打开show function功能后就能看到聚合函数的血缘。如下:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第2张图片

结果:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第3张图片

可以看出vasl.sal_sum来自SUM聚合之后的结果,打开settings中show transform功能,可以看到具体的聚合函数code,从而得到完整的血缘:scott.emp.sal->SUM(scott.emp.sql)->vsal.sal_num

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第4张图片

复杂一些的Case,多个函数并结合嵌套结构

SQL:

insert into lineage_fact
        (
            fact_guid
            ,first_execution_datetime
            ,last_execution_datetime
            ,mio_delta_hash
            ,mio_create_date_time
            ,mio_created_by
            ,mio_update_date_time
            ,mio_updated_by
            ,mio_source_system_cde
            ,user_id
          	,record_type
            ,predicates
            ,database_instance
      )
    select
           md5(nvl(record_type,'-')     ||
                        nvl(user_id,'-')     ||       
                        nvl(database_instance,'-')   
                               ) as fact_guid
            ,first_execution_datetime
            ,last_execution_datetime      
            ,md5(nvl(to_char(last_execution_datetime , 'MM-DD-YYYY') , '-' )) as mio_delta_hash         
            ,getdate()           as mio_create_date_time
            ,'mio_glue_system-mio099_t_lineage_fact_load_prod'  as mio_created_by
            ,getdate()           as mio_update_date_time
            ,'mio_glue_system-mio099_t_lineage_fact_load_prod'  as mio_updated_by
            ,'sqlflow'       as mio_source_system_cde
            ,user_id
          	,record_type
            ,predicates
            ,database_instance
        from (
                select
                       (nullif(record_type,'nan'))                      as record_type
                        ,(nullif(user_id,'nan'))                    as user_id
                        ,(nullif(database_instance,'nan'))                    as database_instance
                        ,listagg(distinct nullif(predicates,'nan'))              as predicates       
                        ,min(TO_timestamp(timestamp_min, 'YYYY-MM-DD HH:MI:SS') )      as first_execution_datetime
                        ,max(TO_timestamp(timestamp_max, 'YYYY-MM-DD HH:MI:SS') )      as last_execution_datetime   
                    from spectrum.stg099
                    group by 1,2,3
            );

这是一个redshift数据库的SQL,功能就是收集spectrum.stg099根据record_type,user_id,database_instance分组,predicates,first_execution_datetime,last_execution_datetime聚合之后的数据,并且根据这些数据再聚合生成fact_guid,mio_delta_hash和其他字段写入lineage_fact表。这样一个相对复杂的SQL,通过人工去核对血缘会是一件比较耗时的工作,但是通过SQLFLow解析之后再看就能很直观快速的找到其中的血缘,如下:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第5张图片

从分析后的UI可以直观的看出,lineage_fact表的各个字段都来自于spectrum.stg099表的哪些字段,而对于其中具体的细节来源,例如:

md5(nvl(record_type,'-')     ||
    nvl(user_id,'-')     ||       
    nvl(database_instance,'-')   
   ) as fact_guid

fact_guid字段来源于record_type,user_id,database_instance三个字段的聚合,如下:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第6张图片

从图中可以看出,fact_guid是来自于对record_type,user_id,database_instance三个字段的MD5聚合,然后继续回溯,可以看出这三个字段最终是来源于nullif(record_type,'nan'),nullif(user_id,'nan'),nullif(database_instance,'nan')处理之后的结果:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第7张图片

并且如果想要查看节点在整个解析的SQL中的代码,SQLFLow也能强大的支持,如下:

马哈鱼SQLFLow数据血缘分析器分析SQL中的函数_第8张图片

整个SQL中直接关系所有涉及到的函数都成功被分析出来,可以直观的看出相应的数据流。

以上就是对马哈鱼SQLFLow分析分析SQL中的聚合函数,关于马哈鱼的等多功能,请参考下面链接:

参考

马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn

马哈鱼数据血缘关系分析工具英文网站: https://docs.gudusoft.com

马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com

你可能感兴趣的:(SQLFlow,sql,数据库)