动态 SQL 语句数据血缘关系(lineage)的发现

2021/08/12 马哈鱼 共 996 字,约 3 分钟

动态 SQL 语句是在运行时临时组合而成,程序的执行路径、数据库中的数据、代码中的变量值不同会导致最终形成 SQL 语句的不同。 马哈鱼数据血缘分析器支持分析基本的动态 SQL 语句,并根据实际情况对结果进行模拟。之所以说是模拟,是因为实际动态 SQL 语句是在 真实数据库环境中运行的,会根据实际的数据合成 SQL 文本, 而马哈鱼数据血缘分析器工作不需要连接到实际的数据库,通过对 SQL 语句的分析,给出数据血缘关系。

Oracle

以 Oracle PL/SQL 中的这段代码为例:

EXECUTE IMMEDIATE 'CREATE TABLE USRTEMP.T$_DW_M_MTH_LT_POST_T2_'||TO_CHAR(V_PROCESSDATE,'YYYYMMDD')||'_'||V_THREAD||q'[ AS
	SELECT MSISDN,LAC_SC,CELL_SC,DEPARTAMENTO_DES,TO_CHAR(TRUNC(LAST_TRAFFIC_DATE),'YYYYMMDD') ORIGEN_DES
	FROM
	(  
	  SELECT /*+ PARALLEL (20) */
		U.MSISDN,U.LAC_SC,U.CELL_SC,U.DEPARTAMENTO_DES
		,U.LAST_TRAFFIC_DATE,ROW_NUMBER() OVER(PARTITION BY U.MSISDN ORDER BY U.LAST_TRAFFIC_DATE DESC) R
	  FROM USRTEMP.T$_DW_M_MTH_LT_POST_T1_]'||TO_CHAR(V_PROCESSDATE,'YYYYMMDD')||'_'||V_THREAD||q'[ U
	)
	WHERE R=1
	]';

需要创建的目标表的表名是动态拼接而成的:USRTEMP.T$_DW_M_MTH_LT_POST_T2_'||TO_CHAR(V_PROCESSDATE,'YYYYMMDD')||'_'||V_THREAD

源数据的表也是动态拼接而成的: USRTEMP.T$_DW_M_MTH_LT_POST_T1_]'||TO_CHAR(V_PROCESSDATE,'YYYYMMDD')||'_'||V_THREAD

我们的目的是在源数据表和目标表直接建立数据血缘关系,下图就是 SQLFlow 分析后给出的结果:

image.png

从结果来说还是比较令人满意的。

SQL Server

待补充

文档信息

Search

    Table of Contents