基于MaxCompute InformationSchema进行血缘关系分析

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 在实际的数据平台运营管理过程中,数据表的规模往往随着更多业务数据的接入以及数据应用的建设而逐渐增长到非常大的规模,数据管理人员往往希望能够利用元数据的分析来更好地掌握不同数据表的血缘关系,从而分析出数据的上下游依赖关系。本文将介绍如何去根据MaxCompute InformationSchema中作业ID的输入输出表来分析出某张表的血缘关系。

一、需求场景分析
在实际的数据平台运营管理过程中,数据表的规模往往随着更多业务数据的接入以及数据应用的建设而逐渐增长到非常大的规模,数据管理人员往往希望能够利用元数据的分析来更好地掌握不同数据表的血缘关系,从而分析出数据的上下游依赖关系。
本文将介绍如何去根据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;

结果如下图所示:
image.png

(2)根据结果可以分析得出每张表张表的输入表输出表以及连接的作业ID,即每张表的血缘关系。
血缘关系位图如下图所示:
image.png

中间连线为作业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)任务依赖关系
image.png
image.png

(4)最终血缘关系
image.png

以上血缘关系的分析是根据自己的思路实践去完成。真实的业务场景需要大家一起去验证。所以希望大家有需要的可以根据自己的业务需求去做相应的sql修改。如果有发现处理不当的地方希望多多指教。我在做相应的调整。
欢迎加入“MaxCompute开发者社区2群”,点击链接申请加入或扫描二维码
https://h5.dingtalk.com/invite-page/index.html?bizSource=____source____&corpId=dingb682fb31ec15e09f35c2f4657eb6378f&inviterUid=E3F28CD2308408A8&encodeDeptId=0054DC2B53AFE745

image.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
13天前
|
数据采集 人工智能 分布式计算
ODPS在AI时代的发展战略与技术演进分析报告
ODPS(现MaxCompute)历经十五年发展,从分布式计算平台演进为AI时代的数据基础设施,以超大规模处理、多模态融合与Data+AI协同为核心竞争力,支撑大模型训练与实时分析等前沿场景,助力企业实现数据驱动与智能化转型。
65 4
|
2月前
|
消息中间件 NoSQL 数据可视化
数据说了算,可你得“听得快”——聊聊大数据里的实时分析
数据说了算,可你得“听得快”——聊聊大数据里的实时分析
68 2
|
3月前
|
数据采集 人工智能 算法
数据没洗干净,分析全白干:聊聊大数据里的“洗澡水”工程
数据没洗干净,分析全白干:聊聊大数据里的“洗澡水”工程
84 1
|
2月前
|
SQL 存储 机器学习/深度学习
基于 Dify + Hologres + QWen3 进行企业级大数据的处理和分析
在数字化时代,企业如何高效处理和分析海量数据成为提升竞争力的关键。本文介绍了基于 Dify 平台与 Hologres 数据仓库构建的企业级大数据处理与分析解决方案。Dify 作为开源大语言模型平台,助力快速开发生成式 AI 应用;Hologres 提供高性能实时数仓能力。两者结合,不仅提升了数据处理效率,还实现了智能化分析与灵活扩展,为企业提供精准决策支持,助力数字化转型。
436 2
基于 Dify + Hologres + QWen3 进行企业级大数据的处理和分析
|
2月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
2月前
|
人工智能 边缘计算 分布式计算
ODPS 在 AI 时代的引领潜力与突破方向分析
阿里云 ODPS 凭借超大规模数据处理、多模态架构与 Data+AI 融合优势,正引领 AI 时代数据革命。其弹性算力支撑大模型训练,多模态处理提升数据利用率,AI 工程化能力完善。但实时性、边缘计算与跨云协同仍存短板。未来将重点突破智能数据编织、异构计算调度、隐私增强平台与边缘云端协同,加速行业落地。结合绿色计算与开放生态,ODPS 有望成为 AI 驱动的数据基础设施核心。
69 0
|
3月前
|
数据采集 搜索推荐 算法
Java 大视界 -- Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)
本文系统阐述 Java 大数据技术在智能教育学习社区中的深度应用,涵盖数据采集架构、核心分析算法、活跃度提升策略及前沿技术探索,为教育数字化转型提供完整技术解决方案。
|
3月前
|
存储 缓存 分布式计算
OSS大数据分析集成:MaxCompute直读OSS外部表优化查询性能(减少数据迁移的ETL成本)
MaxCompute直读OSS外部表优化方案,解决传统ETL架构中数据同步延迟高、传输成本大、维护复杂等问题。通过存储格式优化(ORC/Parquet)、分区剪枝、谓词下推与元数据缓存等技术,显著提升查询性能并降低成本。结合冷热数据分层与并发控制策略,实现高效数据分析。
|
3月前
|
数据采集 自然语言处理 算法
朋友圈里的“数据局”——聊聊大数据与社交媒体分析的那些事儿
朋友圈里的“数据局”——聊聊大数据与社交媒体分析的那些事儿
124 0
|
传感器 分布式计算 安全
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与分析技术(171)
本文围绕 Java 大数据在智能安防入侵检测系统中的应用展开,剖析系统现状与挑战,阐释多源数据融合及分析技术,结合案例与代码给出实操方案,提升入侵检测效能。

相关产品

  • 云原生大数据计算服务 MaxCompute