基于maxcomputeinformationschema进行血缘关系分析

yunqishequ yunqishequ     2023-05-02     483

关键词:

一、需求场景分析 在实际的数据平台运营管理过程中,数据表的规模往往随着更多业务数据的接入以及数据应用的建设而逐渐增长到非常大的规模,数据管理人员往往希望能够利用元数据的分析来更好地掌握不同数据表的血缘关系,从而分析出数据的上下游依赖关系。 本文将介绍如何去根据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 rows FROM information_schema.tasks_history WHERE operation_text LIKE ‘INSERT OVERWRITE TABLE%‘ AND ( start_time >= TO_DATE(‘$yesterday‘,‘yyyy-mm-dd‘) and end_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)) )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 = CONCAT(SUBSTR(‘$yesterday‘,1,4),SUBSTR(‘$yesterday‘,6,2),SUBSTR(‘$yesterday‘,9,2)) )t2 ON t1.inst_id = t2.inst_id where t1.rows = 1 ) a WHERE a.input_table is not null ;
(3)任务依赖关系
技术图片
 
技术图片
 
(4)最终血缘关系
技术图片
 
以上血缘关系的分析是根据自己的思路实践去完成。真实的业务场景需要大家一起去验证。所以希望大家有需要的可以根据自己的业务需求去做相应的sql修改。如果有发现处理不当的地方希望多多指教。我在做相应的调整。
 
 
 
本文为阿里云内容,未经允许不得转载。

为啥 Kafka 是基于拉的而不是基于推的?

】为啥Kafka是基于拉的而不是基于推的?【英文标题】:WhyisKafkapull-basedinsteadofpush-based?为什么Kafka是基于拉的而不是基于推的?【发布时间】:2017-01-2722:30:46【问题描述】:为什么Kafka是基于拉的而不是基于推的?我同意Kafka提供... 查看详情

基于项目和基于内容的协同过滤有啥区别?

】基于项目和基于内容的协同过滤有啥区别?【英文标题】:What\'sdifferencebetweenitem-basedandcontent-basedcollaborativefiltering?基于项目和基于内容的协同过滤有什么区别?【发布时间】:2013-04-2815:23:02【问题描述】:我对基于项目的推... 查看详情

基于磁盘的基于文档的存储

】基于磁盘的基于文档的存储【英文标题】:Diskbaseddocumentbasedstorage【发布时间】:2012-02-2509:34:17【问题描述】:网络上有免费的基于磁盘的高度可扩展的NoSQL存储系统吗?SQLServer的好处是它可以扩展,但是将我的项目迁移到SQL... 查看详情

依存句法分析:基于图的依存句法分析基于转移的依存句法分析基于神经网络的依存句法分析

依存句法分析:基于图的依存句法分析、基于转移的依存句法分析、基于神经网络的依存句法分析目录 查看详情

事件处理:基于功能的组件与基于类的组件

】事件处理:基于功能的组件与基于类的组件【英文标题】:Eventhandling:functionalbasedcomponentvsclassbasedcomponent【发布时间】:2019-07-1016:49:41【问题描述】:这是我的第一个React应用程序(react@16.8.1)。我试图找出为什么onClick事件在... 查看详情

显示基于文化的日期,但基于模式的时间

】显示基于文化的日期,但基于模式的时间【英文标题】:DisplayDatebasedonculturebutTimebasedonapattern【发布时间】:2010-06-0412:31:41【问题描述】:有人知道怎么显示吗基于CurrentCulture的日期时间的日期,但时间遵循此模式"HH:mm:ss.ff... 查看详情

基于角色与基于资源的权限访问控制

  基于角色的权限访问控制RBAC(role-basedaccesscontrol)是以角色为中心进行的访问控制,也就是判断主体subject是那个角色的方式进行权限访问控制,是粗粒度的  基于资源的权限访问控制RBAC(resource-basedaccesscontrol)是以资源... 查看详情

基于主机的容器与基于图像的容器

】基于主机的容器与基于图像的容器【英文标题】:Host-based-containersvsimage-based-containers【发布时间】:2014-12-2614:46:03【问题描述】:基于主机的linux容器和基于镜像的linux容器有什么区别?各自的优缺点是什么?如何决定哪种类... 查看详情

如何基于基于字符的 RNN 模型预测字符?

】如何基于基于字符的RNN模型预测字符?【英文标题】:howtopredictacharacterbasedoncharacterbasedRNNmodel?【发布时间】:2021-02-0513:00:08【问题描述】:我想创建一个预测函数来完成“句子”的一部分这里使用的模型是基于字符的RNN(LSTM)... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

基于角色的授权和基于角色的访问控制颤动

】基于角色的授权和基于角色的访问控制颤动【英文标题】:rolebasedauthorizationandrolebasedaccesscontrolflutter【发布时间】:2020-06-2207:24:55【问题描述】:我试图做的是设置一个基于角色的授权(普通用户和订阅用户),并基于角色用... 查看详情

混合身份验证 - 基于 Spring MVC 会话 + 基于 JWT 令牌

】混合身份验证-基于SpringMVC会话+基于JWT令牌【英文标题】:Hybridauthentication-SpringMVCsessionbased+JWTtokenbased【发布时间】:2020-02-0418:53:27【问题描述】:我有一个情况,我正在使用SpringMVC(jsp、控制器、服务、dao)和基于会话的身... 查看详情

基于类的视图 VS 基于函数的视图

】基于类的视图VS基于函数的视图【英文标题】:ClassBasedViewsVSFunctionBasedViews【发布时间】:2013-01-2503:22:11【问题描述】:在创建django应用程序时,我总是使用FBV(基于函数的视图),因为它非常易于处理。但是大多数开发人员... 查看详情

基于国家/地区的基于IP的内容[重复]

】基于国家/地区的基于IP的内容[重复]【英文标题】:ipbasedcontentbasedoncountry[duplicate]【发布时间】:2012-04-1516:50:23【问题描述】:可能重复:IPtoCountry?IPToCountryinPHP我有一个网站,当他们访问时,我存储了用户的IP地址。我想为他... 查看详情

基于原型与基于类的继承

】基于原型与基于类的继承【英文标题】:prototypebasedvs.classbasedinheritance【发布时间】:2010-10-2309:32:50【问题描述】:在JavaScript中,每个对象同时是一个实例和一个类。要进行继承,您可以使用任何对象实例作为原型。在Python、... 查看详情

活动菜单项不是基于 URL 而是基于变量

】活动菜单项不是基于URL而是基于变量【英文标题】:ActivemenuitemNOTbasedonURLbutbasedonavariable【发布时间】:2022-01-1522:01:42【问题描述】:我想在我的网站上有一个包含活动项目的菜单。应该添加一个类来激活该项目。由于该项目... 查看详情

从基于源的索引转换为基于目标的索引

】从基于源的索引转换为基于目标的索引【英文标题】:ConvertingfromSource-basedIndicestoDestination-basedIndices【发布时间】:2016-08-3123:35:07【问题描述】:我在一些C代码中使用AVX2指令。VPERMD指令采用两个8整数向量a和idx,并通过基于idx... 查看详情