当前位置: 首页 > news >正文

马哈鱼SQLFLow对SQL Server OUTPUT Clause 的数据血缘分析

SQL Server OUTPUT Clause 会对 SQL 语句的血缘分析产生影响,如果忽略对 OUTPUT Clause 的分析,那么将漏掉一些关键的数据血缘关系,从而影响数据血缘分析的准确性,进而影响组织的数据治理质量。

Gudu SQLFlow 可以对 SQL Server 中的 OUTPUT Clause 提供完整的数据血缘分析支持。

以下是 Microsoft SQL Server 官方文档对 OUTPUT Clause 的描述。从中我们可以知道,OUTPUT Clause 可以从 INSERT, UPDATE, DELETE, or MERGE 返回变动的的数据集,我们可以对这些返回的数据进行再加工,例如插入到其他目标表中,从而在不同的表中建立数据关联,形成数据血缘关系。

Returns information from, or expressions based on, each row affected by an INSERT, UPDATE, DELETE, or MERGE statement. These results can be returned to the processing application for use in such things as confirmation messages, archiving, and other such application requirements. The results can also be inserted into a table or table variable. Additionally, you can capture the results of an OUTPUT clause in a nested INSERT, UPDATE, DELETE, or MERGE statement, and insert those results into a target table or view.

下面我们以一个 SQL Server 存储过程为例,这个存储过程的主体部分是 Merge 语句。这个 merge 语句的作用是如果为新纪录,则插入到 dbo.Basel3, 如果是已有纪录,则进行日期的更新。但同时利用 OUTPUT Clause 和 外部的 Insert 语句,把这条更新的纪录再次插入到 dbo.Basel3, 只是 EffectiveFromDate 这个字段的值用当天的日期,以形成和在 merge 中直接插入那条纪录的差别。

CREATE PROCEDURE [dbo].[sampleProcedure] (@Period DATETIME)
AS
SET NOCOUNT ON;INSERT INTO dbo.Basel3
(AccountNumber,PeriodKey,ExposureAmount
)
SELECTAccountNumber,PeriodKey,ExposureAmount
FROM
(MERGE INTO [dbo].[Basel3] AS MergeTargetUSING(SELECT DISTINCTtmp.AccountNumber,tmp.PeriodKey,tmp.ExposureAmountFROM dbo.TmpBasel3 tmp (NOLOCK)LEFT JOIN dbo.Basel3 olb (NOLOCK)ON tmp.AccountNumber = olb.AccountNumberAND olb.CurrentIndicator = 1WHERE olb.Basel3Indicator <> tmp.Basel3Indicator	) AS MergeSourceON MergeTarget.[AccountNumber] = MergeSource.[AccountNumber]AND MergeTarget.[CurrentIndicator] = 1WHEN NOT MATCHEDTHEN INSERT(	AccountNumber,PeriodKey,ExposureAmount)VALUES(MergeSource.AccountNumber,MergeSource.PeriodKey,MergeSource.ExposureAmount)WHEN MATCHEDTHEN UPDATESET MergeTarget.[CurrentIndicator] = 0,MergeTarget.[EffectiveToDate] = GETDATE()OUTPUT $Action AS [ActionOut]	,MergeSource.AccountNumber,MergeSource.PeriodKey,MergeSource.ExposureAmount) AS MergeOutWHERE MergeOut.[ActionOut] = 'UPDATE'

Gudu SQLFlow 分析后,准确给出了该 SQL Server 存储过程的数据血缘。

我们可以看到 dbo.Basel3 这个表的数据不但有从 Merge Insert 语句插入的,也有通过 Merge OUTPUT Clause 返回,然后再通过 Insert 语句插入的。

可视化的结果如下:

在这里插入图片描述

参考

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

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

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

http://www.lryc.cn/news/66208.html

相关文章:

  • 5/8~5/9总结
  • java 数组创建的方法
  • HID Relay, 有线键盘转蓝牙项目学习:记一次失败的尝试
  • 天猫数据分析:2023年Q1天猫净水器品牌销售TOP10排行榜
  • TweenMax 源码阅读
  • B/S医院手术麻醉管理系统源码:麻醉知情同意书模板
  • postman 的 console 窗口,助力 http 请求错误时的问题排查
  • 破事精英2◎爬向未来
  • java中session各种使用场景实例,这篇文章就够了。
  • 【AWS入门】利用CloudWatch监控EC2的CPU负载情况
  • 如何使用AndroidStudio编写Java程序
  • 如何充分利用实时聊天系统?
  • [C++基础]-类和对象(下)
  • NP完全性PART1:多项式时间与形式化语言体系
  • 685页40万字某省市场监管智慧应用一体化项目(word可编辑)
  • 【cutlass】cuTe 01 layout
  • 迁移学习
  • 基于session实现共享登录
  • Hudi学习笔记1
  • 嚯——ChatGPT是很强,但也会胡说八道。。。
  • Springboot常用注解总结
  • 让chatGPT给我写一个CSS,我太蠢了
  • 华为OD题目:分奖金
  • 【算法题】2401. 最长优雅子数组
  • 【Vue】Vue快速入门
  • 二本菜鸡,颓废两年的自我救赎
  • Spring boot 常用注解
  • mysql从零开始(05)----锁
  • 《Linux 内核设计与实现》03. 进程管理
  • 深入探究HDFS:高可靠、高可扩展、高吞吐量的分布式文件系统【上进小菜猪大数据系列】