我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

大数据架构下的数据治理:从元数据到数据质量的落地实践

大数据架构下的数据治理:从元数据到数据质量的落地实践 我们团队这几年接过不少企业级大数据平台的搭建和优化项目有个现象特别普遍数据仓库搭好了、实时链路也通了、BI报表跑起来了但半年之后回头一看底层的数据已经乱到没人敢直接用了。指标口径对不上、同一张表十几个团队各改各的、数仓里几千张表说不清来源和去向。这时候所有人都会想起同一个词数据治理。这词不新鲜但在大数据领域里很多人对它的理解要么停留在“建章立制”的文档层面要么觉得“上个元数据工具就完事”。真正做过落地的人都知道数据治理不是一个独立的项目它必须长在数据架构里和数据平台的生命周期深度绑定。这篇就结合我们实际做过的治理体系搭建聊聊在大数据架构下数据治理到底怎么设计、怎么落地、怎么避免做成僵尸项目。1. 数据治理在大数据架构中的定位1.1 为什么数据治理容易被做成“僵尸项目”先聊一个常见现象。很多公司启动数据治理方式是成立一个数据管理委员会发一份数据标准文档采购一套元数据管理平台然后要求各业务线配合执行。半年后复盘发现文档躺在共享盘里没人看平台上的元数据早就和实际表结构脱节了业务部门该咋干还咋干。问题出在哪儿出在把治理当成了一个“独立的管理动作”而不是架构的一部分。数据治理和业务系统里的权限管理不一样它不是配一次就能自动运行的。只要数据在持续产生、持续加工、持续消费治理动作就必须跟着数据的生命周期持续运转。一旦它脱离了数据架构的日常运行机制就必然走向僵化。真正合理的做法是把治理能力当成数据平台的一个基础设施组件。就像监控告警、任务调度一样属于平台自带的能力。只要数据在流动治理规则就在执行。这也是为什么这几年主流数据架构方案里治理模块都是和元数据中心、数据开发平台、数据服务网关深度绑定的而不是外挂一个独立系统。1.2 治理体系要覆盖的六大能力面大数据领域的数据治理体系化建设通常围绕六个能力面展开。数据标准管理负责统一业务口径、编码规则、命名规范。这是治理的“宪法层”解决的是大家对同一个词的理解不一样的问题。数据质量管理负责定义质量规则、执行质量校验、生成质量报告核心目标是让数据达到“可信可用”的状态。元数据管理负责采集和维护技术元数据、业务元数据、操作元数据。血缘关系就是从这里来的。数据安全管理负责分级分类、权限管控、敏感数据识别和脱敏处理。数据生命周期管理负责定义数据从产生到归档销毁全过程的策略。数据合规管理负责响应外部监管要求和内部审计需求比如数据的留存周期、访问日志留存、个人信息保护等。这六个面听起来很多但落到大数据架构里其实是和一整套技术组件对应的。理解了对应关系治理体系就不再是一堆抽象的概念。1.3 治理体系与数据架构各层级的映射关系一张典型的大数据架构图从下往上依次是数据源层、数据采集层、数据存储层、数据处理层、数据服务层和数据应用层。治理体系的各个能力面和这些层级是有明确映射关系的。数据源层对应的是数据接入规范解决“哪些数据能进平台”的问题。数据采集层对应数据标准校验和敏感数据识别在数据刚进入平台的时候做第一道检查。数据存储层对应数据分级分类、生命周期策略、数据加密。数据处理层对应数据质量规则执行、加工过程中的血缘记录、任务级数据血缘追踪。数据服务层对应数据权限管控、数据脱敏、数据服务鉴权和流量审计。数据应用层对应数据合规审批、数据使用追踪。理解了这层映射关系治理体系就不会悬在空中。说白了就是每一层架构组件运转的时候治理规则都跟着一起跑。比如采集任务在拉数据的同时做敏感字段识别调度系统在跑ETL任务的同时记录血缘关系数据服务网关在响应查询的同时执行权限校验和数据脱敏。这样治理就长在了架构里。2. 治理体系落地时四个真正要命的切入点2.1 元数据管理先给数据上户口我见过太多数据团队第一反应就是做数据质量一上来就定了一堆校验规则。但实际做下来发现规则定了也没法执行因为连这个表是谁负责的、数据从哪来的、下游谁在用都说不清楚。所以真正落地治理体系第一个切入点必须是元数据管理。元数据管理最核心的任务是建立一套自动化的元数据采集机制。在大数据技术栈中Hive表的字段信息、分区信息、存储路径、owner信息都存在Hive Metastore里Kafka的topic信息、schema信息也存在各自的注册中心里。治理平台要做的是通过对接这些元数据存储自动拉取并建立统一的数据字典。这里有个容易被忽略的细节光采一次是不够的必须做成定时增量采集否则表结构一变更平台上的元数据立刻过期。有了元数据基线之后要做“数据地图”和“数据血缘”。数据地图解决的是“找数据”的问题类似一个导航系统。血缘解决的是“数据从哪来、到哪去”的问题做变更影响分析的时候特别重要。我们实际做项目的时候血缘分析至少解决了三类问题改表结构之前评估下游影响范围、排查数据质量问题定位源头、做数据下架的时候确认没有隐藏消费者。2.2 数据标准没有标准的治理都是打地鼠如果元数据是“上户口”那数据标准就是“定规矩”。规矩不定好后面所有治理动作都是打地鼠按下葫芦浮起瓢。定数据标准最忌讳一上来就搞一套大而全的企业级标准试图覆盖所有部门所有数据。我们实践下来最稳妥的做法是“从核心域切入”。先找出公司最核心的几类主数据比如用户、订单、商品、机构把这几类数据的公共属性和口径统一了。比如“用户ID”的定义到底是什么是注册手机号还是系统生成的唯一标识“订单金额”包含运费吗包含优惠券抵扣吗这些口径不统一后面所有跨部门数据分析都是扯淡。数据标准落到大数据平台上体现为标准的命名规范、编码规范和字段类型规范。命名规范包括库表命名规则比如数仓分层前缀ODS/DWD/DWS/ADS、字段命名规则统一用snake_case还是camelCase、时间字段命名规则等。编码规范要解决“性别怎么表示、状态字段用数字还是字符串、时间格式是yyyy-MM-dd还是yyyyMMdd”这类问题。字段类型规范要解决“金额用什么类型、ID用什么类型、布尔值怎么存”等问题。标准定好之后一定要把它变成平台上的强约束而不是一份参考文档。具体来说就是在数据开发平台上内置代码模板和模型设计规范。开发人员新建表的时候模型设计工具自动校验命名是否符合规范、字段类型是否符合规范、是否有标准字段映射。不符合的直接挡住或者至少给一个强警告。2.3 数据质量定规则要分场景数据质量是治理体系里最能直接体现价值的部分因为它直接影响业务分析的可信度。但数据质量的落地也是最容易走偏的常见的走偏方式是定了一堆大而全的质量规则执行的时候发现全是告警最后没人看了。定数据质量规则一定要分场景、分主次。我们内部把质量规则分成三个优先级。第一优先级是“完整性”规则不允许为空的关键字段如果为空了直接阻断任务第二优先级是“准确性”和“一致性”规则比如金额字段不能出现负数、两个表的关联键不能有孤儿数据如果出现问题告警并通知负责人第三优先级是“及时性”规则比如ODS层数据必须在每天8点前同步完成超过时间就触发告警。这三个优先级对应的是不同的处理策略。第一优先级是强阻断直接让任务失败宁可今天这张表不出数也不能出一张错误的数据。第二优先级是告警人工确认因为有些时候上游数据本身就是异常的但下游业务还在等数据需要人来判断要不要放行。第三优先级是监控通报主要用于SLA管理不阻断任务但是要记录和追溯。质量规则一定要做“规则与任务解耦”。不要每条质量规则都写在ETL代码里而是通过数据质量中心统一配置、统一调度、统一展示。这样不管数据加工逻辑怎么变质量校验逻辑都能独立维护也方便回溯历史数据。2.4 数据安全与合规权限管控别等出事才做之前有个项目客户的数据平台上所有数据对所有人可见没有行级权限控制。问他们为什么不配权限回答是“内部用没事”。后来一审计发现有几个实习生能直接查到全量用户明细这才慌了紧急做权限整改。这就是典型的安全合规做到出事才想起来补。大数据平台的安全管控和传统关系型数据库完全不是一个量级。传统数据库表就几百张STIG权限模型够用但大数据环境下动辄几千张表、几万张物理分区光靠人工在数据库里授权根本管不过来。所以必须建立“分级分类自动授权动态脱敏”三位一体的安全治理体系。分级分类是基础。先建立数据分级标准比如L1公开、L2内部、L3敏感、L4机密。然后对平台上的所有数据资产做自动扫描分类标注每个表、每个字段的敏感级别。扫描规则包括关键字匹配字段名包含id_card、phone、address等、数据内容识别通过采样数据判断是否为身份证号、手机号、银行卡号。自动授权是效率保障。原则是“基于角色的访问控制”而不是给每个人单独授权。比如“数仓开发工程师”这个角色默认可以访问ODS和DWD层的非敏感数据访问DWS层的敏感数据需要提交工单审批。“数据分析师”角色可以通过数据服务网关查询ADS层指标数据但后端会自动进行数据脱敏。这样既保安全又不影响效率。动态脱敏是最后一道防线。核心逻辑是“数据在存储端可以是明文但在查询端根据用户权限动态决定是否脱敏”。比如一个普通运营同学查询用户表SQL返回结果里手机号自动变成138****1234而经过授权的客服团队看到的就是完整手机号。这个能力在实现上通常依赖数据服务网关或代理层做改写不用在底层表上做物理脱敏因为物理脱敏会影响数据加工质量。3. 从零搭建数据治理体系的实操路径3.1 第一步盘点现状建立元数据基线接手一个存量大数据平台的时候第一件事不是定标准、不是搞质量而是先摸清楚家底。摸家底的具体做法就是全量采集元数据建立一份平台数据资产清单。以我们常用的技术栈Hive Spark Flink Kafka为例元数据采集包括几个层面。Hive层面要采的表信息包括库名、表名、表注释、字段名、字段类型、字段注释、分区字段、owner、创建时间、最近访问时间、存储大小、文件格式等。存储层面要接入HDFS的目录扫描查清楚哪个路径下存了什么类型的数据有没有未注册到Hive的裸文件。采集层要把Kafka的topic清单、schema信息、topic的owner和消费方都拉出来。调度层面要把所有周期性任务的依赖关系、产出表、输入表都梳理出来。这一步做完至少能回答几个之前没人能回答的问题平台上一共多少张表哪些表超过90天没被访问哪些表的数据生产方和数据消费方已经完全对不上哪些任务在读写表结构已经变更的源表这里有个实操建议元数据采集不要只采物理信息业务信息一定要通过“认责”这个动作补全。每个核心表都要指定业务owner和技术owner。业务owner对数据口径负责技术owner对数据加工逻辑负责。认责机制不上线后面所有治理动作都没法落地因为出了问题找不到人。3.2 第二步从核心域切入建设数据标准建数据标准的范围一定要克制。我见过一个平台的数据标准文档写了两百多页覆盖了财务、人力、供应链、营销所有领域。结果就是把没人执行的规章写在了纸上。合理做法是先选一到两个最核心的域比如用户域和交易域把这一个域涉及的核心实体和核心指标标准定清楚。以用户域为例第一步是定义核心实体的唯一标识。用户ID是注册用户唯一标识生成规则是注册时由用户中心统一颁发生成的全局唯一字符串不允许业务线自行生成设备ID是匿名用户标识规则是移动端每次安装生成的UUID卸载重装后变更。这两个标识定了后面所有跨系统用户关联才有基础。第二步是统一枚举值和编码规则。比如性别字段各系统里存的可能是“男/女”“M/F”“1/2”标准统一为“1-男、2-女、0-未知”。渠道来源字段五花八门的命名全部归一到一套标准渠道编码体系。这些看着琐碎但它们是后面数据互通的前提。第三步是把标准落到模型设计工具里。在建表工具里维护一份标准字段字典开发人员建表的时候如果字段名匹配到标准字典自动带出标准字段类型和注释。如果字段名不在字典里系统提示“非标准字段请确认是否有对应的标准定义”。这一步做好了标准才能从文档变成工具层面的强约束。3.3 第三步用质量规则倒逼源头改造数据质量问题的根因往往不在数仓加工环节而在源头业务系统。常见的情况是上游业务系统的一个接口调整了返回逻辑导致某个字段大面积为空或者业务库的某张表发生了数据回刷结果下游数仓同步出了一堆错误数据。质量规则的第一层防线应该设在数据采集入口。具体来说就是在数据同步任务上配置前置校验数据从源端拉下来之后、写入ODS之前先做一轮基础检查。比如检查主键是否重复、必填字段是否为空、枚举值是否合法。如果检查不通过可以配置是阻断还是告警。这一步能拦住大量低质量的源头数据避免脏数据污染数仓。第二层防线设在数仓加工环节。DWD明细层和DWS汇总层的质量规则要结合业务逻辑来定义。比如事实表里的订单金额可以和业务系统提供的日汇总对账差异率超过阈值就告警。维度表里可以校验主键的唯一性和小数仓维度的拉链状态。这类规则通常由数仓开发同学配置但规则的业务口径需要和数据产品经理对齐。这里有个实际踩坑的经验质量规则的数量控制在“看得过来”的范围。如果一个平台上有上千条质量规则每天产生几百个告警运维团队很快就会告警疲劳治理就名存实亡了。更好的做法是把质量告警分级P0级数据完全不可用直接电话通知P1级数据有异常但可人工干预发IM告警并自动创建工单P2级数据轻微异常汇总成日报。3.4 第四步把治理流程嵌入研发链路治理体系能不能持续运行取决于它是不是嵌入了数据研发的日常流程。如果治理是“额外动作”大家忙起来一定会跳过。如果治理是研发流程里绕不开的一环才能有长期效果。我们落地时做了这么几件事。模型设计评审里加入“数据治理检查项”新的数据模型必须通过命名规范校验、必须有明确的owner、必须标注敏感级别才能提交发布。在数据开发平台的发布流程中集成“血缘自动更新”能力任务发布后自动重新计算血缘关系不需要人工维护。在测试环节中加入“数据质量规则自测”每个新开发的数据任务在测试环境跑通时必须同时提交配套的质量规则配置否则不允许上生产。这三件事做下来新开发的数据链路从第一天起就是“带治理”的而不是等上线后再补。“带治理”意味着所有新增数据资产自动具备元数据、自动关联owner、自动挂质量规则、自动接入权限体系。存量数据可以慢慢治理但增量数据的治理必须在开发流程里前置。这个思路应用于实际项目中效果是治理不再是治理团队求着开发团队配合而是变成了开发流程的一个天然组成部分。因为绕不过去所以必须遵守。3.5 第五步用指标衡量治理效果治理体系落地一段时间后一定要用数据说话证明治理产生了价值。不能只讲“我们上了平台、配了规则”要量化地讲“治理前后有什么变化”。几个我们在项目中常用的治理效果指标元数据覆盖率即已采集元数据的表占全量表数量的比例正常应该跑向95%以上核心资产认责率即核心表指定了业务owner和技术owner的比例数据质量规则执行率即实际执行的质量规则数量占计划配置数的比例数据质量告警的闭环率即告警中被处理并确认的比例体现的是团队对质量问题的响应能力数据标准覆盖率即表字段命中标准字典的比例。还有一个特别容易被忽略的指标数据需求交付周期。这个指标乍一看和治理没关系但实际做下来治理做得好的项目数据需求交付周期会明显缩短。原因是数据地图和血缘清晰了找数据的时间大幅下降标准统一了理解口径的时间大幅下降质量可信了返工的概率大幅下降。这几个“下降”叠加起来数据开发效率自然就上来了。4. 数据治理体系实施中的常见问题与排查技巧4.1 元数据采集不全或过期现象数据地图上查不到新创建的表或者平台上的字段信息和Hive里的实际表结构不一致。原因一般是只做了一次静态采集没有做成周期性增量采集。排查时先确认采集任务的调度周期是否覆盖了表的变更频率再确认采集的账号是否有权限读取元数据存储有的团队用的采集账号权限不全导致部分库表扫描不到三要确认采集逻辑是否处理了“删除表”和“表结构变更”的场景。一个很实用的技巧用事件驱动的方式替代纯定时采集。Hive Metastore本身有事件监听机制表结构变更时会触发事件把这个事件接出来实时更新元数据比定时全量扫描要准得多。4.2 血缘关系断裂现象数据地图上查询某张表的血缘只显示了一部分上下游中间断层了。这个问题的根子一般在于血缘采集只覆盖了某个特定计算引擎不是全链路打通。比如只采集了Hive SQL解析出来的血缘但实际数据加工链路里有一段是通过Spark程序写的自定义逻辑或者是通过数据同步工具直接导的血缘就在这中间断了。排查思路是按照数据流向逐段验证数据同步部分看同步任务配置里有没有声明源表和目标表的映射关系Hive SQL部分看SQL解析对不对特别是一些动态SQL比如从配置文件里读表名拼进去的很容易解析失败存储过程或自定义代码部分通常需要做手动映射维护这是血缘闭环里最难自动化的一段。4.3 质量规则告警太多反而没人看现象质量中心每天几百条告警团队从最初认真处理到后来直接忽略治理动作名存实亡。这就要回到前面提到的分级策略来整改把所有的质量规则重新审视一遍按影响程度分成阻断、告警、日报三类把不痛不痒的规则全部降级。同时给每条规则都要配置负责人告警生成后自动派发到人跟进不到位的要有升级机制。还有一个隐藏原因某些质量规则本身就是错的。比如对一张本来就允许空值的字段配置了非空校验或者是跨时区的日期字段用本地时间的规则去校验导致每天都报警。治理团队要定期复盘质量规则的有效性发现规则和业务逻辑不一致就立刻调整不要将错就错。4.4 权限模型设计过度复杂现象行级权限、列级权限、数据脱敏规则加起来几百条管理员维护成本极高业务方频繁抱怨“权限申请了几天都没下来”最后还是靠管理员手动放开了不必要的权限。在大数据环境下权限模型一定要往简化方向做。日常业务分析场景行级权限绝大多数情况下是不需要的先做好列级权限和脱敏就足够了。碰到少数真正需要行级权限的场景比如某个区域的分公司只能看自己区域的数据可以通过在数据服务层增加强制过滤条件来实现不需要在底层存储上做行级权限。权限申请流程不要超过两级审批同时要定期自动复核权限合理性比如超过90天未使用的权限自动回收。4.5 治理平台建设好之后没人用现象花了几十万采购或自研了元数据平台上线半年后日活为个位数。这是治理项目最容易翻车的地方。治理工具得有“用户视角”使用方们才会真的用。给数仓开发用核心体验是“开发过程中顺手就能看到上下游影响、能快速找到要复用的表”给数据分析师用核心体验是“能快速找数、能看懂口径、能确认数据是否可信”给管理层用核心体验是“一个报表看明白数据资产总量和质量情况”。如果平台只有一堆配置页面而没有面向这几种角色的价值出口当然没人用。落地的时候至少要把“数据地图找数”“变更影响分析”和“质量报告推送”这三件事做得极其顺手治理平台才有存在的意义。5. 数据治理体系的演进方向与扩展思考治理体系不是一成不变地建完就完了它要随着平台规模和业务复杂度动态生长。我个人在多个项目中观察到的治理演进路径大致会经过三个阶段。第一阶段是“管理驱动”阶段人拉人、文档推文档核心目标是摸清家底、定好规矩。第二阶段是“平台驱动”阶段把规矩固化到工具和流程里用平台能力替代人工检查。第三阶段是“数据驱动”阶段治理本身的决策也靠数据说话哪些资产被高频使用应该投入更多资源保障质量哪些资产长期无人问津应该降级存储成本或清理下线哪些质量规则长期零告警可以考虑降低执行频率。演进过程中有几个方向值得持续投入。数据资产的分级分类标签可以结合数据的实际使用情况定期校准比如一张表被多个下游核心任务依赖即使它本身是明细数据也应该被标记为高等级资产。数据质量的校验可以从“事后校验”逐步走向“事前预防”规则提前在数据开发阶段就跑一遍越早发现问题成本越低。血缘关系可以从“表级血缘”细化到“字段级血缘”做精细管理的时候知道一个字段是从哪个源头字段加工而来比只知道表对表的关联有用得多。还有一个始终不能丢的数据治理要和成本治理联动。大数据平台上每天都在产生大量临时文件和中间表很多跑完就不再用了。如果治理体系能识别出这些“垃圾数据”然后自动推动下线清理存储成本能省下不少。这个在我们实际项目中曾经帮客户把HDFS存储用量压缩了30%以上是治理体系说服管理层持续投入的一个关键成绩。从我自己的经验看数据治理最难的不是技术选型也不是规则设计而是让所有人相信“治理是帮大家省事的不是添乱的”。只要在落地的每一步都把这一点做到位——找数据更省事、变更评估更安全、口径对齐更高效、数据信任度更高——治理体系就不会是空中楼阁。最后分享一个细节技巧做数据质量规则的时候很多团队纠结于“规则的阈值怎么定”比如数据量波动超过多少算异常、金额差异率超过几个百分点要告警。我们实践下来前三个月不要追求精确阈值先用一个相对宽松的经验值上线然后根据实际运行数据的分布来动态调整。以数据量波动为例先设30%作为告警线跑一个月之后看正常波动的真实分布再收窄到10%或者放宽到50%。有了真实数据的反馈规则才会越来越贴近业务实际这是从教科书到落地之间必不可少的一步。
返回列表