
简介《银行数据标准管理办法》是一份面向银行数据治理从业者、数据管理岗及IT项目人员的规范性文档聚焦数据标准从制定、评审、发布到执行、变更、复审的全流程管理帮助解决跨部门、跨系统数据口径不一致、质量参差等痛点。资源包共1个docx文件约31KB内容涵盖总则、组织与职责、标准制定、评审发布等章节明确了数据管理领导小组与执行组的职责分工并给出业务规范与技术规范的划分方式以及客户、产品、协议、交易等十大基础数据主题的界定。文中还梳理了以业务为导向、全面性、前瞻性、科学性及遵循外部标准等制定原则并附有信息项归口管理、IT项目组落地等具体职责说明便于读者直接对照搭建本行数据标准管理体系。目前已有152人学习适合需要完善数据治理制度、明确岗位职责或推进标准落地的银行从业者参考借鉴。1. 银行数据标准管理办法.docx一份文档为什么能卡住整条数据链路很多团队做数据治理第一反应是买平台、搭中台、上调度结果半年过去指标口径还是对不上。真正卡住链路的往往不是技术组件而是一份没人愿意先写的文档——银行数据标准管理办法.docx。它听起来像行政文件实际是数据标准从口头约定变成系统约束的落地契约谁定义字段、谁审批变更、谁负责落标、出问题怎么追溯全在里面写死。适合三类人看正在牵头数据治理的负责人、被指标口径反复折磨的数仓开发、以及需要向业务解释为什么改一个字段要走流程的数据产品。这篇笔记不讲空泛的治理理念只拆这份办法该怎么写、参数怎么定、落地时哪里最容易翻车。2. 先想清楚数据标准到底管什么从字段命名到落标闭环2.1 数据标准的三层结构基础标准、指标标准、命名标准一份能落地的管理办法核心是把标准拆成可执行的三层。第一层是基础数据标准管的是字段本身字段中文名、英文名、数据类型、长度、精度、是否必填、枚举值范围。第二层是指标数据标准管的是派生逻辑指标口径、计算公式、统计维度、统计周期、数据来源表。第三层是命名与编码标准管的是可读性和一致性表命名规则、字段前缀、机构编码、币种编码、状态码。这三层不是并列关系而是依赖关系。基础标准是地基指标标准建在它上面命名标准贯穿两者。常见做法是先用一张标准字段登记表把基础标准固化下来再让指标标准引用字段的英文名避免同一个客户号在五张表里有五种写法。我一般会建议把三层标准分别建三张登记表而不是塞进一个 Excel 的多个 sheet。原因很简单基础标准的变更频率低但影响面大指标标准的变更频率高但影响面相对可控混在一起审批时很难区分优先级。2.2 为什么先定标准再建表几乎总是失败理论上应该先有标准再有表现实中绝大多数银行是反过来的存量系统跑了好几年表已经几百张这时候再推标准阻力极大。硬推的结果通常是标准文档写完就进档案柜开发该建表还建表。更务实的路径是存量认账、增量管控。存量表做一次盘点把已有的字段映射到标准字段上映射不上的登记为待收敛项不强制立刻改。增量部分从管理办法生效之日起新建表必须引用标准字段不引用就不给过评审。这样既不会让存量改造拖死项目又能保证标准逐步渗透。这里有个关键参数存量收敛的窗口期。太短开发团队扛不住太长标准永远落不了地。根据我见过的几个项目窗口期设在 2 到 3 个迭代周期比较合理每个周期收敛一批高频字段优先收敛出现在三张以上表里的字段。2.3 落标闭环的四个角色定义者、审批者、执行者、稽核者管理办法最容易写虚的地方就是职责。如果只写数据治理团队负责数据标准管理那基本等于没写。必须把闭环拆成四个角色每个角色对应具体动作。定义者是业务部门的数据专员负责提出标准字段的业务含义和枚举值。审批者是数据治理委员会负责裁定跨部门争议比如两个部门对有效客户的定义不一致时由它拍板。执行者是开发和数仓团队负责在建表、写 ETL 时引用标准字段。稽核者是数据质量团队负责定期扫描生产表找出未落标的字段并生成整改单。四个角色里稽核者最容易被忽略但它恰恰是闭环能不能转起来的关键。没有稽核标准就是一次性动作有了稽核标准才变成持续约束。3. 把管理办法写成可执行文档章节结构与关键参数3.1 一份可落地的管理办法应该包含的六个章节很多管理办法写成了制度汇编动辄几十页没人看。真正能被执行的版本六个章节足够总则、标准定义与分类、职责分工、标准制定与变更流程、落标要求与稽核、附则。总则写目的和适用范围控制在半页。标准定义与分类写三层结构和登记表模板。职责分工写四个角色的具体动作和时限。标准制定与变更流程是核心写清楚新增、修改、废止三种变更类型各自的审批路径。落标要求与稽核写增量管控规则和稽核频率。附则写生效日期和解释权归属。这里有个血泪经验变更流程一定要区分紧急变更和常规变更。紧急变更用于生产事故修复允许先改后补审批但必须在 24 小时内补完。没有这条遇到线上问题开发会被流程卡死最后所有人都会绕过流程。3.2 标准字段登记表的字段设计与参数说明登记表是管理办法的落地载体它的字段设计直接决定标准能不能被系统读取。下面是一张我常用的基础标准登记表结构用 SQL 建表语句表示CREATE TABLE data_standard_field ( std_id VARCHAR(32) NOT NULL COMMENT 标准字段唯一编号规则STD_业务域_序号, cn_name VARCHAR(64) NOT NULL COMMENT 字段中文名如客户统一编号, en_name VARCHAR(64) NOT NULL COMMENT 字段英文名小写下划线如cust_unified_no, data_type VARCHAR(16) NOT NULL COMMENT 数据类型STRING/DECIMAL/DATE/INT, length INT DEFAULT NULL COMMENT 长度STRING类型必填, precision_scale VARCHAR(16) DEFAULT NULL COMMENT 精度标度DECIMAL类型必填如18,2, nullable_flag CHAR(1) NOT NULL DEFAULT N COMMENT 是否可空Y/N, enum_domain VARCHAR(256) DEFAULT NULL COMMENT 枚举值域多个用竖线分隔, business_def VARCHAR(512) NOT NULL COMMENT 业务定义一句话说清含义, owner_dept VARCHAR(64) NOT NULL COMMENT 归口部门, status CHAR(1) NOT NULL DEFAULT A COMMENT 状态A生效/I停用/D废止, version_no INT NOT NULL DEFAULT 1 COMMENT 版本号每次修改递增, effective_date DATE NOT NULL COMMENT 生效日期, PRIMARY KEY (std_id) ) COMMENT基础数据标准登记表;逻辑说明std_id 是主键用业务域加序号的方式保证可读且不冲突。en_name 强制小写下划线是为了让标准字段能直接映射到物理表字段减少转换成本。enum_domain 用竖线分隔而不是建子表是因为枚举值通常不超过二十个建子表反而增加维护成本。参数说明length 和 precision_scale 分开存是因为不同数据库对这两者的处理不一样分开存可以在生成 DDL 时按目标库适配。version_no 每次修改递增而不是覆盖是为了保留历史版本方便追溯某个字段在某段时间的定义。effective_date 单独存而不是用创建时间是因为标准可能提前制定、延后生效。3.3 变更审批流的三种类型与时限参数变更流程如果只有一种审批路径要么太慢要么太松。我一般会设计三种类型对应不同的时限和审批层级。常规变更新增字段、修改业务定义、调整枚举值。审批层级为数据治理专员加归口部门负责人时限 5 个工作日。紧急变更生产事故相关的字段修复。审批层级为数据治理专员口头同意即可执行24 小时内补书面审批。重大变更修改字段英文名、数据类型、精度或废止已被三张以上表引用的字段。审批层级为数据治理委员会时限 10 个工作日且必须附影响面分析报告。影响面分析报告是重大变更的必备材料内容至少包括引用该字段的表清单、下游指标清单、改造工作量估算、回滚方案。没有这份报告委员会不应该批。我见过太多重大变更拍脑袋通过结果下游报表集体出错回头查才发现没人评估过影响面。4. 从文档到系统标准落标的工程化实现4.1 用元数据扫描自动发现未落标字段管理办法写完只是开始真正的难点是持续发现哪些表没落标。靠人工盘点不现实必须用元数据扫描。思路是定期从数据库的信息模式里拉取所有表的字段信息和标准登记表做比对。import pymysql def fetch_physical_columns(conn, schema): 从information_schema拉取物理表字段 sql SELECT table_name, column_name, data_type, character_maximum_length FROM information_schema.columns WHERE table_schema %s with conn.cursor() as cur: cur.execute(sql, (schema,)) return {(r[0], r[1]): r[2] for r in cur.fetchall()} def fetch_standard_fields(conn): 拉取生效状态的标准字段 sql SELECT en_name FROM data_standard_field WHERE status A with conn.cursor() as cur: cur.execute(sql) return {r[0] for r in cur.fetchall()} def find_unmapped(physical, standard): 找出物理字段中不在标准里的项 unmapped [] for (table, column), dtype in physical.items(): if column not in standard: unmapped.append((table, column, dtype)) return unmapped逻辑说明fetch_physical_columns 拉取物理字段返回以表名和字段名为键的字典。fetch_standard_fields 只拉生效状态的标准字段停用和废止的不参与比对。find_unmapped 做差集找出物理存在但标准里没有的字段。参数说明schema 参数按实际库名传入建议按业务域分库扫描避免一次拉取过多。扫描频率建议每周一次太频繁浪费资源太稀疏问题积压。扫描结果不要直接当整改单发出去先做一次人工确认排除临时表和中间表。4.2 建表 DDL 生成让标准字段直接变成物理表落标最有效的手段不是稽核而是让开发建表时直接引用标准字段。做法是提供一个 DDL 生成工具输入标准字段编号列表输出建表语句。def generate_ddl(table_name, std_ids, conn): 根据标准字段编号生成建表DDL placeholders ,.join([%s] * len(std_ids)) sql f SELECT en_name, data_type, length, precision_scale, nullable_flag, business_def FROM data_standard_field WHERE std_id IN ({placeholders}) AND status A with conn.cursor() as cur: cur.execute(sql, std_ids) rows cur.fetchall() cols [] for en_name, dtype, length, ps, nullable, comment in rows: if dtype STRING: col_type fVARCHAR({length}) elif dtype DECIMAL: col_type fDECIMAL({ps}) else: col_type dtype null_sql NULL if nullable Y else NOT NULL cols.append(f {en_name} {col_type} {null_sql} COMMENT {comment}) ddl fCREATE TABLE {table_name} (\n ,\n.join(cols) \n); return ddl逻辑说明函数接收表名和标准字段编号列表从登记表查出字段定义按数据类型拼接列定义。STRING 映射为 VARCHARDECIMAL 映射为带精度的 DECIMAL其他类型直接透传。可空标志转成 NULL 或 NOT NULL。参数说明std_ids 传入标准字段编号列表顺序决定列顺序。生成的 DDL 里注释直接取业务定义这样物理表的注释和标准登记表天然一致不会出现两处定义打架。这个工具建议做成内部服务开发在平台上勾选字段就能拿到 DDL降低落标门槛。4.3 稽核报告与整改单的自动生成稽核的目的是推动整改所以报告不能只列问题还要能直接转成整改单。整改单至少包含表名、字段名、问题类型、建议映射的标准字段、责任部门、整改时限。问题类型分三种未登记物理字段在标准里找不到、类型不符字段名对上了但类型或长度不一致、定义冲突同一字段名在不同表里业务定义不同。三种类型的整改优先级不同未登记最高类型不符次之定义冲突需要业务介入所以时限可以放宽。整改时限建议按问题类型区分未登记 5 个工作日类型不符 10 个工作日定义冲突 15 个工作日。责任部门从标准登记表的归口部门取取不到就落到表所属业务域。整改单生成后自动推送到工单系统形成闭环。5. 落地时最容易翻车的五个坑5.1 标准字段英文名频繁变更导致下游 ETL 集体报错现象某个字段英文名从 cust_no 改成 customer_no第二天十几条 ETL 任务报字段不存在。原因变更时只走了审批没有同步通知下游也没有做影响面分析。解决把字段英文名变更归入重大变更强制附影响面分析报告且要求提供至少一个迭代周期的双写过渡期新旧字段名并存下游改完再停用旧名。5.2 枚举值域写成自由文本导致校验失效现象标准登记表里 enum_domain 填的是1-正常2-冻结3-销户但开发理解成1正常 2冻结 3销户入库时格式不统一校验脚本匹配不上。原因枚举值域没有强制格式。解决规定枚举值域必须用编码含义的格式多个用竖线分隔例如1正常|2冻结|3销户并在登记表录入时做正则校验。5.3 稽核扫描把临时表和中间表当成未落标现象每周稽核报告里几百条未落标字段开发一看全是 tmp_ 和 mid_ 开头的临时表直接忽略整份报告。原因扫描没有排除规则。解决在扫描脚本里加表名前缀过滤排除 tmp_、mid_、bak_、test_ 开头的表同时维护一张白名单表把确实不需要落标的表登记进去。5.4 紧急变更被滥用成绕过审批的通道现象紧急变更占比超过三成几乎每个需求都走紧急通道审批形同虚设。原因紧急变更没有事后审计。解决每月统计紧急变更占比超过 10% 就触发复盘逐条检查是否真的符合紧急条件。同时规定紧急变更补审批时必须附事故编号没有事故编号的不予补批。5.5 标准登记表和物理表注释长期不一致现象标准登记表里字段定义改了三版物理表注释还是第一版新人看表注释被误导。原因变更时只改登记表没有同步物理表。解决把物理表注释同步纳入变更流程变更审批通过后自动生成 ALTER 语句修改注释或者由 DDL 生成工具保证新建表注释一致存量表在稽核报告里增加注释不一致检查项。6. 让标准真正被引用一个可验证的落标率指标管理办法写得好不好不看文档厚度看落标率。我一般会定义一个可验证的指标增量表落标率等于当期新建表中引用标准字段的比例目标值设在 90% 以上。这个指标的好处是可量化、可追溯、难造假因为新建表清单从元数据里拉引用关系从 DDL 里解析不依赖人工填报。计算方式用一个简单的 SQL 就能跑出来-- 增量表落标率当期新建表中引用标准字段的比例 SELECT COUNT(DISTINCT t.table_name) AS total_new_tables, COUNT(DISTINCT CASE WHEN s.en_name IS NOT NULL THEN t.table_name END) AS mapped_tables, ROUND( COUNT(DISTINCT CASE WHEN s.en_name IS NOT NULL THEN t.table_name END) * 100.0 / COUNT(DISTINCT t.table_name), 2 ) AS mapping_rate FROM information_schema.tables t JOIN information_schema.columns c ON t.table_name c.table_name AND t.table_schema c.table_schema LEFT JOIN data_standard_field s ON c.column_name s.en_name AND s.status A WHERE t.table_schema biz_db AND t.create_time DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND t.table_name NOT LIKE tmp_% AND t.table_name NOT LIKE mid_%;逻辑说明从 information_schema 拉当期新建表关联标准登记表判断字段是否命中标准最后算比例。LEFT JOIN 保证未命中的表也计入分母避免只统计落标表导致比例虚高。参数说明时间窗口 30 天对应一个迭代周期可按实际调整。schema 按业务库传入。排除临时表前缀是为了让指标反映真实业务表。这个指标建议每月出一次和稽核报告一起发给数据治理委员会落标率连续两个月低于 80% 就触发专项整改。除了落标率还可以加一个标准字段复用度指标统计每个标准字段被多少张表引用。复用度低的字段要么定义有问题要么推广不到位值得单独复盘。我自己的习惯是每季度看一次复用度排名把长期零引用的字段标记为待废止避免标准登记表越滚越大、越来越没人看。最后说个教训我早期推标准时总想一步到位要求所有存量表三个月内全部落标结果开发团队集体抵触项目差点黄掉。后来改成增量管控加存量分批收敛反而推得动。标准这件事快就是慢慢就是快。希望帮到你。本文还有配套的精品资源点击获取