马哈鱼数据血缘分析器分析case-when语句
马哈鱼数据血缘分析器是一个分析数据血缘关系的平台,可以在线直接递交 SQL 语句进行分析,也可以选择连接指定数据库获取 metadata、从本地上传文件目录、或从指定 git 仓库获取脚本进行分析。
本文介绍如果利用马哈鱼来分析SQL的case-when语句中字段依赖关系。
一个简单的Case
考虑如下SQL:
select
case when a.kamut=1 and b.teur IS null
then 'no locks'
when a.kamut=1
then b.teur
else 'locks'
end teur
from tbl a left join TT b on (a.key=b.key)
SQL的返回字段 teur,它的值直接于case-when的计算结果。
在马哈鱼的设计理念里,case-when被认为是一种特殊的function,但又不同于普通的function,它并没有argument。马哈鱼直接分析case when中的when、then、else子句。
其中,then、else子句的字段直接作为返回结果提供给teur,因此毫无疑问,then、else子句的字段和teur是一个fdd关系。需要考虑的是when子句,teur的结果是间接依赖when子句,满足不同的when子句,会返回不同的then结果,这会影响到最终teur字段的返回值。因此:
when --> fdr --> then --> fdd --> resultset column
此处的when子句非常类似where语句,只不过影响的是then子句,而不是直接影响resultset column。
如图所示:
teur和两个when子句:a.kamut=1 and b.teur IS null, a.kamut=1,产生了fdr关系,因此
a.kamut --> fdr -->teur
, 1 --> fdr --> teur
, b.teur --> fdr --> teur
teur和2个then子句及else子句产生了fdd关系,因此
'no locks' --> fdd --> teur
, b.teur --> fdd --> teur
, 'locks' --> fdd --> teur
其中b.teur和teur直接同时存在了fdd和fdr关系,由于fdd关系优先级高于fdr关系,因此在graph中,只显示出了fdd关系。
稍微复杂一些的Case,嵌套case-when语句
CREATE VIEW FACT_PRCU_FLDR AS
SELECT
PRCU.PRCU_ID AS PRCU_FLDR_ID,
CONCAT(PRCU.PRCU_TYP_ID,'^','^') AS PRCU_FLDR_TYP_ID,
CONCAT('^',PRCU.BUYR_ID) AS BUYR_STAFF_ID,
CONCAT('^',PRCU.MGR_ID) AS MGR_STAFF_ID,
CONCAT(PRCU.BUYR_TEAM,'^') AS BUYR_TEAM_STAFF_ID,
PRCU.CMPLX_CD AS PRCU_CMPLX_ID,
PRCU.RNG_CD AS PRCU_RNG_ID,
(CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL
THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE)
END) AS NO_ORD_ST,
(CASE WHEN PRCU.COMPLETE_FL=1 THEN 'Final'
WHEN (CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL
THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE)
END) > 0 THEN 'Alert!'
ELSE 'Ok'
END) AS FLDR_COMPLETE,
PRCU.PRCU_ID,
PRCU.PRCU_TYP_ID,
PRCU.PRCU_DSCR,
PRCU.EXPT_COMPLETE_DT,
PRCU.CLSD_DT,
PRCU.BUYR_ID,
PRCU.MGR_ID,
PRCU.BUYR_TEAM,
PRCU.CMPLX_CD,
PRCU.RNG_CD,
PRCU.COMPLETE_FL,
COALESCE(PRCU.NO_ST,0) AS NO_ST,
COALESCE(PRCU.NO_ST_COMPLETE, 0) AS NO_ST_COMPLETE,
CVLST.CVL_PRCU_ST_ID_DV AS "LAST_ST_COMPLETE",
COALESCE(PRCU.TOT_AMT, 0) AS TOT_AMT,
PRCU.TBL_LAST_DT,
PRCU.PRCU_TITLE,
(SELECT MIN(CREA_DT) FROM R_PRCU_ST ST WHERE PRCU.PRCU_ID=ST.PRCU_ID AND ST.CREA_DT IS NOT NULL) FLDR_CREA_DT,
COALESCE(PRCU.ORGNL_PRCU_TOT_AM, 0) AS ORGNL_PRCU_TOT_AM,
CONCAT(PRCU.EXT_STOR_UNID,'^R_PRCU_ID')AS EXT_ID,
/*INSIGHT_LITE_COLUMNS_STRT*/
0 AS REC_ST,
PRCU.TBL_LAST_DT AS LAST_PROCESS_DT
/*INSIGHT_LITE_COLUMNS_END*/
/*INSIGHT_COLUMNS_STRTPRCU.REC_ST,PRCU.LAST_PROCESS_DTINSIGHT_COLUMNS_END*/
FROM
R_PRCU_ID PRCU LEFT OUTER JOIN CVL_PRCU_ST_ID CVLST ON
PRCU.LAST_ST_COMPLETE = CVLST.CVL_PRCU_ST_ID_SV
查看其中的case-when语句
(CASE WHEN PRCU.COMPLETE_FL=1 THEN 'Final'
WHEN (CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL
THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE)
END) > 0 THEN 'Alert!'
ELSE 'Ok'
END) AS FLDR_COMPLETE
可以看到ResultSet Column FLDR_COMPLETE 被一个case-when语句影响,而其中的第二个When子句又包含了一个case-when语句。
当case-when语句整体作为when子句时,这个子句的fdd关系,实际上是外层when子句fdr关系的一部分,即:
then -->fdd-->when-->fdr-->FLDR_COMPLETE
因此内层case-when的then子句和resultset column FLDR_COMPLETE的关系是fdr关系,而不是fdd关系。
如图所示,最终影响FLDR_COMPLETE的fdd字段,仅有外层case-when的then语句和else语句,其他的都显示为fdr关系。
以上就是对马哈鱼分析case-when语句的处理流程介绍,关于马哈鱼的等多功能,请参考下面链接:
参考
马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn
马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com
马哈鱼数据血缘分析器分析case-when语句的更多相关文章
- 利用job提升马哈鱼数据血缘分析效率
利用job提升马哈鱼数据血缘分析效率 一.Job基本知识 前面文章中已介绍马哈鱼的基本功能,其中一个是job,job其实是一个任务集合处理的概念,就是让用户通过job,可以一次递交所有需要处理的 SQ ...
- 马哈鱼血缘分析工具部署介绍--win 10
马哈鱼血缘分析工具部署介绍--win 10 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,马哈鱼是国内少有的一款专业且易用的血缘分析工具.本 ...
- 使用grabit分析mysql数据库中的数据血缘关系
使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...
- 马哈鱼间接数据流中的where-group-by子句
马哈鱼间接数据流中的where-group-by子句 本文介绍间接数据流中的where-group-by子句. 1.列在where子句中 WHERE子句中源表中的某些列不影响目标列,但对所选行集至关重 ...
- shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...
- 数据治理中Oracle SQL和存储过程的数据血缘分析
数据治理中Oracle SQL和存储过程的数据血缘分析 数据治理中的一个重要基础工作是分析组织中数据的血缘关系.有了完整的数据血缘关系,我们可以用它进行数据溯源.表和字段变更的影响分析.数据合规性 ...
- Wireshark分析器分析数据流过程
Wireshark分析器分析数据流过程 分析包是Wireshark最强大的功能之一.分析数据流过程就是将数据转换为可以理解的请求.应答.拒绝和重发等.帧包括了从捕获引擎或监听库到核心引擎的信息.Wir ...
- Impala简介PB级大数据实时查询分析引擎
1.Impala简介 • Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能. • 基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等优点 ...
- 如何使用代理IP进行数据抓取,PHP爬虫抓取亚马逊商品数据
什么是代理?什么情况下会用到代理IP? 代理服务器(Proxy Server),其功能就是代用户去取得网络信息,然后返回给用户.形象的说:它是网络信息的中转站.通过代理IP访问目标站,可以隐藏用户的真 ...
随机推荐
- Windows服务器如何磁盘分区,Windows服务器磁盘分区常见的三种
原文来自:https://www.sohu.com/a/272133008_100217178 我怕链接会失效,故转载此篇文章,解析得很透彻,一目了然!记录. -------------------- ...
- CobaltStrike4.0——渗透神器
CobaltStrike4.0--渗透神器 Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS,其拥有多种协议主机上线方式,集成了 ...
- 深入了解jvm-2Edition-虚拟机字节码执行引擎
1.概述 Java虚拟机规范制定了虚拟机字节码执行引擎的概念模型,本章主要从概念模型层次来探究虚拟机的方法调用和字节码执行. 方法调用中,最核心的,是如何确定调用的方法,也就是方法的分派. 字节码执行 ...
- PTA 朋友圈 (25 分) 代码详解 (并查集)
1.题目要求: 某学校有N个学生,形成M个俱乐部.每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈.一个学生可以同时属于若干个不同的俱乐部.根据"我的朋友的朋友也是我的朋友" ...
- 【加解密】使用CFSSL生成证书并使用gRPC验证证书
写在前面的话 CFSSL是CloudFlare旗下的PKI/TLS工具.可以用于数字签名,签名验证和TLS证书捆绑的命令行工具和HTTP API服务器. 是使用golang语言开发的证书工具. 官方地 ...
- SpringBoot开发七-开发注册功能
需求介绍-开发注册功能 首先访问注册页面-点击顶部的链接,打开注册页面 提交注册数据 通过表单提交数据 服务端验证账号是否存在,邮箱是否已经注册 服务端发送激活邮件 激活注册账号 点击邮件中的链接,访 ...
- Required request body is missing-请求接口报错
一.问题由来 自己目前在做一个小程序的后台,已经写好了项目中的很多的接口,同时也在进行一些修改,比如添加拦截器,统一校验一个固定的参数是否正确. 在自己添加拦截器之前,这些接口都可以正常访问,可是在添 ...
- 带头撸抽奖系统,DDD + RPC 开发分布式架构!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.咋,撸个项目? 总有粉丝伙伴问傅哥,有没有能上手练习技术的项目,现在学了这么多技术知识.看 ...
- WPF material UI 的使用
网站:https://github.com/vasanthmes/WPF-Dashboard-UI-Material-Design-Concept theme <Application x:Cl ...
- Windows 10 - View SIM Card Number
If your device isn't running Windows 10, refer to the Windows 8 instructions. From the Windows desk ...