基于MaxCompute InformationSchema进行血缘关系分析
一、需求场景分析
在实际的数据平台运营管理过程中,数据表的规模往往随着更多业务数据的接入以及数据应用的建设而逐渐增长到非常大的规模,数据管理人员往往希望能够利用元数据的分析来更好地掌握不同数据表的血缘关系,从而分析出数据的上下游依赖关系。
本文将介绍如何去根据MaxCompute InformationSchema中作业ID的输入输出表来分析出某张表的血缘关系。
二、方案设计思路
MaxCompute Information_Schema提供了访问表的作业明细数据tasks_history,该表中有作业ID、input_tables、output_tables字段记录表的上下游依赖关系。根据这三个字段统计分析出表的血缘关系
1、根据某1天的作业历史,通过获取tasks_history表里的input_tables、output_tables、作业ID字段的详细信息,然后分析统计一定时间内的各个表的上下游依赖关系。
2、根据表上下游依赖推测出血缘关系。
三、方案实现方法
参考示例一:
(1)根据作业ID查询某表上下游依赖SQL处理如下:
select
t2.input_table,
t1.inst_id,
replace(replace(t1.output_tables,"[",""),"]","") as output_table
from information_schema.tasks_history t1
left join
(select---去除表开始和结尾的[ ]trans_array(1,",",inst_id,replace(replace(input_tables,"[",""),"]","")) as (inst_id,input_table)from information_schema.tasks_history where ds = 20190902
)t2
on t1.inst_id = t2.inst_id
where (replace(replace(t1.output_tables,"[",""),"]","")) <> ""
order by t2.input_table limit 1000;
结果如下图所示:
(2)根据结果可以分析得出每张表张表的输入表输出表以及连接的作业ID,即每张表的血缘关系。
血缘关系位图如下图所示:
中间连线为作业ID,连线起始为输入表,箭头所指方向为输出表。
参考示例二:
以下方式是通过设置分区,结合DataWorks去分析血缘关系:
(1)设计存储结果表Schema
CREATE TABLE IF NOT EXISTS dim_meta_tasks_history_a
(stat_date STRING COMMENT '统计日期',project_name STRING COMMENT '项目名称',task_id STRING COMMENT '作业ID',start_time STRING COMMENT '开始时间',end_time STRING COMMENT '结束时间',input_table STRING COMMENT '输入表',output_table STRING COMMENT '输出表',etl_date STRING COMMENT 'ETL运行时间'
);
(2)关键解析sql
SELECT
'${yesterday}' AS stat_date
,'project_name' AS project_name
,a.inst_id AS task_id
,start_time AS start_time
,end_time AS end_time
,a.input_table AS input_table
,a.output_table AS output_table
,GETDATE() AS etl_date
FROM (SELECT t2.input_table ,t1.inst_id,replace(replace(t1.input_tables,"[",""),"]","") AS output_table,start_time ,end_time FROM (SELECT*,ROW_NUMBER() OVER(PARTITION BY output_tables ORDER BY end_time DESC) AS rowsFROM information_schema.tasks_historyWHERE operation_text LIKE 'INSERT OVERWRITE TABLE%'AND (start_time >= TO_DATE('${yesterday}','yyyy-mm-dd')andend_time <= DATEADD(TO_DATE('${yesterday}','yyyy-mm-dd'),8,'hh'))AND(replace(replace(output_tables,"[",""),"]",""))<>""AND ds = CONCAT(SUBSTR('${yesterday}',1,4),SUBSTR('${yesterday}',6,2),SUBSTR('${yesterday}',9,2)))t1LEFT JOIN(SELECT TRANS_ARRAY(1,",",inst_id,replace(replace(input_tables,"[",""),"]","")) AS (inst_id,input_table)FROM information_schema.tasks_historyWHERE ds = CONCAT(SUBSTR('${yesterday}',1,4),SUBSTR('${yesterday}',6,2),SUBSTR('${yesterday}',9,2)))t2ON t1.inst_id = t2.inst_idwhere t1.rows = 1
) a
WHERE a.input_table is not null
;
(3)任务依赖关系
(4)最终血缘关系
以上血缘关系的分析是根据自己的思路实践去完成。真实的业务场景需要大家一起去验证。所以希望大家有需要的可以根据自己的业务需求去做相应的sql修改。如果有发现处理不当的地方希望多多指教。我在做相应的调整。
欢迎加入“MaxCompute开发者社区2群”,点击链接申请加入或扫描二维码
https://h5.dingtalk.com/invite-page/index.html?bizSource=____source____&corpId=dingb682fb31ec15e09f35c2f4657eb6378f&inviterUid=E3F28CD2308408A8&encodeDeptId=0054DC2B53AFE745
原文链接
本文为云栖社区原创内容,未经允许不得转载。
基于MaxCompute InformationSchema进行血缘关系分析相关推荐
- 【勉强采用】反欺诈之血缘关系分析和犯罪传导监测
文前小故事:隔壁阿姨最近总是带个包鬼鬼祟祟地出去,妈妈好奇,今天跑过去串门,问她最近在忙什么,她一下就忍不住哭了起来:我被人骗了--好多人去要钱--我把我姐和我女儿也坑了--那是我姐夫的安葬费--还有 ...
- 【采用】反欺诈之血缘关系分析和犯罪传导监测 - 知识图谱
近期,一银行找到我,说他们现在有一个立项,题目是<数据血缘关系智能分析和犯罪风险传导监测>,希望听听我的建议.今天正好听到妈妈跟我说起这件事,就想,还是针对这个课题,好好整理下思路,讲一讲 ...
- 【数据可视化】免费开源BI工具 DataEase 之血缘关系分析
近期,DataEase 发布的版本 V1.8 版本中,在系统管理模块新增了血缘分析功能,可以支持对数据源.数据集.仪表板做关联分析,支持按表格查看和按关系图查看,并且在删除数据源.数据集时,也支持查看 ...
- 基于签证数据的国际关系分析研究
摘 要 摘要内容:这次实验采用"世界-区域-国家"的数据立方体思想,从宏观到微观的分析角度分析签证政策与国际形势的联系.依据全世界199个国家和地区的签证数据,通过Gephi.po ...
- 【阿里云】基于 MaxCompute 的大数据 BI 分析最佳实践学习
文章目录 一.前言 二.搭建电商网站Demo 2.1.创建专有网络VPC 2.2.创建并配置ECS 2.3.创建RDS数据库 2.4.电商网站初始化 2.5.构造用户数据 三.ADB数据库配置 3.1 ...
- 推荐两则基于解析SQL的表间血缘关系工具
推荐两则基于解析SQL的表间血缘关系工具 基于大数据脚本,可以用Apache Atlas做元数据的血缘关系分析,很多金融机构仍然在使用老的遗留系统,比如老版本的Hive.数据库存储过程,如何反查表间的 ...
- 马哈鱼分析数据库中metadata的血缘关系
马哈鱼数据血缘分析器是一个分析数据血缘关系的在线平台,用他可以获取指定数据库的 metadata,通过获取的 DDL 分析其中存储过程,视图等所依赖的各种数据源表. 本文介绍利用马哈鱼从 SQLSer ...
- 如何基于MaxCompute快速打通数据仓库和数据湖的湖仓一体实践
简介: MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速.全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户 ...
- hive血缘关系之输入表与目标表的解析
接了一个新需求:需要做数据仓库的血缘关系.正所谓兵来将挡水来土掩,那咱就动手吧. 血缘关系是数据治理的一块,其实有专门的第三方数据治理框架,但考虑到目前的线上环境已经趋于稳定,引入新的框架无疑是劳民伤 ...
最新文章
- ASP.NET Web API中的参数绑定总结
- 神经网络第三部分:网络Neural Networks, Part 3: The Network
- 程序组件通信方案集锦
- Python Scrapy创建spider及结果导出命令
- PHP表单提交后页面跳转,PHP在表单提交后重定向到另一个页面
- 【专栏】国内外物联网平台初探(篇二:阿里云物联网套件)
- Spring4-@PostConstruct和@PreDestroy注解的使用
- 计算机网络复习-物理层
- matlab模拟小球碰撞,在MATLAB中实现模拟小球上抛和反弹运动
- cpu发热测试软件,如何检测CPU的温度?这些软件少不了
- openg和VS2010的环境配置
- 在线DES加密/解密工具
- 论傻瓜交换机接到有vlan的网管交换机为什么可以通信
- Vision Transformer模型/论文详解
- 区块链浏览器构建实战
- 基于maven自动构建和部署工具-JDeploy
- vue 实现ps图片编辑_详解vue项目中实现图片裁剪功能
- Caltech-UCSD Birds 200 (CUB) 数据库预处理
- 麒麟990银河麒麟SP1升级补丁(0709、1020)升级到(1228)
- SpaceShooter打飞机教程笔记(二)
热门文章
- 2008文件服务器迁移,Windows2008及早期服务器DHCP的数据迁移方法
- java工具栏的工具提示,动态菜单项、状态条提示、工具条提示问题
- postscript怎么打开_怎么把在学习中用的Adobe PDF文件转换成Microsoft office Word
- python获取坐标颜色,python – 根据一组坐标的数据着色地图
- python继承如何进行引用传递的区别_python在什么情况下会引用传递呢?
- python提示对话框自动关闭_Python - tkinter:打开和关闭对话框窗口
- linux date fmt,date_format(date,frm) 详解
- php获取html中文本框内容_小猿圈Python入门之批量获取html内body内容的方法
- DS系列服务器硬盘扇区,硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)...
- fir滤波器matlab实现_关于FIRamp;IIR系统的算法说明以及结果验证(1)