
简介这份PDF文档聚焦大数据平台的数据治理体系建设与管理方案面向数据治理工程师、平台架构师及大数据项目管理者也适合需要梳理治理规范、搭建治理框架的团队参考。内容从总体说明入手依次展开数据治理体系的组织架构、系统架构与系统边界并明确与企业级省大数据平台、对外能力开放平台、平台运维系统之间的职责划分进而落到数据标准管理等核心模块。资源为单个PDF文件压缩包约3.07MB目录层级完整、章节编号规范便于按范围、规范性引用文件、术语定义、总体框架、核心模块顺序检索阅读。目前已有205人学习下载。读者可借此了解治理委员会的组成与角色职责、系统功能框架与模块流程的划分方式以及数据治理从标准管理到流程落地的实施思路为编写内部治理方案或立项汇报提供可参照的框架与话术。1. 大数据平台数据治理体系建设和管理方案从车轮图到可执行的工程路径很多团队的大数据平台建到第三年集群规模上去了、任务数量翻了几番但业务方依然拿着两份口径不一致的报表来找你对数。问题往往不在计算引擎而在治理体系缺位标准没人定、元数据没人管、质量没人盯、血缘断成几截。数据治理车轮图把这件事拆成标准、主数据、元数据、质量、安全、生命周期六个相互咬合的域任一个域停转整辆车就推不动。这套方案要解决的是把车轮图从 PPT 里的漂亮圆环落成平台里能跑起来的元数据中心、质量规则引擎、稽核调度任务和血缘图谱让数据治理从运动式变成日常制。适合正在建湖仓、刚接手数据中台、或者想给现有 Hive/Spark 体系补治理课的数据工程师和架构师。2. 数据治理车轮图拆解标准、主数据、元数据的落地顺序车轮图的六个域不是平行推进的有明确的先后依赖。先定数据标准主数据和元数据才有参照系先建元数据中心质量和血缘才有挂载点先有血缘生命周期和安全策略才能精准到字段。很多人一上来就买质量平台结果规则配了一堆却不知道对哪张表生效就是因为元数据和标准这两块底座没铺。2.1 数据标准与主数据的关系及编码设计数据标准回答的是同一个东西全平台叫什么、什么类型、什么取值范围。比如客户编号在 CRM 里是cust_id、在订单系统里是member_no标准层必须统一成一个业务术语并绑定一个标准代码。我一般会建三张核心表业务术语表、标准代码表、标准与物理字段映射表。-- 业务术语表治理体系的最上层字典 CREATE TABLE gov_business_term ( term_id BIGINT COMMENT 术语主键, term_name STRING COMMENT 业务术语中文名如客户编号, term_name_en STRING COMMENT 英文名如 customer_id, domain_code STRING COMMENT 所属数据域如 CUSTOMER, data_type STRING COMMENT 标准数据类型, value_range STRING COMMENT 取值范围或正则约束, owner STRING COMMENT 业务归口负责人, status TINYINT COMMENT 1草稿 2评审中 3发布 4废止 ) COMMENT 业务术语标准表; -- 标准代码表枚举类数据的唯一权威来源 CREATE TABLE gov_code_dict ( dict_code STRING COMMENT 字典编码如 ORDER_STATUS, code_value STRING COMMENT 代码值如 10, code_name STRING COMMENT 代码名称如 待支付, effective_date DATE, expire_date DATE ) COMMENT 标准代码字典表;术语表里的status字段是关键它让标准有生命周期草稿态可以自由改发布态的任何变更都要走评审流并且要能反查影响哪些物理表。owner字段不能填数据组的人必须填业务侧否则标准推行时没人认账。主数据是标准在核心实体上的具体实例比如客户主数据、商品主数据。主数据和普通业务数据的区别是它只有一个权威来源其他系统只能引用不能改写。常见做法是在平台上开一张主数据表用mdm_source标记来源系统通过定时任务做合并和冲突检测。2.2 元数据中心表结构与采集方式元数据是治理的神经中枢分技术元数据、业务元数据、操作元数据三类。技术元数据从 Hive Metastore、调度系统、存储系统自动采业务元数据靠人工维护和标准映射操作元数据是任务日志和访问审计。元数据中心建议至少落这几张表表名作用关键字段更新频率meta_table表级元数据db_name, table_name, owner, layer每日meta_column字段级元数据column_name, data_type, term_id每日meta_partition分区元数据partition_key, row_count, size每日meta_job任务元数据job_id, cron, input_tables, output_tables实时/小时meta_access_log访问审计user, table, ts, action实时采集方式上Hive 用 Metastore API 或直接读 MySQL 元数据库Spark SQL 用DESCRIBE EXTENDED补字段级信息调度系统一般直接读它的元数据库。分区统计信息不要用SHOW PARTITIONS全量拉表多的时候会拖垮 Metastore我一般改成读PARTITIONS系统表。# 从 Hive Metastore 采集字段级元数据并按标准映射 from pyhive import hive import pandas as pd def collect_column_meta(db_list): conn hive.Connection(hostmetastore-host, port10000, databasedefault) rows [] for db in db_list: sql fSELECT TBL_NAME, COL_NAME, TYPE_NAME, COMMENT FROM {db}.COLUMNS_V2 df pd.read_sql(sql, conn) df[db_name] db rows.append(df) # 与业务术语做关联term_id 为空说明该字段还没纳入标准 meta pd.concat(rows, ignore_indexTrue) return meta.merge(term_mapping, on[db_name, COL_NAME], howleft) # term_mapping 来自 gov_business_term 与物理字段映射表db_list决定采集范围建议按数据域分批而不是全库扫描howleft保证未纳入标准的字段也能进元数据中心只是term_id为空后续可以用这张未映射清单反过来推动标准建设。3. 非结构化数据治理文本、日志、文件的采集与质量评估结构化数据的治理套路成熟非结构化数据才是大数据平台现在最容易失控的区域。日志、PDF、图片、音视频一旦进湖往往既没有元数据描述也没有质量约束最后变成数据沼泽。非结构化数据治理的核心思路是把文件和对象当成一等公民为它们建元数据、打标签、定生命周期。3.1 非结构化数据的元数据抽取与存储非结构化数据的元数据分两层一层是文件级属性路径、大小、格式、创建时间、来源系统另一层是内容级属性文档主题、实体、敏感级别。文件级属性用平台采集任务就能拿到内容级属性要靠解析。常见做法是先落一张非结构化资产表CREATE TABLE gov_unstructured_asset ( asset_id BIGINT COMMENT 资产唯一编号, file_path STRING COMMENT 存储路径如 hdfs:///oss/docs/2024/xx.pdf, file_format STRING COMMENT pdf/docx/jpg/mp4, file_size BIGINT COMMENT 字节数, source_system STRING COMMENT 来源业务系统, biz_domain STRING COMMENT 归属数据域, content_hash STRING COMMENT 内容指纹用于去重, sensitivity TINYINT COMMENT 0公开 1内部 2敏感 3机密, extract_status TINYINT COMMENT 0待解析 1解析中 2成功 3失败, create_time TIMESTAMP, last_access_time TIMESTAMP ) COMMENT 非结构化数据资产目录;content_hash用文件内容的 MD5 或 SHA256 算作用是去重——同一份合同被三个部门各传一遍的情况太常见了。extract_status配合一个解析任务队列PDF 用 PyMuPDF、Word 用 python-docx、图片用 OCR解析后的文本和抽取出的实体回写标签表。3.2 非结构化数据质量规则的配置非结构化数据的质量没法用字段非空率那套要换成资产级指标。我一般定四类规则完整性文件能否正常打开、页数是否为 0、解析是否失败规范性命名是否符合约定、格式是否在白名单内、是否缺少必填业务标签一致性同一content_hash是否多路径重复、同一业务的文件命名是否统一时效性last_access_time超过 180 天的冷数据占比下面是用 PySpark 跑一轮非结构化资产规范性稽核的例子from pyspark.sql import SparkSession, functions as F spark SparkSession.builder.appName(unstructured_dq).enableHiveSupport().getOrCreate() asset spark.table(gov.gov_unstructured_asset) # 规则1命名规范要求以业务域开头 日期 描述 naming_ok F.col(file_path).rlike(r.*/(CUSTOMER|ORDER|RISK)_\d{8}_.\.(pdf|docx|xlsx)$) # 规则2敏感级别为2或3但未打业务标签的视为不合规 tag_ok ~((F.col(sensitivity) 2) (F.col(biz_domain).isNull())) # 规则3解析失败超过7天的资产 stale_fail (F.col(extract_status) 3) \ (F.datediff(F.current_date(), F.col(create_time)) 7) result asset.withColumn(naming_violation, ~naming_ok) \ .withColumn(tag_violation, ~tag_ok) \ .withColumn(parse_violation, stale_fail) result.groupBy(biz_domain).agg( F.sum(F.col(naming_violation).cast(int)).alias(naming_bad), F.sum(F.col(tag_violation).cast(int)).alias(tag_bad), F.sum(F.col(parse_violation).cast(int)).alias(parse_bad) ).write.mode(overwrite).saveAsTable(gov.dq_unstructured_result)三条规则分别对应命名、标签、解析状态rlike里的正则要按团队命名规范调整别照抄。biz_domain为空的记录被单独拎出来做tag_violation是因为敏感文件不绑数据域后面根本没法定访问策略。3.3 非结构化数据的生命周期与冷热分层非结构化数据体量大全放高性能存储成本扛不住。我一般按访问频次分三层热层放 90 天内访问过的温层放 90 到 365 天的冷层放一年以上且访问次数低于阈值的。分层动作由资产表的last_access_time和访问计数触发落地成 HDFS 存储策略或对象存储的生命周期规则。注意冷层迁移前必须先确认该资产没有被下游任务引用否则会出现任务读不到文件的故障。血缘里非结构化资产同样要纳入不能只画表级血缘。4. 数据治理流程的自动化编排血缘、稽核与告警联动治理体系要能持续运转靠人工审批和手工巡检必然撑不住。数据治理流程的关键是把标准校验、质量稽核、血缘采集、告警处置串成自动化的流水线让治理动作嵌进数据开发的日常流程里。4.1 数据血缘的采集与解析实现血缘分表级和字段级。表级血缘相对好做从 SQL 解析FROM和INSERT就能拿到字段级血缘难需要解析执行计划或 SQL AST。常见做法是拦截调度系统提交的任务用 SQL 解析器抽血缘写入血缘边表import sqlglot def extract_lineage(sql: str, default_dbods): # 解析 SQL 为 AST提取输入输出表 exprs sqlglot.parse(sql, readhive) in_tables, out_tables set(), set() for expr in exprs: for tbl in expr.find_all(sqlglot.exp.Table): name ..join([p.name for p in [tbl.db and sqlglot.exp.Identifier(thistbl.db), tbl.this] if p]) in_tables.add(name) for ins in expr.find_all(sqlglot.exp.Insert): t ins.this out_tables.add(f{t.db or default_db}.{t.this}) return in_tables, out_tables # 入库为血缘边src - dst edges [{src: s, dst: d, job_id: job_id} for s in in_tables for d in out_tables]sqlglot.parse里指定readhive是因为大部分团队用 Hive 方言Insert和Table节点分别对应输出和输入。这个简化版会把子查询里的中间表也算进输入需要的话可以用sqlglot.optimizer做进一步消解。血缘边落库后就能做影响分析和溯源查询。4.2 稽核任务的调度配置与阈值分级质量稽核不能全量跑要按重要性分级调度。核心表每小时跑、一般表每天跑、冷表每周跑。调度配置我一般维护成一张治理调度表稽核级别触发频率覆盖表范围告警方式超时时间P0每小时核心交易、财务表电话企业微信10 分钟P1每日维度表、报表源表企业微信30 分钟P2每周归档表、临时表邮件2 小时阈值设置上不要用固定的 100% 非空业务上很多字段本来就允许空。我一般用历史基线取过去 30 天的均值偏离超过 3 个标准差才告警。下面是用 SQL 算基线和偏离度的片段WITH daily AS ( SELECT table_name, dt, null_rate FROM gov.dq_metric_daily WHERE dt BETWEEN date_sub(current_date, 30) AND date_sub(current_date, 1) ), baseline AS ( SELECT table_name, avg(null_rate) AS avg_rate, stddev(null_rate) AS std_rate FROM daily GROUP BY table_name ) SELECT t.table_name, t.dt, t.null_rate, b.avg_rate, b.std_rate, CASE WHEN abs(t.null_rate - b.avg_rate) 3 * b.std_rate THEN 1 ELSE 0 END AS alert FROM gov.dq_metric_daily t JOIN baseline b ON t.table_name b.table_name WHERE t.dt current_date;stddev为 0 说明该表空值率一直很稳这种情况用一个小的绝对值阈值兜底避免除零或告警失效。alert1的记录推到告警通道同时写一条治理工单。4.3 告警到工单的闭环处理告警发出去没人处理等于没发。常见做法是告警触发时自动生成治理工单带上表名、规则名、偏离值、负责人落到工单系统。处理人修完数据或调整规则后关单关单动作反向更新规则的有效性统计。这样跑三个月就能看出哪些规则是误报、哪些表长期有问题为规则调优提供依据。5. 治理体系落地验证成熟度评估与持续运营的具体技巧体系建完要能验证否则永远是看起来很美。验证分两块一是用成熟度模型量化当前水平二是用几个可操作的技巧让治理持续转下去。5.1 用成熟度矩阵做阶段性自评我一般用五个维度打分每维 1 到 5 分标准覆盖度、元数据完整度、质量规则命中率、血缘覆盖度、问题闭环率。下面这张表是一次典型自评的结果维度评分依据得分短板标准覆盖度核心实体字段纳入标准的比例3非结构化资产标签标准缺失元数据完整度字段注释覆盖率4分区统计信息更新滞后质量规则命中率规则触发且确认为真的比例2固定阈值误报多血缘覆盖度有血缘的任务占比3字段级血缘未展开问题闭环率工单 7 日内关单比例3非结构化问题无人认领打分不是为了好看是为了找到下一阶段该补哪一块。质量规则命中率低就回去调基线非结构化的问题没人认领就把biz_domain纳入开发流程做强制填写。5.2 三个让治理持续运转的实操技巧第一把治理规则前置到开发环节。在提交任务时校验输出表是否有 owner、字段是否有注释、是否挂了数据域标签不通过就不让上线。这比事后巡检有效得多。第二血缘驱动变更影响分析。任何表结构变更前先用血缘查出所有下游自动生成影响清单并通知对应负责人。血缘边表里加上job_id就能做到这一点。第三用未映射清单反向推动标准建设。元数据中心里term_id为空的字段清单按月导出发给各数据域负责人认领认领一个就补一条标准。这个动作比开标准评审会管用因为它给的是具体字段而不是抽象条目。最后分享一个排查血缘断裂的技巧如果某个任务的血缘突然没了先查 SQL 解析是否失败——常见的坑是任务里用了动态表名或变量替换解析器拿到的不是最终 SQL。解决方式是在调度系统提交前做变量渲染把渲染后的 SQL 传给解析器再入库血缘。这一步加上之后血缘覆盖率一般能明显回升。本文还有配套的精品资源点击获取