Skip to content

第三章 数据中台:把数据接进来、治理好、变成资产

一家做风控的企业,数据往往散落在十几个业务系统里:信贷申请在一个库、征信回填在另一个库、黑名单是别人每天推来的一张表。想拿这些数据训练风控模型,第一步不是写算法,而是先把数据"接进来、洗干净、管起来、能被找到"。数据中台就是干这件事的底座——它是风控中台的数据接入、治理与资产化底层,负责把原始数据变成"干净、及时、治理好、可发现、按人脱敏"的可用数据,再交给上层的决策引擎去建指标、跑模型、出分数。

通俗来讲,数据中台就是企业数据的"总仓库 + 加工车间 + 货架目录"三件套:仓库负责收货(数据源接入)、车间负责分层加工(建模与 ETL)、货架目录负责让人快速找到并安全取用(资产与脱敏)。本章按"一个数据仓库自然长大"的顺序,把这三件套里的每个功能逐一讲透,并在末尾用一条真实业务线把它们焊回一起。

3.0 本章导读:按"数仓的自然生长"顺序理解各功能

数据中台的功能很多,但它们不是并列的一堆按钮,而是沿着"一个数据仓库自然长大"的顺序排列的。记住这条主线,后面每个功能落在哪一环就一目了然:

接数据源 → 建主题域 / 分层 → 建模型表 → 定标准 / 查质量 / 配脱敏 → 编成资产 → 配定时同步刷新 → 把数据给别人用(属主分享 或 审批工单)

两条把数据用起来的路径(先建立心智模型)

平台提供两条并存、不互相隔离的路径,读者从一开始就要分清,这决定了后面几乎每个功能"该不该对某张表生效":

  • 建模流: 接入 → 建主题域 / 分层 → 设计逻辑模型 → 发布工单建物理表 → 加工 → 挂标准 / 质量 / 脱敏。能力完整,能治理、能溯源、能审批、能脱敏。适合要长期使用、要合规管控的核心数据。
  • 同步直用: 对目标库有 OWNER 权限的人,直接建表 + 同步搬数,不建模型。省事,但挂不上脱敏和质量规则——对一张同步直用表点"配脱敏"会报"未找到表模型"。适合"只想把一张表搬过来直接查、进个目录"的临时数据。

说明: 两条路不隔离,可以先走同步直用把数据搬进来直查,后续再补建模型"晋升"为受治理的表。判断标准很简单——需要脱敏 / 质量 / 血缘 / 审批,或对目标库没有 OWNER,就走建模流;只想搬来直查进目录、且对目标库有 OWNER,就走同步直用。

谁在用它:角色与视角差异

数据中台对不同角色开放不同范围,这是理解"为什么我看不到某个页面 / 某个数据源"的关键:

  • 数据管理者 / 治理负责人: 规划主题域与分层、注册数据源、锁定中心库、审批各类工单。是"立规矩"的人——通常对数据源持 OWNER 并担任审批人。
  • 数据开发工程师: 按分层设计模型、写加工任务、配调度、发起跨部门取数申请。是"干活"的人——对不属于自己的源只有 READ,要用得先申请;而对自己建出来的表他就是属主,可以直接分享给同事并当场配脱敏(3.7.4)。
  • 资产治理角色(asset_governor): 登记资产元数据、维护分类与归层。
  • 资产消费角色(asset_consumer): 在数据地图找数、收藏订阅、申请取用。
  • 安全审计角色(security_auditor): 查操作审计、访问日志、权限变更记录。
  • 治理审批角色(gov_approver): 在工作台审批建表、发布、跨部门取数等工单。
  • 管理员(admin)/ 超级管理员: 全局安全策略(敏感类型、脱敏规则、兜底绑定、免脱敏白名单)收口在管理员;超管处处放过。但"把哪张表给谁、遮哪几列"不归管理员——那是各表属主自己的事(3.7.4)。
  • 资产属主(角色 role_data_owner_share): 谁把表建出来并发布落地,谁就是这张表的属主。可以把自己的表分享给别人,并在分享时逐列配脱敏。

平台的权限分两层:模块角色(如数据中台全权角色)管"能进哪些页面";细粒度职责角色(asset_governor / asset_consumer / security_auditor / gov_approver / role_data_read 等,完整口径见第二章 2.4.2)管"能做哪类事"。而"能不能看到、能不能写某个数据源或某张表"这件事,由更底层的资源级授权决定。除角色外,平台还有一层部门数据范围(按创建部门划定的可见范围)——所以同一个角色的两个人,视角也可能不同。这正是本节标题"视角差异"的两个来源:角色决定能进哪些页面、做哪类事,资源级授权 + 部门数据范围决定看得到、动得了哪些具体数据。

重要提示: 平台的权限控制点在"资源"层,不在"语句"层。资源级授权分 OWNER(可读、可写、可再授权)与 READ(只读)两级。改了角色或授权后不生效,绝大多数是用户权限缓存(有效期较长)未刷新——需要重新登录才会生效。 用裸 SQL 直接改过库里的角色 / 授权后尤其如此,须清缓存并重新登录。后文多处"权限已配但报无权",根因都在这里。

域边界(避免找错地方)

本章只讲数据中台。以下能力不属于数据中台,请到对应章节查阅:指标 / 特征体系、打分流、规则集、机器学习模型、数据服务发布、API 网关、A/B 实验,均属决策引擎与数据网关域。数据中台与它们的交接点只有一句话:治理好的 DWS 宽表,供决策引擎去建指标和模型。

产品功能入口

打开侧边导航栏,顶层分区即为 数据中台,其下按上述主线依次排布:数据源管理、数据模型、数据开发、数据标准、数据质量、数据安全、数据资产、自助分析。后文每个小节都会再次点明它在侧边栏的具体位置。


3.1 数据源接入与管理

3.1.1 注册与管理数据源

场景切入。 数据工程师上班第一件事,往往是把一个新的业务库接进平台——比如把外部信贷系统的库接进来,好在此基础上建模、同步、查数。数据源接入解决的就是这个"第一步"。

是什么。 数据源: 平台对一个可连接的数据存储的统一登记,一条记录就是一条真实的连接(某个地址上的某个库,加一套账号口令)。把散落的库注册进来之后,它就成为后续建模落地、数据同步、自助分析、资产扫描的统一取数入口——建表选哪个库、同步从哪搬到哪、写 SQL 查哪个源,都从这里登记过的数据源下拉里选。

为什么要用。 它是数据中台一切能力的起点。更重要的是它带一个"先验货再收货"的动作——测试连接:配好连接信息后当场探测能不能连通,把"账号密码错、端口不通、库名写错"这类问题挡在配置阶段,而不是等到半夜跑同步、跑建表时才在运行期暴露。如果跳过测试连接直接保存,后续同步 / 建表任务很可能在运行期才报连不上,排查成本高得多。

怎么做。

说明: 涉及该操作的功能权限:数据源的查看(能看到列表本身)与新建;测试连接编辑删除各是一条独立的功能权限,没配到的按钮不显示。可见性配置复用"编辑"权限,没有编辑权限就看不到那个入口。

  1. 打开侧边导航栏,进入 数据中台 → 数据开发 → 数据源管理,展示数据源列表;点击左上角 新建数据源 按钮,展示编辑页面。
  2. 选择 数据源类型。类型一选定,表单会按类型带出默认端口与驱动类,并决定要不要显示 SchemaFE 端口 / FE 节点 这些附加输入项(逐项说明见下表)。
  3. 填连接信息:数据源名称、主机地址、端口、数据库名(部分类型还要填 Schema)、用户名、密码。端口与驱动类留空即按类型默认值走。
  4. 点击 测试连接 按钮,等待返回结果。
  5. 连通后点击 确定 保存。

说明: 表单里没有"归属部门"这一项。数据源的归属部门取创建人当时所在的部门,由系统自动写入,界面上既选不了、事后也改不了——它决定了谁天然是这条源的属主(见 3.1.2)。

数据源类型逐项说明。 类型决定连接串怎么拼、用哪个数据库驱动、表单显示哪些附加输入项:

类型选了会发生什么什么时候用
MySQL默认端口 3306,连接串按 jdbc:mysql://主机:端口/库名 拼;不显示 Schema 输入框。驱动已随平台打包,开箱可连。接传统事务型业务库——信贷申请库、征信回填库这类。
PostgreSQL默认端口 5432,连接串按 jdbc:postgresql://主机:端口/库名 拼;多一个 Schema 输入框,测试连接时会切到填写的 Schema 再验。驱动已随平台打包。接 PostgreSQL 系业务库;协议兼容的同族数据库也走这个类型。
分析型(列式 / MPP)数仓默认端口 9030,复用 MySQL 协议与驱动;表单额外显示 FE 端口FE 节点(多个用英文逗号分隔)。测试连接除了连库本身,还会再打一次前端节点的健康检查接口,该接口不通就整体判失败。接中台自建的中心数仓。建表工单落地、引擎级列脱敏、按人账号鉴权都依赖这一类源。
Oracle默认端口 1521,连接串按 jdbc:oracle:thin:@//主机:端口/服务名 拼,显示 Schema 输入框。当前版本不可用,见下方提示。
Hive默认端口 10000,连接串按 jdbc:hive2://主机:端口/库名 拼,显示 Schema 输入框。当前版本不可用,见下方提示。
达梦默认端口 5236,连接串按 jdbc:dm://主机:端口/库名 拼,显示 Schema 输入框。当前版本不可用,见下方提示。

重要提示: 类型下拉里能选到 Oracle / Hive / 达梦,但平台随包只带了 MySQL 与 PostgreSQL 两个数据库驱动。选这三类点测试连接会直接报"缺少驱动: xxx",硬存下来也连不通。对外介绍时不要把它们当已交付能力;确需接入,得先把对应驱动补进平台的驱动模块并重新部署,再来配这条源。

说明: 只有分析型数仓这一类源受平台字段级安全(引擎级脱敏、按人授权)管控;外部纳管的业务库一概不管——接进来只做取数,不改写其中数据,也不在其上做列脱敏。这是产品的既定边界,不是配置问题。

测试连接实际做三件事,任何一步不过都判失败:

  1. 加载该类型的数据库驱动——驱动缺失直接报"缺少驱动: xxx",后面两步不再走;
  2. 拿填写的账号口令真发起一次连接,登录超时 5 秒;
  3. 类型是分析型数仓时,再打一次前端节点的健康检查接口(超时 3 秒)。库连上了但这一步不通,整体仍判失败——这种情况多半是 FE 端口 / FE 节点填错了。

连接参数:

参数名称描述
数据源名称列表与各处下拉里显示的名字,列表可按它模糊筛。
数据源类型见上表;决定连接串拼法、默认端口、默认驱动类与附加输入项。
主机地址 / 端口端口留空按类型默认值填。
数据库名要连的那个库。
Schema只有部分类型显示(PostgreSQL / Oracle / Hive / 达梦),测试连接时会切到该 Schema。
用户名 / 密码连接凭据。密码不在列表和详情里明文回显;编辑时留空表示沿用原密码。
驱动类留空按类型默认驱动类填,一般不需要动。
状态见下表。
备注自由文本,写清这条源是干什么用的,方便别人认。

注意: 数据库连接串由后端按"类型 + 主机 + 端口 + 库名"每次重新拼,不接受手工填写。要连一个非标准形态的库(比如必须在连接串上带一串参数),当前版本做不到。

状态逐项说明。

取值选了会发生什么什么时候用
正常默认值。这条源出现在建表、同步、自助分析各处的数据源下拉里,可以列库、列表、执行语句。正常接入、允许使用的源。
停用跨模块取数据源清单和详情时被直接过滤掉,各处下拉里选不到;按 id 访问也会被判"不存在或不可用"而拒绝。记录仍留在数据源管理列表里,随时可以切回正常。源要下线、或临时不让人用,但又不想删记录的时候——直接删源会把它上面配的共享规则一并删掉。

其他操作。

  • 编辑: 密码留空表示沿用原密码,不必每次重填;端口、驱动类留空按类型默认值回填。
  • 删除 / 批量删除: 只有这条源的属主能删(见 3.1.2)。删源会连带删掉它全部的共享规则,不可恢复——只是想让人暂时用不了,请改用"停用"。
  • 列表筛选: 支持按名称(模糊)、类型、主机地址(模糊)、状态四个条件筛。

数据源目前只有"物理数据源"一层。 一个数据源就是一条真实的连接信息——某个地址上的某个库(填类型、连接串、账号)。

说明(规划中,勿当已交付): 设计蓝图里还规划了逻辑数据源——给物理源起"用户库""交易库"这类业务别名,让业务人记别名、系统连物理源;以及批量注册 / 批量修改(一次接入同类的一批库)。这两项当前版本尚未实现,对外介绍时不要按已交付对待。

验证。 保存后返回列表,新数据源出现在列表中、状态为"正常",即表示接入成功;后续在建表、同步、自助分析的数据源下拉里都能选到它。

注意: 只读的业务需求方角色看不到任何数据源下拉,这是设计使然的隔离,不是缺陷——需要用数据请走 3.11 的跨部门申请。

3.1.2 数据源可见性与源级授权

场景切入。 数据管理者把一个信贷库接进来了,但不希望全公司都能看到它——只想让风控团队可见,别的部门要用得先申请。这就是可见性与源级授权要控制的。

是什么。 可见性配置解决一个问题:除属主之外,还有谁能用到这条源。它是数据资产可见性与跨部门申请的总控开关——把 OWNER / READ 两级授权落到具体的数据源上。

为什么要用。 这是全平台权限模型的落点——控制粒度在资源层。数据资产地图、表详情、血缘图能不能显示内容,主控就在这里:对数据源没有源级授权,数据地图 / 详情 / 血缘会全空。 反过来,授权配得越精确,越能做到"用数据的人只看到该看的源",满足最小权限。

怎么做。

说明: 具有该操作的角色:该数据源的 OWNER(超级管理员 / 租户管理员、与创建部门相同的成员、创建人本人)。

  1. 数据中台 → 数据开发 → 数据源管理 列表中,对目标源点行内 ···可见性配置
  2. 弹窗里只有三块:全租户可见 开关、共享角色共享用户,按需配置(逐项说明见下表)。
  3. 确定 保存。

三种共享方式逐项说明。

共享方式配了会发生什么什么时候用
全租户可见写一条通配规则。租户内任何登录用户对这条源都判为只读:能在各处下拉里选到它、能在数据地图看到它下面的表、能在查询工作台读它,但改不了配置、改不了可见性、也删不掉。人人都该能读的公共源,比如公共维表库、公共字典库。
共享角色按角色逐条写规则,持有该角色的用户对这条源判为只读。下拉可搜索选择,也可以直接手输角色标识,回车或英文逗号分隔多个。按岗位放开一批人,比如把信贷库放给风控建模岗。
共享用户按用户名或用户 ID 逐条写规则,两种写法都参与匹配;命中的人对这条源判为只读只给具体几个人开口子。

重要提示: 这三种方式配出来的一律是只读——弹窗里没有"授权级别"选项,配不出 OWNER;也没有"有效期"输入,手工配的共享永久有效。要让别人对这条源有写权限,只能靠部门归属(与创建部门相同的人天然是 OWNER)。带到期日的授权只有一条来路:跨部门数据申请审批通过后由系统自动授予(见 3.11)。

说明: 保存采用"先清后建",但只清手工配的那部分。审批流授予的共享既不受影响,也不会在这个弹窗里回显——弹窗看着是空的,不代表没人能读这条源。要查全谁能读,看操作审计里的授权记录(见 3.12)。

系统判定的访问级别。 上面配的是"给谁",系统每次访问时还会算出"这个人是哪一级"。这一级决定了他在管理列表里看不看得到这行、能不能改、能不能删:

级别怎么得到的有什么权限
OWNER(属主)三条命中其一:①超级管理员 / 租户管理员;②用户所在部门与这条源的创建部门相同;③用户就是创建人本人。配不出来,只能靠部门归属与创建人身份天然得到。全权:出现在数据源管理列表、可改配置、可改可见性、可删除、可在查询工作台跑任意语句。
READ(只读)三条命中其一:①被上面三种共享方式命中且未过期;②在这条源上拥有平台为他建出并已发布的物理表;③命中历史数据兼容兜底(见下方提示)。能在各处下拉与数据地图看到并读这条源,但在数据源管理列表里看不到这一行
NONE(无权)以上都不命中。下拉为空、数据地图为空、按 id 直接访问被拒。

注意: 平台有一个默认打开的历史数据兼容开关:创建部门为空、或创建部门就是根部门的存量数据源,对租户内任何登录用户自动降级授只读。这类早期建的源事实上"全员可读",不需要任何共享配置——排查"我没给他配共享,他怎么看得到"时,先看是不是这类源。

重要提示: 数据源这一层不做行级过滤,而且当前版本整个平台都没有可用的行级过滤——表级授权那边也一样(细节与替代做法见 3.7.2 末尾)。数据源级共享只有 OWNER / READ 两级。要"只让某人看到某几行",当前唯一可靠的做法是把这几行单独加工成一张表再分享

注意: 数据源的归属部门不能在界面上迁移。属主部门配错了(比如建源的人当时在错的部门),当前只能删掉重建,或由管理员在库里调整后清缓存重登。

验证。 用被授权的账号登录,打开数据地图,能看到该源下的表与详情;用未授权账号登录,同一位置为空。

重要提示: 资产互动的前置条件是"演示 / 使用账号必须对数据源有源级授权",否则数据地图、详情、血缘一律为空——这不是页面坏了。若确已授权仍看不到,多半是权限缓存未刷新(裸改库后尤其如此),需清缓存并重新登录。

说明(两个列表口径不同): 数据源管理列表只显示用户可管理(OWNER)的源;被授予 READ 的源出现在可用下拉与数据地图,不出现在管理列表——因此只持 READ 的用户在管理列表看到 0 条属正常,不是授权失效。业务消费方对数据源管理列表与可用下拉两个端点均无权,访问会被直接拒绝。


3.2 数仓规划:先立规矩

数据接进来之前(或同时),要先给仓库画好格子——不然表会像杂物间一样越堆越乱。规划分两件事:按业务分主题域按加工深度分层。这两件事都发生在数据真正落库之前,是"先立规矩、再建模"的第一环。

3.2.1 主题域设计

场景切入。 数据管理者要开一个新的信贷风控数仓,第一件事不是建表,而是先划出"信贷风控"这个大抽屉,把往后要建的表都归进去。主题域设计就干这个。

是什么。 主题域: 按业务把数仓表组织起来的分类树,最多三级。主题域页面维护的就是这棵树,它有三个用处:给建表时的"主题归属"下拉提供选项、给数据地图提供"按主题浏览"的组织维度、把主题缩写提供给分层的表名规则去拼表名。举个例子,把所有信贷风控相关的表都归到"信贷风控 credit_risk"这个主题域下,以后建的模型都落在这个框架里。

为什么要用。 先立规矩再建模。表建到几百张时,没有主题域就只能靠表名前缀猜业务归属;有了主题域,找数的人能顺着树一层层点下去,建模的人也知道新表该往哪挂。

怎么做。

说明: 涉及该操作的功能权限:主题的查看新建编辑删除四条。

  1. 打开侧边导航栏,进入 数据中台 → 数据模型 → 主题域,展示主题域树。
  2. 建一级主题点树顶部的 新增根主题;建下级则在树上选中父节点,点 新增子主题父级由入口决定——抽屉里的"挂载父主题"是只读回显,不能在表单里改挂到别处。
  3. 填写主题信息并保存。
参数名称描述
主题名称中文业务名,树上显示的就是它。
主题编码英文标识,全局唯一,重复保存会被拦下。
主题缩写短英文,分层表名规则里的"主题缩写"占位符取的就是它;留空时依次退回主题编码、主题名。
负责人自由文本输入框,不是用户选择器——填谁都行,只作责任标识,不产生任何权限,也不参与审批路由
发布状态见下表。
排序数字,决定同级节点在树上的先后。页面上没有上移 / 下移按钮,调顺序就是改这个数字。
描述写业务背景、范围、这个域装什么,供别人理解。

注意: 唯一性校验加在主题编码上,不在名称上——两个同名主题是能建出来的,两个同编码的不行。取名重复不会有任何提示,建的时候自己留意。

发布状态逐项说明。

取值选了会发生什么什么时候用
未发布默认值。列表与详情上显示灰色"未发布"标记。主题刚划出来、范围还在讨论。
已发布显示绿色"已发布"标记。主题定稿,可以开始往下挂表。

重要提示: 主题域的发布状态是纯展示标记,平台没有任何逻辑消费它。未发布的主题照样出现在建表页的"主题归属"下拉里、照样能挂表。不要理解成"没发布的主题不能用"。

层级逐项说明。

层级怎么建什么时候用
一级(根主题)树顶部的"新增根主题"。划一个大的业务域,比如信贷风控、反欺诈。
二级(子主题)在根主题上点"新增子主题"。域内再分小类,比如申请、征信、贷后。
三级在二级主题上再点"新增子主题";保存时系统会同时检查自挂父级与循环引用。最细一层。

注意: 到三级为止,再往下建会报"主题域当前仅支持三级"。另外,建表页的"主题归属"下拉不要求必须选到末级,根主题同样能选——要不要强制挂到末级,靠团队自己的约定。

重要提示: 删除主题是递归的——删一个节点会连它下面所有子孙主题一起删掉,操作前先展开看清楚。而且后端不检查这个主题下面有没有挂表:主题删了,挂在它下面的表模型既不会被拦、也不会被清理,那些表的主题归属会指向一个已经不存在的主题,在资产地图里就变成"找不到归属"。要删已经有表在用的主题,先把表改挂到别处。

其他操作。 刷新树、展开 / 折叠、选中节点看详情。页面上没有"编辑介绍""关联维度"这类单独入口——介绍就是编辑里的描述字段,维度定义在维度设计页维护(见 3.3.3)。

验证。 新建后主题域出现在左侧主题树对应层级;新建表模型时,"主题归属"下拉里能选到它。

3.2.2 分层设计(ODS / DWD / DWS / DIM / ADS)

场景切入。 主题域画好了,但同一个主题里的表还是有"生熟"之分:刚搬进来的原始数据、清洗过的明细、按维度汇总的宽表,不能混在一起。分层设计就是给它们分楼层。

是什么。 数仓分层: 按加工深度把数仓切成几层——贴源层 ODS(原样落业务数据)、明细层 DWD(清洗规整后的明细)、汇总层 DWS(按维度汇总的宽表);设计上还有维度层 DIM应用层 ADS。分层配置页面除了维护这些层本身,还给每层挂两套规则:表名规则(建模时按它拼表名,保存模型与发布建表时按它判违规)和表抓取规则(给没走建模流、直接在库里建出来的表做资产自动归层)。

为什么要用。 分层是数仓规范化的骨架。有点像仓库分楼层:一楼收原货(ODS)、二楼分拣(DWD)、三楼装箱上架(DWS),每层门口贴着"只收带某某前缀的货"。两套规则各管一头——表名规则管住"我们自己建的表得守规矩",抓取规则管住"别人直接建的表也能被正确归位"。

怎么做。

说明: 涉及该操作的功能权限:分层的查看新建编辑删除四条。

  1. 进入 数据中台 → 数据模型 → 分层配置。列表分 系统分层自定义分层 两段展示,每行右侧的彩点显示已启用 / 已禁用。
  2. 点击 新增分层,抽屉里有三个页签:基础配置表名规则表抓取规则
  3. 三个页签按下文逐项填完,保存。

基础配置页签参数:

参数名称描述
分层类型只读回显,系统分层 / 自定义分层,判定口径见下文。
分层编码英文标识,是这层的身份;被判为系统分层的行,这个输入框是禁用的。
分层名称 / 分层别名中文名与展示别名。
启用见下表。
命名规则预览只读,按"表名规则"页签配的内容实时拼出这层的表名期望格式,配规则时对着它看即可。
分层说明 / 备注写这层收什么样的表、加工到什么程度。

说明: 抽屉里没有"是否暴露"开关,也没有排序号输入框。库里虽然留了这两列,但界面不录入:暴露标识没有任何功能消费它;排序号会影响自动归层的优先级,受影响的后果见下文归层顺序那条提示。

启用逐项说明。

取值选了会发生什么什么时候用
是(启用)默认值。资产自动归层时这一层参与匹配。正常使用的层。
否(停用)资产自动归层遍历时跳过这一层,它的抓取规则不再生效。某层暂时不用、但规则想留着,过阵子还要开回来。

注意: 停用不等于建表时选不到——建表页拉分层下拉不带启用条件,停用的分层照样出现在"分层"下拉里、照样能选来建表。停用只影响资产自动归层这一件事。另外注意这里的开关方向与数据源状态相反:分层是"启用 / 停用",数据源是"正常 / 停用"。

系统分层与自定义分层。

分类有什么差别什么时候是这一类
系统分层列在列表上半段;分层编码输入框禁用、行上不给删除按钮和勾选框,只能改名称、别名和规则。平台预置的标准层。
自定义分层列在下半段;编码可改、可删、可批量删(编码撞上保留词的除外,见下方提示)。团队自己加的层——新建的分层默认都属于这一类。

重要提示: 是不是系统分层,判定分两套口径,别混为一谈。列表分段只看内置标记:自己新建的分层一律列在"自定义分层"段里,带勾选框、带删除按钮。但抽屉里的"分层类型"回显、分层编码输入框禁用、以及删除拦截,另看一条口径——分层编码小写后落在 ods / dwd / dws / dim / ads / map 这六个词里的,一律按系统分层对待。所以自己新建一个编码填 ODS 的分层,它仍然列在自定义分层段里、看着能删,但编辑时编码输入框是禁用的,点删除会被拒("系统分层不允许删除,只能编辑或禁用"),批量删里带上它也会整批被拦下。要建真正能改能删的自定义层,编码请避开这六个词。

表名规则页签。 左右两张表,分别是前缀规则后缀规则;每一行 = 顺序 + 规则类型 + 规则值。

位置会发生什么什么时候用
前缀按顺序号从小到大拼在表名主体前面,用下划线连接。校验时要求技术表名以"拼出来的前缀_"开头(整串转小写比较)。给一层定死开头,比如 ods_ / dwd_ / dws_
后缀拼在表名主体后面。校验按"候选集里命中任一即可"——配多条固定后缀,等于给建模人一组可选后缀,建表时在"表名后缀"下拉里择一。给一层定一组可选结尾,比如按装载方式标 _df(全量)/ _di(增量)。

规则类型逐项说明。

规则类型选了会发生什么什么时候用
固定字符串规则值先被规范化(转小写、非字母数字下划线的字符一律转成下划线、去重去首尾),再当字面量拼进表名。这是唯一被服务端真正强制的类型:表名不合规时,保存表模型和发布建表两处都会被拦下,报"技术表名不符合分层命名规则"并给出期望格式,系统不会自动改名绝大多数场景都用它——定死层前缀,或给出一组可选后缀。规则值必填,留空保存会报错。
主题缩写占位符,取当前表所选主题的顶级主题缩写(缩写为空依次退回主题编码、主题名),规范化后拼进表名。想让表名里带上业务域标识,比如 dwd_credit_xxx
二级主题缩写占位符,取所选主题节点自身的缩写,而不是顶级的。表名要区分到子主题。
正则表达式名不副实,不要用。 界面并不把规则值当正则,而是和固定字符串一样规范化后拼进表名;服务端则把它当"非固定"处理,反而会削弱强制力(见下方提示)。要拼一段固定字面量,直接选"固定字符串"。

重要提示: 除"固定字符串"外的三种规则类型服务端不强制:前缀规则一遇到非固定字符串的行就停止收集(后面的行不再强制),后缀只要有一行不是固定字符串,整组后缀都不再强制。也就是说,主题缩写这类占位符只在界面拼表名、展示期望格式时起作用,绕开界面直接改表名它拦不住。要真正约束住表名,前缀请从第一行起连续用固定字符串,后缀请整组都用固定字符串。

表抓取规则页签。 按"规则组"录入,一组同时填命中与剔除两侧;这套规则只在资产自动归层时使用,与建模流建出来的表无关(那些表的分层是建模时选的)。

会发生什么什么时候用
命中(表达式)"至少命中一条命中规则"是一张表归入这层的必要条件一层若一条命中规则都没有,任何表都不会归到它。写这层表名的通用模式,比如 ods_*
剔除(表达式)在已命中的前提下,只要再命中任意一条剔除规则,这一层立刻出局,继续试下一层。把"命中了前缀但不该归本层"的表挖掉,比如 ods_tmp_*

模式类型逐项说明。

模式怎么匹配什么时候用
通配符默认值。* 匹配任意多个字符、? 匹配任意一个字符,其余字符按字面量处理;整串匹配,不区分大小写。绝大多数命名匹配都用它。注意是整串匹配——写 ods_ 匹配不到 ods_user,得写 ods_*
正则表达式用正则做整串匹配,不区分大小写。通配符表达不了的复杂命名。表达式写错不会报错,只是静默地什么都匹配不上,配完务必拿几个真实表名验一遍。

注意: 自动归层的遍历顺序是"分层排序号从小到大、同号按创建先后,第一个命中的层胜出"。但分层抽屉里没有排序号输入框,新建的分层排序号一律是 1,同号时就退化成按建的先后定优先级。当前版本没法在界面上精确调归层优先级——写抓取规则时尽量让各层之间互斥,别指望靠优先级兜底。

注意: 只有"自定义分层"段的行才有删除按钮。删分层会连带删掉它的表名规则与抓取规则,但不检查有没有表模型挂在这一层——挂着的表分层归属会指向一个已经不存在的层。删之前先把表改挂到别的层。

重要提示(键模型与分层解耦): 表用哪种键模型不由分层决定,而由建表时的表类型决定(逐项见 3.3.1)。别指望"这是 DWS 汇总层"就自动拿到按主键去重。存量数据里表类型是自由文本(如"贴源全量表""明细表"),系统靠子串嗅探判断:大写后含 UNIQUE、或原串含"主键""更新"才判主键模型,"唯一键"这三个字并不会触发(它既不含"主键"也不含"更新",大写后也不含 UNIQUE),会被当成明细模型。至于会不会"数据翻倍",取决于写入方式而非分层:只有追加(append)写模式的跨源同步在明细模型上重跑才会累加;若用覆盖写 / INSERT OVERWRITE 装载(参考案例的 DWD / DWS 即如此),明细模型同样幂等、不会翻倍。

验证。 分层保存并启用后,建表页面的"分层"下拉能选到它;填一个不合前缀的表名保存,应立刻报"技术表名不符合分层命名规则"并给出期望格式。


3.3 数仓建模:把表设计好再落地

格子画好了,开始建表。平台的原则是先设计、后落地:在设计器里把表长什么样定清楚、留痕、过校验,再走工单真正在库里建物理表。

3.3.1 逻辑模型设计(表 / 字段 / DDL 预览 / 命名校验)

场景切入。 数据开发工程师要把清洗后的申请人明细做成一张 DWD 表,字段几十列,类型、含义各不相同。与其在库里反复 ALTER,不如先在设计器里把这张表画清楚、看着建表语句确认无误再落库。

是什么。 表模型页面解决"表在真建出来之前先把它定清楚"的问题:在两步向导里把分层、主题、表名、字段定好,存成草案,随时可以预览将要执行的建表语句、跑命名规范检测;确认没问题了再提工单,由审批人放行、系统去中心库真建物理表(见 3.3.2)。它产出的是"表的设计稿",不是物理表本身。

为什么要用。 先设计后建表加上语句预览,能避免手写建表语句出错;字段绑数据元则让口径跟着数据标准走,后续治理、比对、脱敏都有依据。更关键的是留痕——谁在什么时候把这张表设计成什么样,平台里查得到。

怎么做。 按 ODS → DWD → DWS 逐层建表:

说明: 涉及该操作的功能权限:表模型的查看新建编辑删除,字段的查看编辑,以及中心库配置。建议先建好贴源层,再往上加工。

  1. 进入 数据中台 → 数据模型 → 表模型。左侧是主题树,右侧是表模型列表,支持关键词搜索与状态筛选(未发布 / 已发布)。
  2. 点击 新建表,进入两步向导。
  3. 步骤① 表信息:选主题归属、分层、资源目录,填表中文名、表名主体与表名后缀,生成的表名会实时回显。
  4. 步骤② 字段配置:选表类型(键模型),逐列添加字段。
  5. 保存成草案。之后随时可以点 预览DDL 看将要执行的建表语句,点 规范检测 批量查命名合规。

步骤① 表信息参数:

参数名称描述
主题归属从主题树里选,决定这张表在资产地图按主题浏览时落在哪。根主题也能选,不强制到末级。
分层选完这里,下面的"分层约束"会回显这一层的表名规则,生成表名也按它拼。注意停用的分层同样在下拉里。
所属资产目录见下方提示,当前不产生任何效果
资源目录指向资源目录里维护的目录,保存时校验它存不存在;表模型列表可按它过滤。这才是真正有效的目录挂载。
分层约束只读,回显所选分层的命名规则,对着它起表名。
默认建表位置只读,回显中心库配置里设的数据源与库名(见下文"中心库配置")。
表中文名业务可读名,资产地图里显示的就是它。
表名主体(英文)表名中间那一段,自己起,是这张表真正的业务标识。
表名后缀从所选分层的后缀规则候选里择一。
表名拼接规则 / 生成表名只读,实时拼出最终落库的技术表名给你看,不用自己算。
描述 / 备注写这张表装什么、粒度是什么、从哪来。

注意: 页面上没有"执行人"选项,也没有"核心表 / 推荐表"标记。物理建表统一由系统以超级管理员身份执行(见 3.3.2),不按人选执行身份。

重要提示: "所属资产目录"下拉里的四个值(用户 / 交易 / 商品 / 营销资产目录)是界面写死的示例值,存下来之后没有任何功能会读它。真正有效的目录挂载是同一行右边的资源目录——要让表进对目录、能按目录被找到,配资源目录。

步骤② 表类型(键模型)逐项说明。 这是整个建模里最影响数据正确性的一个选择:

取值选了会发生什么什么时候用
明细模型(不去重,按键列排序)建表语句用明细键。同一业务主键写多行不去重,只按键列排序存储。默认值,也是多数场景该选的——贴源明细、事件流水、汇总结果,这些都不需要按主键覆盖。
主键模型(按键列去重 / 更新)建表语句用唯一键,同键的新行覆盖旧行;键列会被强制加非空约束。需要"同一主键只保留最新一条"的表,比如按客户号维护的客户档案表、按合同号维护的合同状态表。

说明: 存量数据里还可能看到"聚合模型""主键模型(旧取值)",以及"贴源全量表""明细表""汇总表"这类自由文本值,新建下拉里已经没有它们了。这些历史取值在真建表时一律按明细模型处理。看到库里是这类值、又确实需要按主键去重,请改成新建下拉里的"主键模型"再发布。

重要提示(键列怎么定): 字段列表里没有"是否主键""是否非空"这两列,界面上设不了。建表时的键列取的是字段列表的第一行(排序号最小的那个字段)——想换键列,就调整字段排序,把它挪到第一位。主键模型下键列会自动加非空约束,其余字段一律可空。

注意: 步骤②左上角的"存储格式"下拉(DEFAULT / V2 / COLUMN)是预留项,当前不生效——选什么都不会随请求保存,建表语句里也不会出现存储格式属性。分桶数与副本数目前是固定值,界面上不开放调整。

注意: 顶部的"分区字段"多选、字段行里的"分区字段"是 / 否、以及"枚举值"输入框,当前填了不会保存,建表语句里也不会生成分区定义。要约束字段取值范围,改用同一行的标准字典绑定数据元——那两个是真会落库的,保存时还会校验所选标准存不存在。

字段列表的十列:

描述
字段名称业务可读的中文名,用于展示。
字段英文名落库真正用的列名,必须是合法标识符,这一列不能空。
字段类型从下拉里选,逐项见下表。
字段描述这一列是什么、口径是什么。
绑定数据元绑任意一条已登记的数据元(下拉不按发布状态过滤,草稿态的也照样能绑上;下拉最多带 500 条,超出的不显示)。保存时只校验这条数据元存不存在;绑上之后口径与值域跟着数据标准走(见 3.6.1)。
标准字典绑数据字典,约束这一列的取值范围(见 3.6.2)。
枚举值当前不生效,见上方提示。
分区字段当前不生效,见上方提示。
备注自由文本。
排序决定字段在建表语句里的先后;第一行同时是默认键列,见上文。

说明: 字段列表里没有"标准化标签(维度 / 度量 / 指标)""来源表 / 来源字段"这些列。这些概念在平台的别处体现:字段口径统一靠绑数据元,表与表之间的血缘由加工任务的实际 SQL 解析得到(见 3.9.1),不需要在建模阶段手工声明。

字段类型逐项说明。 下拉里共 21 项,按族理解即可:

类型选了会发生什么什么时候用
BOOLEAN / TINYINT / SMALLINT / INT / BIGINT / LARGEINT整数与布尔,原样写进建表语句,不带长度。计数、标志位、ID。按取值范围从小往大挑,ID 类一般用 BIGINT。
FLOAT / DOUBLE浮点,原样写进建表语句。精度要求不高的度量,比如比率、评分。
DECIMAL / DECIMALV3定点小数。精度不可调:一律固定生成 27 位总长、9 位小数。金额、利率这类必须精确的数值。别用浮点存钱。
DATE / DATEV2 / DATETIME / DATETIMEV2日期与日期时间,原样写进建表语句。业务日期用 DATE 系,发生时刻用 DATETIME 系。
CHAR / VARCHAR定长 / 变长字符。长度不可调:一律固定补 255。证件号、姓名、编码类字段。
STRING大文本。若这一列恰好是键列(排在字段列表第一行),会自动降级成 255 长的变长字符——引擎不允许变长大文本做键列。备注、报文、原始 JSON 串这类长文本。
JSON / ARRAY / MAP / STRUCT半结构化类型,原样写进建表语句。嵌套结构、标签数组。这几种不能做键列——若它排在字段列表第一行、表里又没有别的键列,建表会失败,把它往后挪。

注意: 字段列表里没有长度 / 精度输入列,字段类型也是固定下拉、不能手输,所以 DECIMAL 的精度与字符类型的长度在建模界面上无法指定。确实需要别的长度,只能在物理表建出来之后由数据库管理员到库里调整——而这类调整平台不感知,请同步更新字段描述,免得后来人被误导。

重要提示(易踩坑): 建模页会逐行拦住空的字段英文名(报"第 N 行字段英文名不能为空"),从这里建不出没有英文名的字段。但平台里的表不止建模流这一条来路——资产扫描登记进来的表、以及有人直接在库里手工建的表,就可能出现"只有中文名、没有合法英文列名"的列。这类列一旦配了脱敏规则,脱敏改写会"失败即拒绝"(中文名拼进 SQL 会生成非法列名),整条查询直接查不出来。凡是要被脱敏的列,都必须有合法的英文列名。

两个随时可用的检查工具。

  • 预览DDL: 展示这张模型将要执行的完整建表语句,建表前对着它逐行确认。它带数据范围守卫——别的部门的模型预览不了。
  • 规范检测: 对当前可见范围内的全部表模型批量跑两个维度的检查:分层维度(技术表名是否符合所在层可强制的固定前后缀)、词根维度(表名和字段英文名里有没有未登记的词根,词根库见 3.6.2)。单次结果最多 500 条,超出会在最后一行打截断标记;结果支持导出清单,拿去逐条整改。

中心库配置。 表模型页顶部的 中心库配置 按钮,定的是"建模流的表统一落在哪个库"。全局只有一份,不是按部门、按人配的,改了对所有人生效。

参数名称描述
中心库数据源建模落地的目标源,一般就是中台自建的分析型数仓。
中心库库名落地的库名。
强制只允许中心库建表见下表。
备注写清这个库的定位。
取值选了会发生什么什么时候用
开(默认)保存表模型时强制三条:必须落在配置的中心库数据源上、必须填库名、库名必须与中心库库名完全一致。任一条不满足直接报错、存不下来。建表页的"默认建表位置"因此是只读回显,保存时按当前中心库覆盖。常态。中台建模统一落一个中心数仓,统一治理、统一脱敏、统一授权才谈得上。
跳过上面三条校验,表模型可以指定别的数据源与库,库名变成自由文本。确需把模型落到非中心库的特殊场景。不建议常开——落在中心库之外的表,引擎级脱敏与按人授权都管不到它。

其他操作。 编辑、删除、批量删除、跳转表详情(表的业务信息在那边改,见 3.3.2 末尾),以及发布相关的动作(提交发布审批 / 取消发布),统一见 3.3.2。

说明: 建表向导只有"表单模式"一种。当前版本没有"SQL 模式 / DML 模式"直接贴建表语句建表,也没有"引用标准导入""文本解析导入""批量导入表"这些提速入口——字段要逐列填。已经存在于库里的物理表想纳入平台管理,走的是资产扫描登记那条路(见 3.9.2),不是建模流。

验证。 预览DDL 能生成完整、语法正确的建表语句,规范检测对这张表无违规,即可进入下一步发布。

3.3.2 建表发布工单(审批 → 执行器建物理表)

场景切入。 设计稿画好了,但在库里真建一张表是不可逆的动作,不能谁都随手就建。平台的做法是:发布走一张工单,让审批人过一眼,通过了才由执行器落库。

是什么。 设计好的模型不是"保存即建表"。点"提交发布审批"生成一张表模型发布工单,审批人在治理工单页面处理;审批通过后由执行器在目标库真正建表,并把表模型状态置为已发布

为什么要用。 在库里建物理表是不可逆操作,工单化保证它经过审批、留痕、可追溯——建表、数据元发布、指标发布、资产发布都会各自生成一张发布工单,审批前一律不生效。

怎么做。

说明: 涉及该操作的功能权限:提交由建模人发起(工单提交权限),审批需要工单的审批权限。审批人当前的实际口径见下方提示。

  1. 表模型 列表里,对一张未发布的表点 提交发布审批,填申请理由,系统生成一张表模型发布工单
  2. 审批人进入 数据中台 → 数据安全 → 治理工单,在 待我审批 页签打开这张单,看申请理由与工单详情。
  3. 通过(二次确认后系统立刻派发执行器建表)或 驳回(驳回原因必填)。
  4. 建表成功后,表模型状态变为已发布;申请人可在 我的申请 页签看到结果与执行摘要。

审批通过时,执行器按顺序做四件事:

  1. 先探测目标库里有没有同名表;
  2. 没有就下发建表语句(刻意不带"不存在才创建",撞名要显式暴露出来,而不是悄悄跳过);
  3. 把表模型状态置为已发布,并且只有确实是这一次建出来的表,才登记"发布落地记录";
  4. 把中心库里对应的派生资产标为已发布。

这四步里任何一步失败都会抛错并整笔回滚,工单不会变成已通过——所以看到"已通过",就意味着表真的建出来了。

还有一步在这四步之外:给建模人授引擎侧读权限。 表建出来之后,系统会把这张表的读权限授给建模人在引擎里的账号(只对平台这次真建出来的表授,挂接他人既有表时不授)。这一步排在工单事务提交之后单独跑,而且失败了只记日志、不报错——因为建表语句已经落库、回滚不了,不能让授权失败把整张工单拖回滚,留下"表已建出来但记录没写"的孤儿表。

注意: 正因为如此,工单显示"已通过"不等于引擎侧授权一定成功。常见的失败原因是建模人在中台数仓里的账号还没就绪。发布之后属主自己查一下这张表,若被拒绝访问,请联系管理员补授,不必重新走工单。

说明: 建表执行由系统以超级管理员身份跑,审批人本人对目标库有没有权限,不影响建表成败

重要提示: 如果目标库里已经存在同名表,执行器不建表,只把模型挂接上去并置为已发布,工单的执行结果摘要里会写明"本次未执行建表,仅挂接"。这类表因为没有平台建表记录,在平台内不可回收(见下文)。发布前先确认库里没有同名表,能省掉很多解释成本。

工单状态逐项说明。

状态含义这时能做什么
待审批刚提交,还没人处理。只有这个状态的单能被通过、驳回、撤回。
已通过审批人点了通过、且执行器执行成功。记下审批人、办结时间和执行结果摘要。只能看。
已驳回审批人点了驳回并填了原因。表模型仍是未发布。建模人按驳回原因改完设计,可以再提一次。
已撤回申请人自己撤的。改完可以重新提交。只能撤自己发起、且还在待审批的单。

治理工单的三个页签:

页签看到什么
我的申请只列自己发起的单,行上有"撤回"按钮。
待我审批用于找待办;"通过""驳回"两个按钮只在这个页签里出现
全部管理员看全平台的单;非管理员在这里仍然只看得到自己发起的(防止横向列举别人的单)。在这个页签里看到待办单也没法直接批,得回"待我审批"。

注意(当前版本限制): 建表工单的审批在非超管手里是走不通的:"待我审批"页签的查询口径前后端不一致,非管理员打开它,看到的其实是自己发起的单,不是等自己审的单。结果是——新提交的建表工单当前只有超级管理员能审批,即使把治理审批角色配给了人也一样。这是已知问题,修复前请安排超管审批建表工单。

注意: 提单人不能审自己的单,避免自审自批;同一个对象已经有一张待审批的同类型工单时,再提交会被拒("该对象已有待审批的工单,请勿重复提交")。

表模型状态逐项说明。 表模型的新建 / 编辑抽屉里没有状态字段——状态只由"提交发布审批 → 审批通过"和"取消发布"这两个动作改:

状态处于这个状态时是什么样什么时候是它
未发布(草案)新建表模型的默认状态。可编辑、可删除,行上显示"提交发布审批"。物理表还不存在。设计阶段,或取消发布之后。
已发布建表工单审批通过、执行器建表成功后自动置上。行上的提交按钮换成"取消发布",模型不能直接删;中心库里的同名派生资产同时被标为已发布。物理表已落地,可以开始加工和被消费。

重要提示: 关于已发布的表,有三件事和直觉不同,务必记住:①编辑一张已发布的表不会把状态退回草案,也没有版本号递增——表模型没有版本这个概念;②改了字段不会去改物理表——重新发布时执行器探测到同名表已存在就跳过建表,库里的表结构还是老的;③因此已发布的表要改结构,得先把库里的物理表处理掉,再重新走一遍发布。日常小改(描述、备注)直接编辑即可,涉及字段增删改的按这条来。

发布之后的三个动作:

动作会发生什么什么时候用
取消发布只把状态退回未发布、把派生资产标为已下线。不删物理表、不清发布落地记录。要改结构、或要删模型之前的第一步。
回收物理表到目标库把这张物理表删掉。见下方提示,当前基本用不上。
删除模型删掉设计稿。已发布的表禁止直接删,必须先取消发布;删的时候若这张表有平台建表记录,会弹二次确认。这张表彻底不要了。

重要提示: 删除模型时物理表按设计保留,但模型一删,平台内就永久失去了回收这张表的路径(平台只认自己的建表记录)。要彻底清掉一张平台建出来的表,顺序是:取消发布 → 回收物理表 → 删除模型。顺序反了,库里会留下一张没人管的表。

注意: "回收物理表"按钮受一条独立的功能权限控制,没配到的账号看不到它;更关键的是后端有一个默认关闭的总开关——开关关着时,按钮点下去只会提示"物理表回收功能未启用"。即便管理员把开关打开,也仍要求"已下线 + 有平台建表记录 + 对落地数据源是属主"三条同时成立才让删。当前版本要删物理表,请由数据库管理员在库里操作。

表的业务信息在哪改。 表模型页只管设计(分层、主题、表名、字段);表的业务属性——生命周期、资产目录、业务描述等——在 数据中台 → 数据资产 → 表详情 → 编辑业务信息 里改(见 3.9.1)。其中生命周期逐项如下:

取值选了会发生什么什么时候用
长期资产地图的表卡片上多一个"长期"标签。长期保留的核心表。
月度 / 季度 / 年度卡片上分别显示"月度""季度""年度"标签。按月 / 季 / 年滚动保留的表,给用数的人一个保留周期的预期。
临时卡片上显示"临时"标签。一次性、用完即弃的表。
未设置卡片上不加生命周期标签。默认值。

重要提示: 生命周期当前是纯标签——平台不会因为选了"月度"就按月清理或归档数据,它只影响资产卡片上显示的那个标签。到期清理要自己配调度任务去做(见 3.5.3)。

验证。 工单状态变为已通过、执行摘要显示建表成功后,到自助分析或数据地图查这张表,物理表已存在、表模型状态为"已发布"。

3.3.3 维度设计(维度定义登记)

场景切入。 建了一堆事实表和维表之后,团队里常常说不清"客户维度到底以哪张表为准、还关联了哪些辅表"。维度设计就是把这件事登记下来的地方。

是什么。 维度设计页面解决"维度定义记在哪"的问题:一个维度 = 主题域 + 维度类型 + 一张主维表 + 若干关联维表。它是建模域的补充登记信息,不参与建表语句生成,也不会去校验主维表里真有那些列。

为什么要用。 口头约定的维度口径最容易走样,各人建各人的维表,最后同一个"客户"在三张表里三个粒度。登记下来之后,建模评审和资产盘点时有个统一说法可查。

怎么做。

说明: 涉及该操作的功能权限:维度的查看新建编辑删除

  1. 进入 数据中台 → 数据模型 → 维度设计
  2. 点击 新增,填写维度信息并保存。
  3. 列表支持按状态(未发布 / 已发布)筛选。
参数名称描述
维度名称这个维度叫什么,比如"客户维度"。必填。
英文标识这个维度的英文身份标识,填在维度名称右边。必填。
主题域这个维度归哪个业务域。
维度类型自由文本输入框,不是下拉,默认填 standard。平台不校验取值,填什么存什么——当成团队自己的分类标记用即可。
主维表定义这个维度的那张表,一个维度只能有一张。
关联维表多选。选中的每张表都会记成这个维度的关联表;当前只有一种关联关系,不区分关联类型。
状态未发布 / 已发布,与主题域一样是纯展示标记,平台没有逻辑消费它。
描述 / 备注写清这个维度的粒度、主键、常用属性。

验证。 保存后维度出现在列表里,按状态筛选能筛到;打开编辑,主维表与关联维表回显正确。


3.4 两条数据流:建模流 vs 同步直用(选路指南)

场景切入。 数据管理者这天要接两批数据:一批是每天推来的黑名单表,只需搬进来直接查;另一批是申请人主数据,要清洗、脱敏、跑质量、供建模。同样是"接数据",这两批该走完全不同的流程。

是什么。 平台把"把数据接进来用起来"分成两条并存路径,读者要按数据的用途选路,而不是所有数据都走一样的流程。前面 3.0 已经建立了心智模型,这里给出可操作的选路判断和一个真实分叉例子,方便读者在实际建仓时"当场选对路"。

为什么要用。 两条路各有取舍:建模流能力完整但环节多,同步直用省事但挂不上治理。选错路会带来返工——把只需直查的表拉去走全套建模是浪费,把要脱敏的核心数据走同步直用则埋下明文泄漏隐患。

怎么选:

走哪条满足什么条件
建模流需要脱敏 / 质量 / 血缘 / 指标 / 审批中的任意一项,或对目标库没有 OWNER。
同步直用只想把数据搬来直查、进个资产目录,对目标库有 OWNER(超管 / 同部门 / 创建人)。

一个真实分叉(信贷线):

  • 每天推来的黑名单表只需搬进中心库直接查,不做脱敏——走同步直用:先在自助分析里手写 CREATE TABLE 预建目标表 → 建单表同步任务搬数 → 资产扫描登记 → 直接 SELECT 查。
  • 申请人主数据要清洗、要脱敏身份证 / 手机号、要跑质量、要供建模——走建模流:主题域 → 分层 → 逻辑模型 → 发布工单 → 加工 → 治理。

验证。 走同步直用的黑名单表,能在数据地图查到、能直接 SELECT;走建模流的申请人表,发布后处于 standard、能挂上数据元和脱敏。两条路产出的表都出现在资产目录里,但只有建模流的表能点开脱敏 / 质量配置。

注意: 同步直用建出来的无模型表能查、能进资产目录(列信息有兜底),但挂不上脱敏 / 质量——对它点"配脱敏"会报"未找到表模型"。这是刻意的设计边界,用来引导需要治理的数据回到建模流。另外,平台不会自动建目标表(sink 表),同步前目标表必须由 OWNER 先建好。


3.5 数据集成:把数据搬进来、加工好、定时刷新

数据源接进来了、模型表也建好了,接下来要解决的是让数据真正流动起来:把外部库的数据搬进中台、在中台里分层加工、再挂上定时计划每天自动刷新。

这件事被拆在五个页面里,都在侧边导航栏 数据中台 > 数据开发 之下(同一分区里还有一个 数据源管理,见 3.1),职责各不相同,先分清再往下看:

页面解决什么问题
任务开发存放单个"可执行任务"。一个任务 = 一种任务类型 + 一份该类型的配置(数据源、SQL、字段映射、接口等)。它既是编排画布上节点的素材,也是能单独绑调度跑的最小单位。
任务编排把多个任务按依赖串成一张有向无环图(DAG),在画布上画出整条加工链路。
调度管理给编排或任务挂定时计划。一条计划 = 一个作业(调度什么、传什么参数、启不启用)+ 一个触发器(Cron、时区、错过了怎么补)。
运行记录查跑出来的节点级执行明细:哪个节点、什么时候跑的、成没成、错在哪;失败节点可以从这里重跑。
参数管理维护任务里能引用的参数(系统日期、上次执行时间等)。增量同步的时间窗口与水位就取自这里。

说明: "建任务"和"建编排"是两件事,不要混。只有一步的活(例如单表贴源同步)直接建任务、给任务挂调度即可,不必为它建一条只有一个节点的编排;要串多步、要分支、要复用,才用编排。

3.5.1 库到库同步(单表同步)

场景切入。 中心库里的表建好了,可里面还是空的。数据工程师要做的下一件事,是把外部信贷库里的黑名单表真正搬进来。

是什么。 库到库同步,就是配一个"源库 → 目标库"的搬运任务,把外部业务表的数据同步进中台数仓(例如把外部信贷库里的黑名单表搬进中心库的同名表)。它在平台上对应任务开发页里的一种任务类型——离线同步任务

为什么要用。 把业务库数据周期性搬进数仓,是"数仓里有干净、及时数据"的前提——这是一条数据一生的第一步。没有这一步,后面的加工、治理、建模全是无米之炊。

怎么做。

说明: 涉及该操作的功能权限:同步任务的新建执行;目标表须已由 OWNER 建好。

  1. 打开侧边导航栏,进 数据中台 > 数据开发 > 任务开发,点击 新建——直接进入任务编辑器,不需要先存一次。
  2. 在编辑器左侧的 基础信息 栏填 标准名称简称中文解释,选 任务类型 为"离线同步任务"(类型一选定,右侧的配置面板随之切换)。
  3. 配置面板分两步。第一步 源端配置: 选源数据源(纳管数据源或本地文件),再选库 / 模式 / 表,拉出源字段;只想搬源表的一部分数据时,填下面的 业务过滤条件
  4. 同一步里的 抽取设置: 选抽取模式(全量 / 增量);选了增量,再配起止字段、比较符、参数与回写策略。
  5. 点"下一步"进第二步 目标端配置: 选目标数据源、目标表与写入规则;目标类型支持分区时再配分区。
  6. 点"进入字段映射",在 字段映射 页签里逐行确认:同名字段自动匹配、类型自动转换,按需把取值方式改成表达式。
  7. 点右上角 保存(或 保存并关闭)。想立刻验证就回列表点 运行;要每天自动跑,点 新建计划(见 3.5.3)。

任务开发页上有哪些操作、各自干什么:

操作作用说明
新建 / 编辑建一个任务、或改它的配置。标准名称与简称都会显示在列表和画布节点上,务必起中文名,否则事后看编排一眼认不出是哪一步。
运行立刻跑一次,产生一条"单任务运行"的记录,可在运行记录里查。离线同步任务是"提交即返回"(见本节末尾),点完只代表提交成功。子编排类型点它会被拒绝(提示不支持单独运行)。
新建计划跳到调度管理并自动预填该任务,少填一次关联对象。子编排类型不显示这一项。
批量绑定调度勾选多行,一次给多个任务建调度作业。已绑定的会自动跳过,不会重复建。
预览配置看后端将下发给离线同步引擎的那份作业配置,用来核对"我配的和引擎收到的是不是一回事"。仅离线同步任务可见;配置里的口令一律掩码。在任务编辑器里对本地文件源点预览会提示暂不支持。
删除 / 批量删除删掉任务定义。被编排引用的任务删不掉——保存时直接被拦下,提示"任务已被任务流引用,无法删除"。要删它,先把引用它的编排节点去掉。

先选对任务类型。 新建任务时"任务类型"下拉里有五项,选错了后面整套配置面板都是错的:

任务类型是什么什么时候选它
离线同步任务把一张源表的数据搬到一张目标表。保存的配置会被编译成一份离线同步引擎的作业,提交给引擎异步执行。跨库把业务表搬进数仓贴源层,或把中台结果表推回外部库。一个任务只搬一张表。
SQL 任务在选定数据源上执行一段 SQL,同步返回结果。分层加工(贴源 → 明细 → 汇总)、覆盖写装载、库内轻量清洗。详见 3.5.2。
指标提取按配置好的指标编码去指标服务取指标值,把取到的字段作为节点输出交给下游。编排里要先把"某申请人近 30 天查询次数"这类指标取出来,再喂给下游分支或打分。详见 3.5.2。
HTTP 调用调用数据网关上已发布的接口,把响应按配置解析成节点输出。需要调外部系统或平台自身已发布的对外接口取数据。详见 3.5.2。
子编排在一条编排里嵌套调用另一条编排,跑完把子编排的输出回吐给本节点。多条链路共用同一段处理逻辑时,抽成子编排复用。

注意(三个容易踩空的地方): 1. 列表里可能看到机器学习算子 / Python 脚本任务 / Shell 脚本任务这三种历史类型——它们在新建下拉里已经没有了,后端也没有对应执行器,放进编排跑会报"未注册的任务类型",不要用(机器学习建模走独立的建模画布,不经这条链路);2. HTTP 调用任务在编排画布上选不到——画布的候选任务列表把这个类型排除了,它当前只能单独运行或单独绑调度;3. 子编排不能单独运行——任务列表的"运行"按钮对它照样显示,点了才报"子流程任务不支持单独运行",别当成故障;任务列表也不给它"新建计划"入口,而调度管理页手工新增时它仍会出现在关联任务下拉里,绑上去到点执行同样会被拒,选之前先确认任务类型。

离线同步任务的配置逐项说明。

(一)源端配置 · 源数据源。 源数据源下拉里除了已纳管的库,还有一项"本地文件":

取值是什么什么时候用选了会怎样
纳管数据源从数据源管理里已登记的库中选一个,再选库 / 模式 / 表。常规的库到库同步。要对该数据源有相应权限才选得到、读得出表结构。
本地文件上传一个本地文件,解析出列结构当数据源。一次性把外部给的清单文件(名单、码表)导进数仓。后端把它转成对象存储上的文件读取配置再交给引擎。

注意: 选了本地文件后,抽取模式被强制按全量处理(增量相关配置整片隐藏),而且在编辑器里对它点不出"预览"(会提示暂不支持)。要做增量,源必须是纳管数据源。

(二)源端配置 · 本地文件解析参数(仅源数据源选了本地文件时出现):

参数取值作用
分隔符自动识别默认。上传后由解析接口探测真实分隔符,并当场换成探测到的那一项存进配置
逗号(,)/ Tab / 竖线 / 分号(😉明确指定字段分隔符。文件正文里含逗号、或自动识别切错列时手工指定。
编码utf8默认。
GB18030旧系统导出的中文文件常用这个编码,读出来是乱码就切过来重新解析。
首行识别首行为表头第一行当列名,不作为数据。
自动生成列名整个文件都是数据,列名由系统按序生成。

注意: 分隔符选"自动识别"时,万一探测失败、这个值原样留在了配置里,后端的兜底是按逗号处理,并不会在运行时再识别一次。解析完请对着样例预览核一眼列有没有切对;首行识别选错则要么丢一行数据、要么多出一行全是列名的脏数据。

(三)抽取设置 · 抽取模式:

取值是什么什么时候用选了会怎样
全量不生成任何增量条件,每次都按字段映射把整张源表取一遍(可另叠加业务过滤条件)。小表、维表、每次都要重取的快照表;或源表没有可靠的时间 / 自增字段。界面上"游标类型 / 起止字段 / 起止符号 / 起止参数 / 回写策略"整片隐藏。
增量按配置的窗口拼出 WHERE 条件:起始条件 = 起始字段 起始符号 起始参数,结束条件 = 结束字段 结束符号 结束参数,两条再与业务过滤条件用 AND 串起来。参数取自参数管理里的系统参数,运行时现算成具体值。大表按天 / 按小时增量搬,配合"上次执行时间"参数与回写策略形成自动推进的水位。只生成条件、不改变写入行为——增量抽取仍按"写入规则"落库。

注意: 增量的起始三件套(字段 / 符号 / 参数)和结束三件套,任一项留空,对应那一半条件就静默不生成,界面上不报错。结果是这次抽的数据比预期多得多——例如只配了起始、没配结束,窗口就一直开到当前。配完请到"预览配置"里核一眼实际拼出来的抽取语句。

(四)抽取设置 · 游标类型(仅增量模式出现,可选"时间字段"或"数值字段"):

重要提示: 这一项当前只是个标注,不改变任何行为。后端拼增量条件时不读它;前端的起止字段候选也不按它过滤(下拉里列的是源表全部字段)。真正决定行为的是起止字段、比较符和参数三件套——选"时间字段"却把起始字段配成自增 ID,系统照样按 ID 比大小,不会报错也不会纠正。

(五)抽取设置 · 起始符号 / 结束符号(增量窗口的比较符):

取值用在哪一侧怎么选
> / >=起始边界。> 是开区间(不含水位那一刻),>= 是闭区间(含)。起始边界几乎总是这两个之一,配合"上次执行时间"参数。用 >= 且水位取上次执行时间时,边界那一刻的数据会被重复抽一次,追加写场景下就是重复行。
< / <=结束边界,把窗口右端封住。想避开"正在写入中"的最新数据时,把结束参数设成"今天零点"这类值。结束边界留空则不生成右边界,窗口一直开到当前——这通常不是想要的结果。
= / !=按等值或排除筛,而不是按区间。按业务日期分区抽某一天的数据时,用 = 配"昨天日期"。此时结束边界要留空,否则两条条件 AND 起来互相冲突,一行都查不到。

(六)抽取设置 · 回写策略(增量水位,仅增量模式出现):

取值是什么什么时候用
不回写默认。同步成功后不改动任何参数,下次跑仍取同一个水位值。窗口用的是"昨天日期""今天零点"这类每次现算的参数,它们本来就会自己往前走,不需要水位。
上次执行时间同步作业成功后,把本次完成时刻写回指定的系统参数,下次跑的窗口就自动往前推。回写发生在确认作业成功之后、把节点标成成功之前;回写本身失败会把节点判为失败。典型增量搬数:起始参数选"上次执行时间",回写参数也选它,形成闭环。

重要提示: 选了回写就必须配"回写系统参数",留空会让节点失败;而这个下拉里只有"上次执行时间"一项可选——它是唯一一个存储型系统参数,其余都是每次现算的,回写没有意义。更要紧的是:水位是按参数存的,不是按任务存的。两个任务都回写同一个"上次执行时间",就会互相顶掉对方的水位,表现为"某张表莫名其妙漏了一段数据",而界面上完全没有提示。多条增量链路要各自独立推进时,应在参数管理里各建各的参数。

(七)字段映射 · 取值方式:

取值是什么什么时候用
源字段直接取源表的某一列。源列名与目标列名不同时,后端自动拼成"源列 AS 目标列"。绝大多数字段。
表达式填一段源端 SQL 表达式(拼接、条件判断、日期格式化等),原样拼进抽取语句的取数列表。需要在搬运过程中顺手做轻量转换、补默认值。

注意: 表达式按源端数据库的方言执行,写法要匹配源库,不能照搬中台数仓的函数名。这段 SQL 会被平台用数据源凭证直连执行,因此有语句安全检查,不要在里面塞多条语句或注释。

(八)目标端配置 · 写入规则:

取值是什么什么时候用
追加写默认。往目标表里追加,不动已有数据。增量抽取 + 明细表,或目标表是唯一键模型(靠键自行去重)。
覆盖写让引擎按"覆盖"方式写入目标表。全量抽取 + 每次要替换整表内容,且目标是外部关系型数据库

重要提示: 目标是中台自建数仓时,"覆盖写"不生效。 后端对中台数仓走的是另一条专用写入分支,那条分支根本不接收写入规则参数,一律按追加写落库。所以"明明选了覆盖写、重跑还是翻倍"是必然结果,不是配置没保存。要在中台数仓里做到幂等,只有两条路:给目标表用唯一键模型去重,或改用 SQL 任务以覆盖写方式装载(见 3.5.2)。

(九)分区设置 · 分区模式(仅目标类型支持分区写入时出现):

取值是什么什么时候用
不分区默认。抽取语句按字段映射原样生成。目标表没有分区,或分区值由目标表自己的字段决定。
静态分区在取数列表末尾追加一列"常量值 AS 分区字段",把固定的分区值写进每一行。前提是分区字段和分区值都填了、且映射里没有同名列。"这一批全落到某个固定分区"的装载。分区值当字面量拼进 SQL,填的时候不要自己再加引号。
动态分区规划中的取值。——

注意: "动态分区"当前没有对应实现,选了它与"不分区"完全等效,并不会按源字段的值自动分区。需要按值分区的场景,当前要么按值拆成多个静态分区任务,要么改由 SQL 任务装载。

注意(几个必须知道的边界): 1. 平台不自动建目标表,目标表须 OWNER 先建;2. 无整库一键同步,一个任务只搬一张表;3. 覆盖写对中台自建数仓不生效(见上文"写入规则"),因此在明细模型上用追加写重跑会累加(数据翻倍);要幂等,要么给目标表用唯一键模型去重,要么改由 SQL 加工任务以覆盖写装载,参考案例的 DWD / DWS 正是覆盖写装载,即便是明细模型也不会翻倍;4. 键模型由建表时选的表类型决定、与分层解耦——表类型含"唯一键 / 主键 / 更新"才生成唯一键模型,"明细表""汇总表""贴源全量表"等一律落明细模型,不由层名决定,建表时按实际去重需求与写入方式选(逐项见 3.3.1);5. 同步引擎不可用时可降级为同库 SQL 任务(CREATE TABLE AS SELECT);6. 若中心库内存紧张,可能出现"任务报成功但 0 行"的情况,这是引擎内存超限所致,需先释放内存再重跑。

注意: 离线同步是提交即返回的异步执行:点完"运行",节点马上变成"运行中"并记下一个外部作业号,平台每 10 秒轮询一次引擎状态,拿到终态才把节点改成成功 / 失败,增量水位也是那时才回写。所以"点完运行立刻看到运行中"是正常的,提交成功不等于数据已经到位,别急着下结论。

说明: 设计蓝图中还有基于逻辑数据源批量生成任务、实时变更捕获等能力,当前版本以单表同步为主,批量与实时同步是规划能力,介绍与培训时不要按已交付对待。

验证。 点"运行"后界面会提示"任务已提交,请到运行记录查看最终结果"——任务列表上没有"最近一次运行状态"这一列,别在那里等结果。到 数据中台 > 数据开发 > 运行记录 按节点标识或实例 ID 找到这次执行、状态为成功,再到自助分析 SELECT 目标表能查到搬进来的数据;配了增量回写的,最后到参数管理看一眼"上次执行时间"是不是已经推到本次完成时刻。

3.5.2 离线加工与任务流编排

场景切入。 贴源数据搬进 ODS 了,但它又脏又碎,不能直接喂模型。数据工程师要把"去重、规整、按申请人汇总"这几步写成 SQL 任务,并把它们按先后顺序串成一条链路。

是什么。 离线加工,就是把 ODS → DWD → DWS 的清洗 / 汇总逻辑写成 SQL 任务;任务编排则用可视化画布把多个节点串成一张有向依赖图(DAG),形成整条数仓加工链路。任务编排页管的是编排本体(名称、类型、状态、调度状态),画布管的是节点与连线。

为什么要用。 分层加工是把贴源数据变成可用宽表的核心;DAG 编排让多步加工有明确的先后依赖、一目了然;而 SQL 任务的语句会被自动解析成表级血缘,把数据流转关系沉淀下来,后续变更影响分析、故障定位都靠它。

怎么做。

说明: 涉及该操作的功能权限:任务与编排的新建执行;进画布还需要节点的查看权限。

  1. 数据中台 > 数据开发 > 任务开发 新建 SQL 任务 ①:ODS → DWD(去重、类型规整、标准化)。
  2. 新建 SQL 任务 ②:DWD → DWS(按维度汇总,如按申请人汇总)。
  3. 数据中台 > 数据开发 > 任务编排 新建一条编排,填标准名称、简称,选 编排类型,保存。
  4. 设计 进画布:拖一个开始节点定义入参 → 拖两个任务节点分别挂上前面两个任务 → 拖结束节点 → 依次连线,给每个节点起中文名
  5. 逐个节点配输入映射、输出映射与执行策略,保存。
  6. 回列表点 发布 固化当前版本,再点 运行 手动跑一次验证。

重要提示(顺序不能反): 引擎只认已发布的版本,画布上的保存只是草稿。一条从没发布过的编排点"运行"会直接报"任务流未发布";画布改完只保存不发布,手动运行与定时调度跑的都还是上一个发布版本——不是没生效,是压根没读到新版本。所以验证顺序永远是"先发布、再运行"。画布顶部在有未发布改动时会挂一条提示条,看到它就说明当前跑的不是眼前这张图。

任务编排页上有哪些操作、各自干什么:

操作作用说明
新建 / 编辑维护编排本体:标准名称、简称、编排类型、中文解释、状态、备注。改的是"这条编排是什么",不涉及节点。
设计进画布拖节点、连边、配节点的输入输出绑定与执行策略。链路长什么样全在这里定。
运行手动触发一次,立刻跑整条编排;有入参的会先弹框让填。跑的是已发布版本,不是画布上的草稿;要验证刚改的图,先发布再运行。
发布固化当前版本,此后手动运行与定时调度用的都是新版本。画布改完只保存不发布,跑的还是老版本。
复制编排按现有编排复制一份新的。只有"编排模板"类型的行才有这一项,普通编排与数据管道的菜单里没有。
批量绑定调度勾选多行,一次给多条编排建调度作业。已绑定的自动跳过。不按编排类型过滤——编排模板也会被一起绑上,但它跑不起来,勾之前先看一眼类型列。
删除删掉编排及其画布。被别的编排当子编排引用的,删前先确认引用关系。

SQL 任务配的是什么。 一个 SQL 任务只有三件事:选数据源、写一段 SQL、声明它向下游输出什么。执行完固定给出两个输出供下游节点引用:

输出含义
affectedRows增删改语句影响的行数;查询类语句下为 -1。
rowCount查询返回的行数;非查询类语句下为 -1。

编排类型三选一。 建编排时必选,列表里也能按它筛:

取值是什么什么时候选它选了会怎样
普通编排默认值。可手动运行、可绑调度、可被别的编排当子编排调用。绝大多数场景——一条真正要跑的加工链路。无特殊限制。
编排模板当样板用、专门拿来复制的编排,行上会多一个"复制编排"入口。想沉淀一条标准链路给别人复制,自己不参与执行。一律不能执行:手动点运行、定时到点执行,都会被拒("模板任务流不可直接执行")。
数据管道以数据搬运为主的编排的分类标签想在列表里把"搬数"类和"加工 / 决策"类编排区分开。执行语义与普通编排完全一致——一样能跑、能绑调度、能当子编排。

注意: 只有"编排模板"有真实的行为差异(不可执行),而界面上不会主动提示。要命的是绑定调度时它照样选得到——手工新增计划的下拉里有它、批量绑定也不会跳过它,绑上去只会到点失败。所以给编排挂计划前,先确认它不是模板;反过来,发现"这条编排每天都失败",也回来看一眼类型。至于"数据管道",纯粹是个分类标签,它不带整库同步、自动建表、变更捕获这类额外能力,别按名字想当然。

画布上的节点类型。 左侧节点面板能拖出这几类:

节点作用要点
开始节点定义整条编排的入参(字段编码、名称、类型、是否必填、默认值),运行时把外部传进来的输入解析成流程变量供下游选用。每条编排必须有且只能有一个,再拖第二个会被拦下。
任务节点挂一个已建好的任务定义,是链路里实际干活的节点。要配三样:输入映射(把上游变量绑到任务入参)、输出映射(把任务输出登记成流程变量)、执行策略。候选任务列表排除了 HTTP 调用与机器学习算子——在任务开发页建得出来的类型,不一定都能拖进画布。
分支节点节点内部维护一组 IF / ELIF / ELSE 路由,条件用比较符(=!=>>=<<=、包含)比较上游节点输出或流程变量;运行时算出命中的出口,只放行连到该出口的下游,其余分支整片剪掉。条件收在节点内部,不写在连线上。所有条件都没命中又没配 ELSE 时,整条编排判失败。
结束节点定义编排的最终返回字段,把上游变量映射成流程输出。每条编排至少一个,允许有多个(与开始节点不同);多个结束节点都被走到时输出会合并。

说明: 节点面板上就这四类,没有"清洗节点""质量节点"这类现成的复合节点——脏数据怎么处置,要么在数据质量那边配规则(见 3.8),要么在 SQL 任务里自己写过滤与落表逻辑;画布只负责把任务串起来。培训时不要按"拖一个清洗节点就行"来讲。

画布自带体检。 保存或运行前会扫一遍常见结构问题:缺开始节点、开始节点多于一个、缺结束节点、任务节点没有下游连线(未闭合)、分支节点有出口没连下游、存在不可达节点、存在环路、引用了已删除的变量。报出来先改再存,能挡掉大部分"跑到一半停住"的问题。

任务节点的执行策略 · 失败策略:

取值是什么什么时候用
失败即中断默认。该节点失败即把整条编排置为失败,后续节点全部不跑。链路上任何一步出错都不该继续往下写数据时——加工链路基本都该用它。
失败后继续该节点失败后不中断整流,引擎当它已完成继续往下推,下游照跑。可选步骤失败不影响主链路,例如"顺带推一条通知"失败了不该拦住装载。

注意: 选了"失败后继续",节点本身仍记为失败,运行记录里能看到红色的失败行,但编排整体可能是成功。排查时别被"编排成功"骗过去,要下钻看节点。

任务节点 / 结束节点的执行策略 · 汇聚策略(只有多个上游时才需要关心):

取值是什么什么时候用
忽略失败默认。有上游失败也照跑本节点(尊重上游自己声明的"失败后继续")。多路并行取数,允许某一路缺数据,后面自己兜底。
全成功继续任一上游失败则跳过本节点并剪掉它下游整片,但整条编排不判失败。"必须几路都齐了才能汇总"的场景。
一失败即断任一上游失败则整条编排立即置为失败。汇总节点是关键落库步骤,缺任何一路都算这次跑批作废。

注意: "全成功继续"配在结束节点上时,后果是不产出最终输出,而编排状态仍可能是成功——调用方拿到空输出要能识别,否则会把"没跑"当成"跑出来是空的"。

任务节点的执行策略 · 重试次数 / 重试退避:

取值是什么什么时候用
重试次数 = 0默认,不重试,失败一次就按失败策略处置。默认即可。
重试次数 > 0节点失败后重跑,最多这么多次额外尝试,每次之间等待"重试退避"毫秒(填 0 表示立即重试)。实际尝试次数会记进运行记录。容忍外部依赖的瞬时抖动,例如远程调用超时。

注意: 重试只对同步型任务生效。离线同步任务和子编排是"提交即返回"的异步型,提交成功这一步就算完成了,真正的失败发生在后续轮询回填阶段,不会触发重试——所以界面上只对同步类型显示重试项,不是漏了。

指标提取任务怎么配。 每个指标一张卡片,配入参绑定与结果处理两块。

入参的取值方式:

取值是什么注意
绑定输入参数默认。运行时按填的参数编码依次到"节点已解析入参 → 流程输入 → 流程变量 → 上游节点输出"四处找值,找到即用,再按声明的类型转换。四处都找不到时取到空值且不报错,失败会推迟到指标服务那边才暴露,错误信息指向不直观。编码要与上游输出对齐。
填写固定值直接用配置里写死的值,按声明类型转换后传给指标服务。固定的产品编码、窗口天数适用;写死的值不随环境变化,迁到生产要记得回来改。

结果处理的期望结果多行处理策略:

取值是什么什么时候用
期望结果 = 唯一一行声明这个指标只应命中一行。按主键取单个申请人的一项指标。
期望结果 = 允许多行允许命中多行,再按多行处理策略压成单值。只有选它,下面的策略才真正生效。按维度取一组值再聚合。
多行策略 = 返回失败命中多行就报错,整个指标提取节点失败。多行本身就说明数据或条件有问题,宁可失败也不要错值。
多行策略 = 取第一行配了排序字段就先按排序字段与方向排再取第一行;没配排序字段则按查询返回的原始顺序取第一行。配上排序字段用,例如按发生时间倒序取最近一笔。
多行策略 = 取最新一行按排序字段降序取第一行。取最近一次发生的记录——必须同时配排序字段
多行策略 = 求和 / 平均值对每个输出字段做数值累加 / 求平均,非数值或空的行跳过;一个能转成数值的都没有时该字段返回空。金额合计、比率均值。
多行策略 = 最大值 / 最小值对每个输出字段取极值。最高逾期金额、最早开户日期。
排序方向 = 升序 / 降序配合排序字段使用,不填默认按升序。取最早一笔用升序,取最近一笔用降序;策略选"取第一行"又没填排序字段时,直接按原始顺序取,排序方向不起作用。

重要提示(两个反直觉的地方): 1. "唯一一行"不做唯一性校验——真命中多行时系统静默取第一行返回,连多行策略都不读。所以"唯一一行 + 返回失败"这个看起来最严格的组合,实际上是最宽松的静默取第一行;真要在多行时报错,期望结果得选"允许多行"再配"返回失败"。2. "取最新一行"没配排序字段时名不副实——系统会退化成逐列比较、按第一个有差异的列降序排完取第一行,结果与"最新"毫无关系。用这个策略必须配排序字段。另外求和 / 平均 / 极值这几类策略,遇到姓名之类的非数值字段会静默返回空值,不会提醒。

注意: 指标提取的失败是"硬失败":某个指标没配指标编码、指标服务没返回结果、或该指标返回失败,整个节点即失败,不会静默给个空值兜过去。

HTTP 调用任务怎么配。 设计态从数据网关查已发布的接口,把接口定义固化成快照存进任务配置;运行态按快照拼请求(路径参数、查询参数、请求体、鉴权头)发出去,再按配置的响应字段树把响应解析成节点输出。失败处理策略三选一:

取值是什么什么时候用
调用失败即终止任务默认。请求异常、状态码与预期不符、响应体为空或解析失败,一律把节点判为失败。这个接口的数据是后续判断的必要输入,取不到就不该继续。
忽略失败并继续(空结果)失败时把配置的每个响应输出字段都置为空交给下游,流程继续走。这个接口是补充信息,取不到时下游有兜底逻辑。
使用默认空结果继续与上一项类似,但输出值取接口响应结构里为各字段声明的默认值。下游对空值不友好,希望拿到一组约定的默认值继续算。

注意: 后两种策略下,节点本身仍记为失败,只是没拦住流程;下游必须能处理空值,否则失败只是从这里挪到了下一个节点。另外"使用默认空结果"依赖接口响应结构里真的声明了默认值,没声明的字段仍然是空,它并不保证"一定拿到非空"。若接口在网关侧改过而任务没重新保存,运行时会因为缺接口快照直接失败,提示重新保存任务定义——按提示重进任务保存一次即可。

说明: 加工链路每多建一张表都应有业务动机——例如"为什么要建 DWS 宽表":因为决策引擎要按申请人维度取一行特征,明细层不方便直接喂模型。带着动机看编排,就不是干巴巴的连线。

注意: SQL 的表级血缘由引擎的执行计划解析得出(不是靠手写 SQL 解析器),因此括号包裹表引用等非常规写法可能解析异常,按规范写 SQL 即可。开发 / 线上双模式、数据沙箱变量切库、版本管理等为规划设计能力,当前版本不要当作已交付。

重要提示(SQL 任务用谁的权限跑,决定了产出长什么样): 中台库上的 SQL 任务,用任务的提交人(任务定义的创建人)本人的中台库账号执行,不再共用一个数据源账号。这条规则有三个直接后果,配加工链路前必须知道:

  1. 提交人看不到明文的列,ETL 读到的也是掩码。 如果提交人对源表只是被分享者、且那几列配了脱敏,任务读出来的就是 330106********1953 这样的值,写进下游表就是掩码,并且不可逆——下游表里再也拿不回原值。这是有意设计:没权看明文的人,不该借 ETL 把明文搬到自己名下。看到下游表里全是星号,先查提交人是谁,不要当成数据被写坏了。
  2. 换个人跑,结果可能不一样。 同一段 SQL,由源表属主提交跑出来是明文,由被分享者提交跑出来是掩码。所以关键加工任务的提交人应当是对源表有完整视图的人(通常是属主);任务转手、人员调岗后要重新确认提交人。注意"提交人"取的是任务定义的创建人,既不是这次运行实例的创建人,也不是当前点按钮的人。
  3. 取不到提交人账号就直接失败,绝不退回共享账号。 提交人未开通中台库账号、账号被停用、或历史任务缺提交人记录时,任务会报错终止。修法是给该用户开通中台库账号,或重新保存一次任务以补齐提交人——不要试图绕过。

边界: 这条只管中台自建数仓。写向外部纳管数据源的任务仍走该数据源自己的账号(外部库的账号体系不在平台手里),其边界是资源层 OWNER / READ;执行前平台还会按真实身份校一次该数据源的权限,非属主直接失败。

验证。 编排发布之后手动触发一次,运行成功后在数据地图能看到由该流解析出的表级血缘(上下游连线);顺带核对一次产出表里敏感列的形态,确认与提交人的可见范围一致。

3.5.3 定时 ETL 调度与运行记录

场景切入。 加工链路能手动跑通了,但业务库的数据每天都在变,总不能每天早上手点一遍。要让数仓在上班前就自动刷新好,得把这条链路挂到定时计划上。

是什么。 定时 ETL 调度,就是在调度管理页把编排或任务挂到定时计划上自动跑批;运行记录则用来查每次跑批的节点级明细。

为什么要用。 数仓要每天定时刷新以保数据新鲜度;有了运行记录才能在出问题时快速定位到是哪个节点挂了、错在哪一句,而不是只知道"今天的数不对"。

怎么做。

说明: 涉及该操作的功能权限:定时作业的新建查看,以及触发器的维护

  1. 任务编排(或 任务开发)列表选中对象,点行内的 新建计划——系统会自动带上任务类型与关联对象,比在调度页手工填更不容易出错。
  2. 计划名称,按需填 执行参数(JSON)。
  3. 保存后回列表点这一行的 详情,配 Cron 表达式(可用 Cron 生成器)、错过执行时区,把触发器状态置为正常。
  4. 任务开发 / 任务编排 列表确认"调度状态"为已调度、"下次运行时间"有值(调度管理页自己那一列显示的也是下次触发时刻,没配触发器时显示"未配置触发器")。

说明: 也可以在 数据中台 > 数据开发 > 调度管理手工新增,但那样要自己选对象、自己确认关联对象 ID,抽屉里也会提示优先从任务开发或任务编排页发起。

任务类型(这条计划调的是什么):

取值是什么什么时候用注意
任务编排这条计划调的是一整条编排。到点后调起整条链路。要每天定时刷新一整条加工链路。关联编排必填,留空保存不了。下拉里不按编排类型过滤,"编排模板"也在里面,选中它这条计划到点必然失败。
任务开发这条计划调的是单个任务,到点后只跑这一个任务。只有一步的活(例如单表贴源同步)不值得建编排时。关联任务必填。下拉里不按任务类型过滤,"子编排"类型的任务也在里面,选中它到点执行会被拒。
系统作业平台内部自动登记的作业(例如质量规则填了调度 Cron 后自动注册的检查作业)。用户不选,新建下拉里也没有它。列表里一定会出现这类行,不是漏建的;它关联的是平台内部对象,在任务开发 / 任务编排页里查不到,所以不给跳转入口,也不要手工去改。

说明: 选好任务类型和关联对象后,目标服务、执行器这些字段由后端自动填,界面上不出现,不需要也无法手工干预。

触发器参数(在行内的"详情"里配):

参数说明
Cron 表达式必填。定义触发时刻,例如每天 02:30。可直接输入,也可点右侧"配置"用生成器生成。
错过执行服务停机、任务积压导致错过触发点时怎么补,见下表。
时区按哪个时区解释 Cron,默认中国标准时间。跨时区业务要显式确认,否则"每天 02:30"跑的可能不是本地的 02:30。
触发器状态触发器自身的启停。它与作业的启停状态是两个开关,任意一个关掉都不会触发。

错过执行(错过了怎么补):

取值是什么什么时候用
补跑一次默认。错过多个触发点时,只补跑最早那一个错过的时刻,然后把下次触发时间直接推到当前之后的下一个 Cron 点。绝大多数跑批。既保证"今天这批没漏",又不会因为停机两天堆出几十次任务。
补跑全部把所有错过的时刻逐个补跑,按 Cron 顺序一次一条。每次跑批的业务日期不同、少跑一次就缺一天数据的场景,例如按天分区装载。
忽略错过错过的一律不补,直接把下次触发时间算到当前之后的下一个 Cron 点。只关心"当前状态"、补跑历史没有意义的任务,例如刷新一张全量快照表。

注意: "补跑全部"有三个必须知道的限制:① 同一批最多补跑 32 次,超出会被截断、直接跳到当前之后的下一个 Cron 点,停机时间足够长时中间的批次会被静默丢掉;② 补跑是串行的,几十次积压会把这个触发器占住很久,期间新的触发也排在后面;③ 补跑用的是各自的触发时刻,但任务里若引用了"系统日期"这类每次现算的参数,补跑出来的仍是今天的值,不是当时的业务日期——按业务日期分区装载的链路要特别小心。

执行参数怎么写。 执行参数是一段 JSON,运行时透传给被调对象;关联对象的 ID 由调度自动补入,不用重复填。里面可以用 ${变量名}${变量名:格式} 引用调度侧的系统变量:

变量含义
${jobId} / ${triggerId} / ${executionId} / ${tenantId}作业、触发器、本次执行、租户的标识。
${triggerDate} / ${today} / ${yesterday} / ${tomorrow}触发日期与相对日期,可带格式,如 ${triggerDate:yyyyMMdd}

例如填 {"bizDate":"${triggerDate:yyyyMMdd}","batchNo":"${executionId}"},跑批时就会被替换成具体值。

注意: 调度侧的这套 ${triggerDate} 变量,和任务配置里引用的参数管理里的参数(如 ${SYS_DATE})是两套东西:前者只在调度的执行参数里可用,后者在任务配置里可用(见 3.5.4)。两边的变量名不通用,别互相照抄。

调度状态列怎么看(任务开发 / 任务编排列表上的派生列):

显示含义
未调度(灰点)还没有绑定任何调度作业。
已调度(绿点)已绑定,且作业与触发器都正常;"下次运行时间"列会给出下一次触发时刻。
已停用(黄点)已绑定,但作业停用或触发器暂停任意一个成立

注意: "已停用"这一档把两种情况合并成了同一个显示,要分清到底是作业停了还是触发器暂停了,得进调度管理的详情页看——两处都要看一眼,只开一个另一个还关着,照样不会触发。

启停状态在不同对象上含义不同。 "正常 / 停用"这个开关到处都有,但停用的后果差别很大,别按一个理解套用:

停用的对象后果
任务只有没被任何编排引用的任务才停得掉——被引用的任务一保存就被拦下,提示"任务已被任务流引用,无法停用"。停掉之后单独运行报"任务已停用"。
编排手动运行报"任务流已停用",定时到点也执行失败;调度中心的可执行对象目录里也不再出现它。
调度作业"立即执行"报已停用,定时也不再派发。
画布上的单个节点运行时跳过该节点(状态记为"跳过"),不影响整条编排继续跑。

重要提示: 想临时让链路里少跑一步,正确做法是在画布上停用那个节点——那只是跳过。别指望去任务开发页停用任务:被编排引用的任务根本停不掉,而万一是历史遗留的停用任务被引用,编排跑到那个节点是整条失败,不是跳过。

运行记录怎么看。 运行记录页一行 = 一个节点的一次执行(编排里的节点,以及单任务运行产生的那一行),列有节点名称、实例 ID、节点标识、任务类型、执行状态、开始 / 结束时间、外部作业 ID、错误信息。可以按实例 ID、节点标识、运行标识、任务类型、执行状态筛。

  • 想看"某次跑批整体成没成",按实例 ID 筛出这一次的所有节点行,一眼看完。
  • 想看"哪个节点挂了",直接按执行状态筛失败。
  • 开始 / 结束 / 分支这类结构节点默认已隐藏,列表里看到的都是真正干活的节点。

节点执行状态各是什么意思:

状态含义怎么处理
运行中两种情况:同步节点正在执行;或异步节点(离线同步、子编排)已提交给引擎、正在等回填,此时会同时记下外部作业号。离线同步节点提交后就是这个状态,最长要等一个轮询周期(默认 10 秒)才翻成终态,不必立刻当故障。
成功节点执行完成且判定为成功,输出已登记为流程变量供下游使用。——
失败执行失败,原因写在该行的错误信息列;该行会出现"从失败节点重跑"入口。看错误信息定位后重跑。
跳过三种来源:节点被停用;分支没有路由到它;汇聚策略选了"全成功继续"而上游有失败,本节点及下游被整片剪掉。跳过不是失败,编排整体仍可能是成功。排查"为什么这张表没刷新"时要专门看有没有跳过的行。

注意: 状态筛选下拉里还留着一项**"就绪"**,这是个当前不会被写入的历史取值,选它永远查不到数据,不必纠结。

从失败节点重跑。 状态为失败的行才会出现这个"重跑"入口:它保留已经成功的上游节点,只重置失败节点及其后续重新跑一遍,不用从头再来。适合"上游装载都对、只是某一步超时"的情况;如果是源数据本身有问题,应先修数据再重跑。

注意: 这个入口是给编排的运行记录用的。单任务运行(任务开发页点"运行")产生的那一行虽然也带这个按钮,但点了不会重跑,只会把这条失败记录抹掉——单任务要重来,回任务开发页再点一次"运行"。

清除记录 / 批量清除。 把选中的运行记录行删掉,只用来清理历史噪声。删掉之后这次跑批的节点明细就找不回来了(不影响已经产出的数据);正在排查的问题、需要留痕的跑批不要清。

注意: "清除记录"的功能权限当前没有登记进运行记录菜单,普通账号看不到这两个按钮,需要清历史噪声时请找超级管理员。

编排整体状态只有三个:运行中、成功、失败。

注意: 当前没有"中止一条正在运行的编排"这个能力,也不存在"待执行""已停止"这类状态——文档和培训里都不要按可中止来讲。要停一条每天都在跑的链路,办法是停用它的调度作业或触发器,而不是等它跑起来再去中止。

重要提示: "编排成功"不等于"没有失败节点"。节点配了"失败后继续"、或 HTTP 调用配了忽略失败时,编排可以是成功的,里面却有红色的失败行。判断一次跑批到底干成了什么,要看节点行,不要只看顶层状态。

说明: 超级管理员视角另有一层调度侧的执行记录(在平台管理的调度中心下,普通账号看不到),一行 = 调度器发起的一次调用,状态含运行中 / 成功 / 失败 / 超时。它和运行记录不是一回事:调度侧看的是"到点有没有把人叫醒",运行记录看的是"叫醒之后干成了没有"——调度记录成功而编排内部某个节点失败,是完全可能的,排查时两级要对着看。其中"超时"表示执行节点在租约期内没有续约(进程崩溃或卡死),调度器把它标记为超时并重新排期,这只代表调度侧认定失联,不代表目标那边一定没在跑,补数前先到运行记录核对同一时刻的实例状态,避免重复跑批。

说明: 举个可代入的例子:配置每天 02:30 跑贴源同步与加工流,04:30 跑统一资产每日扫描,数据在上班前就已刷新完毕。首次执行时间若为某日 02:30、周期为每天,则次日同一时刻自动再跑。

注意: 定时 ETL 走的是定时作业体系,不是任务本身的内建调度;点"立即执行"是手动触发,它不走错过执行策略、也不占用触发器,所以不会改变"下次运行时间"——点完立即执行再看下次运行时间还是原来那个,这是对的,不是没生效。

重要提示: 定时触发的任务,仍以任务提交人的身份执行,不是以调度器的身份——调度器只负责"到点了叫一声",权限还是提交人的(见 3.5.2 的重要提示)。定时产生的运行实例,其"创建人"显示的是调度线程的身份,不能拿它当提交人看。所以一个跑了很久的定时任务,若提交人的中台库账号被停用,会从某天起开始失败;而若提交人对源表的可见范围被收紧,产出表里的敏感列会从某天起变成掩码。排查"昨天还好好的、今天不对了"这类问题时,先看提交人的权限有没有变过。

验证。 到点后,运行记录里按实例 ID 能查到本次跑批的各节点记录且均为成功;任务 / 编排列表的"下次运行时间"已推到下一个 Cron 点。

3.5.4 参数管理:任务里能引用的变量

场景切入。 增量同步要填"从什么时间之后开始抽",但这个时间每天都在变,不可能写死在任务里。加工 SQL 里想按"昨天"过滤,也需要一个每天自动变的值。参数管理提供的就是这些能随运行时刻变化的值。

是什么。 参数: 一个有名字、有类型、能在任务配置里用 ${参数标识} 引用的值。运行时平台会把任务配置里所有这类占位符替换成参数的当前值,再交给执行器。参数分两类:全局系统参数由平台内置,值由系统按运行时刻现算;租户自定义参数由用户自己建,值就是填的那个固定值。

为什么要用。 有了参数,同一份任务配置才能天天跑出不同的窗口:增量同步靠"上次执行时间"推进水位,SQL 加工靠"昨天日期"取昨天的分区。把这些值写死在任务里,任务就只能跑对一次。

怎么做。

说明: 涉及该操作的功能权限:参数的查看;新增 / 修改 / 删除自定义参数还需要相应权限。系统参数是只读的——列表上它那一行的操作列直接显示"只读",既改不了也删不掉,后端同样拒绝。

  1. 打开 数据中台 > 数据开发 > 参数管理,先查一遍已有参数,别重复建。
  2. 要用系统参数的,直接记下它的参数标识,在任务配置里写成 ${参数标识};增量同步的起止参数、回写参数则从下拉里直接选。
  3. 要建自己的参数,点 新增自定义参数,填参数名称、参数标识,选值类型、填参数值,保存。参数类型不用选——手工建的一律是"租户自定义参数"。
参数说明
参数名称中文名,列表和下拉里显示的就是它。
参数标识引用时用的编码,任务配置里写 ${参数标识}只能用字母、数字、下划线(点和短横也认),写成中文或带空格会导致占位符永远替换不上;不能与内置系统参数重名。建好后不要随意改,改了引用它的任务会失配。
参数类型全局系统参数(平台内置、值现算、只读)/ 租户自定义参数(用户建、值固定)。它只是列表上的分类展示与筛选条件,新建时无从选择。
值类型字符串 / 数字 / 日期 / 时间 / 时间戳(秒)/ 时间戳(毫秒)。决定了参数值被渲染成什么格式,配增量窗口时要与字段类型对得上——拿时间戳去比时间字段是比不出结果的。
参数值自定义参数的固定值。系统参数这一列基本是空的(只有"上次执行时间"因为要存水位才有值)。
状态停用的参数不参与运行时替换。

内置的系统参数一共 14 个(全部只读,不占自定义参数的名额):

参数名称参数标识值是什么
系统日期SYS_DATE运行时刻的日期。
系统时间SYS_DATETIME运行时刻的日期时间。
系统时间戳SYS_TIMESTAMP运行时刻的时间戳(毫秒)。
系统时间戳(毫秒)SYS_TIMESTAMP_MS同上,命名更明确。
系统时间戳(秒)SYS_TIMESTAMP_S运行时刻的时间戳(秒)。
昨天日期SYS_YESTERDAY运行日的前一天。
今天零点SYS_TODAY_START运行日 00:00:00。
昨天零点SYS_YESTERDAY_START前一天 00:00:00。
昨天结束SYS_YESTERDAY_END前一天的最后一秒(今天零点减 1 秒)。
今天零点时间戳(秒 / 毫秒)SYS_TODAY_TIMESTAMP_S / SYS_TODAY_TIMESTAMP_MS今天零点对应的时间戳。
昨天零点时间戳(秒 / 毫秒)SYS_YESTERDAY_TIMESTAMP_S / SYS_YESTERDAY_TIMESTAMP_MS昨天零点对应的时间戳。
上次执行时间SYS_LAST_EXEC_TIME唯一的存储型参数:它的值存在库里,由增量同步成功后回写推进,初值是 1970-01-01 00:00:00

重要提示: 除"上次执行时间"外,其余 13 个都是每次运行现算的,既不需要也不能回写。这也是离线同步任务的"回写系统参数"下拉里只有"上次执行时间"一项的原因。而水位是按参数存的、不是按任务存的——多个增量任务共用同一个"上次执行时间",会互相顶掉对方的水位。多条增量链路要各自独立推进,就在这里各建一个参数分别使用。

注意: 任务配置里的占位符写错了不会报错:找不到对应参数标识(或者参数被停用了)时,${...} 会被原样留在配置里往下传,结果往往是 SQL 语法错或抽取条件不对,排查时容易绕远路。填完建议到离线同步任务的"预览配置"里看一眼占位符是不是都被替换成了具体值。另外增量同步的起止参数下拉里只列启用中的全局系统参数,自定义参数在那里选不到——自定义参数主要用于任务配置里手写 ${参数标识} 的场景。

验证。 新建或修改参数后,到一个引用了它的离线同步任务点"预览配置",占位符已被替换成期望的值;增量任务跑成功后,回到参数管理看"上次执行时间"已推到本次完成时刻。


3.6 数据标准:统一数据语言

数据搬进来、加工好了,还得让全公司对"身份证号该长什么样""手机号能不能为空"有统一说法。数据标准就是给数据定一套"普通话"。

侧边导航栏 数据中台 → 数据标准 下有五个页面,各管一段:数据元把一个业务字段的命名、类型、格式、值域、敏感属性一次定死;数据字典维护码表;词根管理登记命名词块,作为落标检测的比对基准;分类方案给数据元建归类体系;资源目录配置维护一棵供建表时挂载的目录树。真正把标准落到物理字段上的动作不在这五个页面里,而在建表向导的字段配置页(见 3.6.2 末尾的"挂标准")。

说明: 先给一个贯穿全节的总口径,免得后面反复解释:数据标准这一域只做登记与比对,不做拦截。标准没定好、没落标、状态还停在草稿,都不会阻止建表、发布或同步。它真正影响的只有两件下游事情:一是生成脏数据同步 / 自助清洗计划时的质检谓词(取自数据元的"数据格式(正则)"和"值域配置"),二是敏感识别扫描时的判定依据(取自数据元的"敏感类型")。除此之外的字段,基本都是给人看的登记信息。

3.6.1 数据元管理

场景切入。 两个团队各建各的表,一个把身份证列叫 sfz、长度 18,另一个叫 id_no、长度 20,还都能为空。等要拉通建模时才发现口径对不上。数据元就是提前把"身份证号码"这类字段的规范一次定死。

是什么。 数据元: 由一组属性规定其定义、标识、表示和允许值的一个数据单元。通俗来讲,数据元就是对一个字段(如"身份证号码""手机号")的命名、类型、格式、值域、敏感属性,定一套统一规范,供建表时字段"挂标准"。页面标题为数据元管理

为什么要用。 统一数据语言、消除二义性、从源头规范化。除了口径可追溯这类管理价值之外,数据元还有两个能实际跑起来的作用:字段挂了数据元之后,一是给这张表配脏数据同步自助清洗时,系统会读这条数据元的正则与值域,自动翻译成 SQL 质检谓词,不用再手写校验条件;二是敏感识别扫描到这个字段时,会优先采用数据元上登记的敏感类型,不用再靠字段名去猜。举个例子:"证件类型"和"公民身份号码"常连用,只有把它们都定成数据元、建表时挂上去,口径才不会各写各的。

怎么做。

说明: 涉及该操作的功能权限:数据元的新建查看;对数据元的操作需由管理员在角色上配好相应功能操作权限。

  1. 打开侧边导航栏,在 数据标准 分区打开 数据元,点击右上角 新增数据元,右侧滑出编辑抽屉,分 属性配置规则配置 两个页签。
  2. 属性配置 页签按四张卡片(标识类 / 定义类 / 表示类 / 关系类)逐项填写,见下面各表。
  3. 切到 规则配置 页签,填敏感类型、状态、备注。
  4. 点保存。新建的数据元默认是未发布,要把它标成定稿口径,把状态改成已发布再保存一次。注意这一步只是口径管理上的表态:数据元的状态不控制任何候选下拉,草稿态的数据元在建表页的"绑定数据元"里照样选得到。

标识类属性:

参数名称描述
中文名称必填。业务上的叫法,如"身份证号码"。列表和各处下拉显示的就是它。
英文名称必填。英文短名,如 idcard_no。落标检测会把它按下划线拆段逐个比对词根库。
中文全拼选填。纯登记项,存得下也读得回,但列表搜索框不按它匹配(搜索只看中文名称、英文名称、英文全称、内部标识符),填了不要指望能搜到。
英文全称选填。完整英文表述,如 identity card number
内部标识符只读,自动生成,不可手工编辑。规则是"英文全称优先,没填英文全称就取英文名称",转小写、把非字母数字的字符统统换成下划线、去掉首尾和重复的下划线。全局唯一,重名保存时报"内部标识符已存在"。
对象类词必填。三段词命名法的第一段,指业务实体,如"客户 / cust""账户 / acct"。落标检测时按对象类词类型的词根去比对。
特性词必填。三段词命名法的第二段,指实体的属性,如"开户 / open""逾期 / overdue"。落标检测时按特性词类型的词根去比对。

重要提示: 内部标识符不只在新建时算一次——打开一条已有数据元做编辑时也会重算。历史上通过脚本或早期版本写进来的标识符(形如 DE-PERSON-IDCARD)一进编辑抽屉就会被改写成自动格式(英文全称填 identity card number,重算出来就是 identity_card_number),点保存就落库了。编辑已有数据元前,先看一眼这一项有没有被改动;不希望它变,就别在英文名称 / 英文全称上做改动后直接保存。

定义类属性:

参数名称描述
定义必填,多行文本。用一句话把这个数据元的口径写清楚,如"公民身份号码,18 位,末位可为 X"。这是整条数据元里最值得认真写的一项——下游所有人靠它对齐理解。

表示类属性。 这张卡片决定数据元"长什么样",也是唯一会产生下游行为的一组配置:

参数名称描述
表示词必填,下拉八选一。三段词命名法的第三段,详见下面的逐取值说明。
数据类型必填,可搜索下拉,取值就是中台分析型数据库的列类型全集,详见下面的逐取值说明。
计量单位选填,如"元""个""天"。纯登记,不参与任何计算或换算。
数据格式(正则)必填。这一项是正则表达式,不是长度描述,详见下面的专门说明。
值域类型下拉四选一,选完后下方会按所选类型动态出现对应的配置项,详见下面的逐取值说明。卡片里还内嵌了一张只读的"值域类型 / 说明 / 适用场景"对照表,可以随时对照。

表示词(八个取值,只决定命名的第三段与落标检测怎么比对,不联动任何其他属性):

取值是什么 / 选了会发生什么什么时候用
金额登记为三段词的第三段。落标检测时,系统会拿这个值去词根库里找表示词类(或自定义类)的词根,找不到就在检测报告里报一条形如"表示词 [金额] 未登记为 representation 类词根"的说明(报告里的类型名直接用英文值)。除此之外不驱动任何行为。这个数据元表示一笔钱:贷款金额、月还款额、授信额度。
日期同上,仅作三段词第三段与落标检测比对项。只到天的日期:开户日期、到期日。
日期时间同上。精确到时分秒的时间戳:交易时间、更新时间。
代码同上。取值来自码表的编码类字段:账户状态码、证件类型码。通常搭配"标准字典"值域一起用。
文本同上。也是新建时的默认回落值——从后端读回来若为空,页面上会补成"文本"。自由描述类字段:地址、备注、说明。
数量同上。可计数的量:笔数、件数、逾期期数。
比例同上。比率、占比:负债率、逾期率。通常搭配"取值范围"值域一起用。
标识同上。身份标识类:客户号、证件号、订单号。通常搭配"正则约束"值域一起用。

注意: 1. 选表示词不会自动带出数据类型,也不影响值域和质检——选了"日期"仍要自己去数据类型里选日期类型;2. 页面存进库的是英文值(amount / date / code…),而早期由脚本直接写库的历史数据存的是中文("编码""号码""比率"),这类值在列表的表示词列会显示成"-",不是数据丢了,重新编辑保存一次即可归位。

数据类型(登记这个数据元在中台库里应该用哪种列类型):

取值是什么 / 选了会发生什么什么时候用
BOOLEAN登记为布尔列。是 / 否两态标记。
TINYINT / SMALLINT / INT / BIGINT / LARGEINT登记为整数列,位宽从小到大。这五种若被用在建表字段上,"取值范围"质检会走数值比较分支(先校验能否解析成数字,再按数值比大小)。计数、编号、期数;按预计最大值挑位宽。
FLOAT / DOUBLE登记为浮点列;用在建表字段上时,取值范围质检走数值比较分支。精度要求不高的度量。金额、比率这类要求精确的量不要用浮点。
DECIMAL / DECIMALV3登记为定点小数列。用在建表字段上时,DECIMAL 走数值比较,DECIMALV3 不走金额、利率、比率等需要精确小数位的量。
DATE / DATEV2登记为日期列。用在建表字段上时,DATE 走日期比较,DATEV2 不走只到天的日期。
DATETIME / DATETIMEV2登记为日期时间列。用在建表字段上时,DATETIME 走日期时间比较,DATETIMEV2 不走精确到秒的时间戳。
CHAR / VARCHAR / STRING登记为字符列(定长 / 变长 / 不限长)。取值范围质检对这三类按字符串字典序比较。CHAR 用于长度固定的编码,VARCHAR 用于有明确上限的文本,STRING 用于长度不确定的长文本。
JSON登记为 JSON 列。半结构化报文原样落库。在这类列上做正则或值域质检没有实际意义。
ARRAY / MAP / STRUCT登记为复合列(数组 / 键值对 / 结构体)。一列里存多值或嵌套结构。同样不适合做值域和范围质检——质检谓词里的字符处理与类型转换在这些类型上会直接报错。

注意: 1. 数据元上的数据类型只是规范登记——建表时给字段"绑定数据元",不会把这个类型自动带到字段上,字段类型仍要在建表页单独选,两边填得不一样系统也不会提醒;2. 上表中标注"不走"的三种带 V2 / V3 后缀的类型,若用在建表字段上,"取值范围"质检会静默退化成字符串字典序比较——那时 0.5 会被判成大于 0.15,范围校验的结论是错的。想让范围质检按数值 / 日期比,建表字段请选 DECIMAL、DATE、DATETIME;3. 脱敏是按字符串遮盖的,数值和日期列会先转成字符串再遮盖,若做静态脱敏落库,目标列要能装下遮盖后的串。

值域类型(四个取值,决定"允许值"怎么表达,也直接决定生成什么质检 SQL):

取值是什么 / 选了会发生什么什么时候用
标准字典选完后下方出现"值域字典"下拉,选一份已建好的字典。给挂了这个数据元的字段生成脏数据同步或自助清洗计划时,系统取该字典全部字典项的编码列和名称列两列作为合法值集合,生成"该列非空且不在合法值集合内即为脏数据"的谓词。码值已经在数据字典里维护成标准字典(账户状态、证件类型、行业代码这类),而且希望多个数据元共用同一份码表。
取值范围选完后下方出现"最小值""最大值"两个输入框。生成质检计划时按建表字段自身的数据类型分三路:数值类型按数值比、日期类型按日期比、其余一律按字符串字典序比。越界行判为脏数据,规则摘要里显示"范围校验"。连续量有明确上下限:负债率 0~1、年龄 0~150、利率区间。
正则约束选完后下方只出现一行提示,没有任何要填的配置——约束完全落在上面的"数据格式(正则)"那一项上,由格式匹配那条谓词负责。列表里的值域预览也直接显示"数据格式"的内容。格式固定、既无法枚举也无法用上下限描述的标识:身份证号、手机号、统一社会信用代码、银行卡号。
自定义选完后下方出现一个文本框,把内容按逗号(中英文都认)、顿号、竖线、换行切成允许值列表,生成"非空且不在列表内即为脏数据"的谓词。三五个固定枚举,量小到不值得单独建一张字典:性别 1 / 2、是否标记 Y / N。

注意(标准字典这一档的四个细节): 1. 值域字典下拉只列"类型为标准 且 状态为已发布"的字典,原始字典和草稿字典不会出现在候选里——找不到刚建的字典,先回字典页把它发布;2. 字典项的"停用"状态在质检时不生效,停用项照样被算作合法值;3. 编码和名称都算合法值,所以同一列里既填 1 也填"正常"都能通过校验,这是有意为之(兼容源系统里码值与中文混填),但不适合用来做严格的枚举收敛;4. 建表时如果在字段行上另外挂了标准字典,以字段上的为准,数据元上配的这份被忽略。

注意(取值范围这一档): 1. 最小值和最大值界面上都是必填,只填一边点保存会被拦下并提示"请填写取值范围";库里若存在只有单边的配置,那是脚本直接写库留下的存量,质检时只生成单边谓词;2. 这一项只认"最小值 / 最大值"两个输入框拼出来的写法,历史上由外部脚本直接写库的其他写法(例如一段 JSON 串)会被原样拼进 SQL,生成的清洗语句是废的——在页面上把这条数据元重新编辑保存一次就会改回正确格式。

重要提示(最容易误解的一条): "选了正则约束才有正则校验"是误解。只要"数据格式(正则)"这一项非空,四种值域类型下都会生成格式匹配谓词;反过来,选了正则约束却把"数据格式"填成非正则内容,等于往质检里加了一条永远不匹配的条件,整表非空行都会被判成脏数据。另外,"自定义"这一档若把文本框留空、或整串只写了个"无",系统会当作没配、不生成任何值域谓词——界面上看着填了,实际不产生校验。

数据格式(正则)。 这一项是必填的自由文本框,虽然不是下拉,但它直接决定生成什么质检 SQL,单独说清楚:

用法是什么 / 会发生什么说明
正确用法:写一条正则例如 ^1[3-9]\d{9}$(手机号)、^\d{17}[\dXx]$(身份证号)。生成质检计划时原样拼进"该列非空、去空格后不匹配这条正则即为脏数据"的谓词,规则摘要里显示"格式匹配"。写入 SQL 前只做转义处理,不做正则语法校验——写错了不会在保存时报错,要到跑质检时才发现。
错误用法:当成类型 / 长度描述来填例如填 decimal(5,4)an..200n5,2。系统不做任何区分,照样把它当正则塞进 SQL,等价于要求字段值里含有 decimal5,4 这样的串,结果是整表非空行全部被判为脏数据不要这样填。长度和精度写在数据类型和建表字段上,不写在这里。

重要提示: 这个字段只有正则一种用法。系统里没有"格式类型 + 长度类型 + 小数位"三段结构,也没有任何一处会解析 anc4..200n2n5,2 这类格式符号——早期资料里的"数据格式符号对照表"在当前版本不成立。存量数据元里如果这一项填的是这类符号,建议逐条改成正则,或改成一条宽松到不会误伤的正则。

关系类属性:

参数名称描述
分类方案多选下拉,把这条数据元归到一个或多个分类方案下。纯归类维度,不驱动建表、质检或脱敏。

注意: 分类方案下拉旁边有一个"添加分类"按钮,点了只弹一句提示,不能在这里新建分类——分类要到"数据标准 → 分类方案"页面建。另外,从这里绑定和从分类方案页面绑定是两条互相覆盖的入口,细节见 3.6.2 的重要提示。

规则配置页签。 这个页签只有一组"数据安全要求":

参数名称描述
敏感类型下拉,选项取自数据安全模块维护的敏感类型目录(如身份证号、手机号、银行卡号)。第一项是空值,表示"不敏感"。
内置脱敏规则只读回显,不可编辑。选了敏感类型后,系统把该类型下第一条脱敏规则的名称显示在这里做参考;敏感类型留空时显示"无需脱敏",查不到规则时显示"未配置默认脱敏规则"。
状态未发布 / 已发布,见下面的逐取值说明。
备注选填。

重要提示: 1. "内置脱敏规则"改不了也不生效——它只是把所选敏感类型的默认规则名回显出来当提示,保存时原样存下,系统里没有任何一处读取它。真正决定"谁看这一列是什么"的,是属主分享资源时逐列配的脱敏规则(见 3.7.4)。不要理解成"在数据元上配脱敏、下发给挂它的字段";2. 库表里还有一列"安全等级"(存量数据里能看到 S1 / S2 / S3),但当前版本抽屉里没有对应输入框,页面上改不了,也没有任何一处读取它;3. 敏感类型这一项存在一处口径断层:界面存下去的是敏感类型的内部编号,而敏感识别在比对时用的是类型名称,两边对不上——通过界面选出来的敏感类型,在敏感识别扫描时命中不了,会退回按字段名 / 编码 / 描述去匹配,安全目录树上也会把这串编号当类型名显示出来。当前版本里,要让某一列被确切认成敏感,以 3.7.1 敏感识别页面上的人工确认结果为准,数据元上的这一项先当登记信息看。

状态(发布状态)。 数据元、数据字典、词根、分类目录、分类方案五处共用同一套两档状态:

取值是什么 / 选了会发生什么什么时候用
未发布(草稿)新建对象的默认状态。草稿态的字典不会出现在数据元的"值域字典"候选里;但草稿态的数据元照样会出现在建表页的"绑定数据元"下拉里,能被挂上。标准还在拟、口径还在讨论的阶段。
已发布表示口径已定稿、对外可以引用。发布的动作就是把这个下拉改成"已发布"再保存,不走审批口径定稿、可以让别人引用了。

注意: 已发布的数据元(以及已发布的标准字典)只要被编辑保存一次,版本号自动加一并自动回落成"未发布",需要再手动改回"已发布"才算重新生效。保存时会弹一句"已生成新版本, 需重新发布生效"的提示,很容易一闪而过被忽略——改完标准记得回列表看一眼状态列。

说明: 早期版本的状态常量里还有"试行"和"废止"两档,当前版本五个页面的状态下拉都只有未发布 / 已发布两项,历史上的试行 / 废止数据已在升级时统一归入未发布。写规范或做培训时不要再提"试行态""废止态"。但接口层的宽严不完全一致:数据元和数据字典的后端也只收这两档,而词根、分类方案、分类目录三处仍按老常量校验,通过接口写入试行 / 废止不会报错——界面上选不到,脚本却能写进去。词根这边这类存量值还有一处真实行为:状态为废止的词根不进落标索引,拿它命名照样会被检出未落标;未发布和试行的词根则照常参与比对。

落标检测。 数据元页面右上角有一个 落标检测 按钮,解决的问题是:批量体检哪些数据元的命名没落在词根标准上。点下去之后,系统把每条数据元的对象类词、特性词、表示词分别按对应类型的词根桶比对,再把英文名按下划线拆段逐个查词根库,弹窗列出未登记的词根以及近似词建议。

注意: 1. 落标检测只出报告,不阻断——检出问题照样能保存、能发布;2. 词根库为空时整体跳过检测,返回"未发现未落标的数据元(词根库为空时不做检测)",这是有意为之,免得刚起步就满屏飘红;3. 单次结果最多 500 条,超出时最后一行带截断标记,界面会提示清单不完整,处理掉一批再跑一次。

其他操作。

操作说明
编辑点列表行或行尾的"编辑"打开抽屉。注意编辑已发布对象会升版并回落草稿(见上)。
删除行尾"删除",没有二次确认弹窗,点了就删,操作时留神。
批量删除勾选左侧复选框后,点右上角的"批量删除(N)"。
搜索按中文名称、英文名称、英文全称、内部标识符做模糊匹配,在当前已加载的列表里过滤。
视角切换全部 / 草稿视角 / 已发布视角,按状态过滤列表。

重要提示(当前版本没有的功能,别按旧资料找): 1. 没有批量导入 / 导出,数据元、词根、字典、分类方案四个页面都没有导入导出入口;2. 界面上没有提交审核 / 撤回审核,发布就是改状态下拉,不存在"提交审核 → 审核通过后发布"这条流程;3. 没有版本比对,版本号虽然会在编辑已发布对象时自动加一,但列表和详情里都不显示,页面上看不到它变过;4. 没有注册机构、同义名词、语境、关联项、审核人、批准日期这些属性,数据元实际有的字段就是抽屉里能看到的那些,管理类信息只有状态、备注和自动记录的创建 / 更新人与时间。

验证。 保存后列表出现该数据元,状态列显示"已发布";到建表向导的字段配置页,字段行上的"绑定数据元"下拉里能搜到它。

3.6.2 词根 / 数据字典 / 分类 / 挂标准

场景切入。 定了数据元还不够——建表时字段的英文名各人各拼,"申请人"有人写 applicant 有人写 apply_person;码值"性别 1 / 2"各系统含义还不一样。词根、字典、分类这一组就是把这些也统一起来,最后再由"挂标准"把抽象的数据元真正落到物理字段上。

是什么。 这一组是数据标准的配套:词根是"中文词 ↔ 英文名 ↔ 英文缩写"的命名词块,作为落标检测的比对基准;数据字典是码表(分原始字典 / 标准字典);分类方案是给数据元归类的体系;资源目录是给表归置位置的目录树;挂标准则是把数据元真正绑到某张表的某个字段上。

为什么要用。 词根让英文命名有据可查、能被落标检测批量体检;标准字典把码值集中成一份,既能被多个数据元的值域引用,也能直接挂到字段上当质检的合法值集合;分类与资源目录给数据元和表提供检索、归置维度;而挂标准把抽象的数据元落到物理字段——只有落到字段,质检谓词和敏感识别才有抓手。

说明: 涉及该操作的功能权限:词根 / 字典 / 分类的新建查看,以及数据表字段的编辑

词根管理(数据中台 → 数据标准 → 词根管理)。 这个页面解决的问题是:把公司认可的命名词块登记成一张表,让"这个英文名合不合规"有客观的比对基准。数据元的落标检测和数据表的命名检测,都从这张表加载词根索引。

新增词根时右侧滑出抽屉,要填:

参数名称描述
词根名称必填。中文词,如"客户""逾期"。
词根编码必填,全局唯一。通常写英文缩写,如 custoverdue
英文名称选填。英文全称。
词根类型必填,四选一,详见下表。
定义说明选填。这个词根什么时候该用。
状态未发布 / 已发布,口径同 3.6.1。
备注选填。

词根类型(决定这条词根能给数据元的哪一段命名"背书"):

取值是什么 / 选了会发生什么什么时候用
对象类词归入对象类词桶。数据元落标检测时,只有这个桶(外加自定义桶)里的词,才能让某条数据元的"对象类词"判为已落标。业务实体名:客户 cust、账户 acct、贷款 loan、机构 org
特性词归入特性词桶,只对数据元的"特性词"这一段生效。实体的属性名:开户 open、逾期 overdue、余额 balance、收入 income
表示词归入表示词桶,只对数据元的"表示词"这一段生效。表示形式:金额 amount、日期 date、代码 code、号码 number
自定义下拉里的第四项(库里存的是 custom)。归入自定义桶,被当作对任意一段都合法的通用词——对象类词、特性词、表示词三段里任何一段命中它都算已落标。限定词、修饰词这类不好归类的通用词块:本外币 ccy、当前 curr、历史 hist

注意: 1. 一条词根的编码、英文名称、中文名称三路都会进索引,含下划线的还会再按段拆开分别登记(cust_no 会同时登记 custno),所以数据元的三段词填中文或英文都有机会命中;2. 数据元的表示词是固定八项下拉、存的是英文值,要让落标检测过得去,词根库里得有对应的表示词类词根,且编码或英文名要跟下拉的英文值对得上(amountdatecode…);3. 自定义类型能绕过类型约束,但用多了落标检测就失去区分力,建议只给真正跨类的通用词块用。

同一批词根在两类检测里的作用范围不同,这一点容易搞混:

检测入口怎么比对说明
数据元落标检测(数据元页右上角)分类型比对:对象类词 / 特性词 / 表示词三段各自按对应类型的词根桶比,自定义类通吃;英文名则按下划线拆段,只看这个词有没有登记过,不看类型。检查数据元的命名是否落在词根标准上。
数据表命名检测(数据中台 → 数据模型 → 表模型)不分类型比对:技术表名和字段编码按下划线拆段,只查这个词有没有登记过任意类型的词根,词根类型完全不参与判断;分层规则带来的固定前后缀和分层编码会被豁免,纯数字段(如 dwd_order_2024 里的 2024)也不参与考核。检查表名和字段编码是否落在词根标准上。

注意: 两类检测都是词根库为空则整段跳过,也都是单次结果封顶 500 条。

数据字典(数据中台 → 数据标准 → 数据字典)。 这个页面解决的问题是:把散在各业务系统里的码值集中成一份可引用的码表。一条字典 = 一个字典头 + 若干"编码 / 名称 / 描述"字典项。

字典头要填:

参数名称描述
字典名称必填。如"账户状态"。
英文名称选填。
字典编码必填,全局唯一。如 acct_status
字典类型标准 / 原始,详见下表。新建默认为标准。
所属分类方案下拉,选一个分类方案。
分类名称只读,随上一项自动带出。
参考依据选填。码值出自哪份国标 / 行标 / 内部规范,写在这里。
状态未发布 / 已发布,口径同 3.6.1。
备注选填。

字典类型(两个取值,唯一的实现差异是版本处理):

取值是什么 / 选了会发生什么什么时候用
标准字典新建时的默认值。只有"标准 + 已发布"的字典才会出现在数据元的"值域字典"候选下拉里。编辑一条已发布的标准字典会自动升版并回落成未发布。全公司统一口径的码表,要被数据元的值域引用、被质检当作合法值集合。
原始字典用来原样登记业务系统里的旧码值。与标准字典的唯一差异是:版本号固定为 1.0.0,编辑时不升版、也不回落状态。字段、校验、增删改完全一样。先把源系统的码值原样收进来存个底,再另建标准字典做统一口径。

字典项在抽屉下半部,是一张行内可编辑的表格:

参数名称描述
编码必填。同一字典内不可重复
名称必填。码值的中文含义。
描述选填。
排序数字,控制显示顺序。
状态启用 / 停用,详见下表。
备注选填。

点"新增字典项"加一行,行尾"删除"减一行。

字典项状态:

取值是什么 / 选了会发生什么什么时候用
启用默认值。该字典项的编码和名称都会被算进值域校验的合法值集合。正在用的码值。
停用界面上标成停用,但下游质检不看这个状态——生成清洗谓词时是把该字典下所有字典项一股脑取出来的,停用项照样被当成合法值。只能表达"这个码值已作废"的管理意图。

重要提示: "停用"是个名不副实的开关——它只是一个显示标记,不产生任何拦截效果。真想让某个码值在质检里失效,要把那一行删掉,而不是把它设成停用。

注意: 1. 删除一条字典会连同它全部字典项一起删;2. 原始字典照样有状态下拉,可以被设成"已发布",只是设了也不会进值域候选——"原始字典没有状态、只有新增态"是旧资料的说法,当前版本不成立;3. 建表页字段行上的"标准字典"下拉不做这层过滤,原始字典和草稿字典也会一并列出来,跟数据元里"值域字典"下拉的口径不一样,选的时候看清楚。

重要提示: 当前版本没有"原始字典 → 标准字典"的映射功能——没有映射表、没有映射页面,也没有智能推荐、手动拖拽、按描述 / 代码自动映射这些能力,两类字典之间不存在关联关系。元数据导入时也不会自动解析原始字典值并回填。要做码值标准化,当前只能靠加工任务里自己写映射逻辑。

分类方案(数据中台 → 数据标准 → 分类方案)。 这个页面解决的问题是:给数据元建一套可检索的归类体系。结构是三层:左边是多级的分类目录树,目录下挂分类方案,方案下再挂分类值,并可把数据元绑到具体分类值上。它是纯登记与检索维度,不驱动建表、质检或脱敏

左树的操作:关键字搜索(匹配目录名称或编码,命中后自动补全祖先链)、刷新、新增根目录、新增子目录。选中一个目录,右侧显示它的编码、父级、发布状态、下级目录列表,以及该目录下的分类方案列表。

分类目录(抽屉):

参数名称描述
目录名称必填。
目录编码必填,全局唯一
父级目录下拉,不能选自身。
发布状态未发布 / 已发布,纯登记标记。
备注选填。

注意: 删除目录时,若它下面还有子目录或还挂着分类方案,会被拦下并提示先删下级——要自底向上删。

分类方案(抽屉):

参数名称描述
所属目录这个方案挂在哪个目录下。
方案名称必填。
方案编码必填,全局唯一
方案类型自由文本输入框,不是下拉,占位提示写着"例如 object / security"。系统既不校验取值范围,也不据此改变任何行为,只在列表查询里当一个筛选条件用。不填完全不影响使用。
发布状态未发布 / 已发布,纯登记标记。
备注选填。

方案抽屉里还有两段卡片列表:

  • 分类值: 名称(必填)、编码(必填,同方案内不可重复)、父级值(下拉,可建多级)、状态。点"新增分类值"加一张卡片。
  • 数据元绑定: 分类值(下拉) + 数据元(下拉) + 备注。同一条数据元在一个方案里不能重复绑。

注意: 1. 分类值上的"状态"下拉存下来就完了,系统里没有任何一处读取它,当备注看即可;2. 分类值和绑定行在保存前用的是临时编号,保存后系统会重新分配,再次打开抽屉时"父级值"和"分类值"两个下拉可能显示不出名字,重新选一次即可;3. 删除一个分类方案会连同它的分类值与全部绑定关系一起删。

重要提示(两条绑定入口互相覆盖,建议只用一条): 把数据元和分类关联起来有两个入口,写法不兼容——

  • 从数据元页面绑(属性配置 → 分类方案多选):只绑到方案这一级,不指定具体分类值。保存时会把这条数据元已有的全部绑定先删光再重建。
  • 从分类方案页面绑(方案抽屉 → 数据元绑定):精确绑到某个分类值。保存时会把该方案已有的全部绑定先删光再重建。

两者互相踩:方案页面保存时会把"只到方案级、没有分类值"的那些绑定静默丢弃;反过来,只要在数据元页面保存一次,该数据元原有的分类值级绑定就会被降级成方案级。团队内部先约定只用其中一个入口,并写进规范——需要精确到分类值就一律走分类方案页面,只需要粗粒度归类就一律走数据元页面。

资源目录配置(数据中台 → 数据标准 → 资源目录配置)。 这个页面解决的问题是:维护一棵资源目录树,供建表和资产管理时把表挂到某个目录下,作为资产的归置位置。目录本身不带任何校验或权限语义

左树支持关键字搜索(匹配目录名称或编码);新增目录 / 新增子目录时弹窗要填:

参数名称描述
目录编码必填,只允许字母、数字、下划线
目录名称必填。
父级目录下拉,不能选自身。
目录状态开关,文案是"启用 / 停用"。见下面说明。
是否必填开关。见下面说明。
备注选填。

选中目录后,右侧详情展示它的编码、父级、启用状态、必填标记和下级目录列表。删除目录时若存在子节点会被拦下。

取值是什么 / 选了会发生什么什么时候用
启用 / 必填(开关打开)存进库,并在详情面板上显示成一个状态标签;启用标识还可以作为列表的查询过滤条件。表达"这个目录在用""这一级目录必须挂"的管理意图。
停用 / 非必填(开关关闭)同上,仅作为标记与查询条件。标记目录已弃用。

注意: 这两个开关目前都只是登记标记,不产生拦截效果:停用的目录照样会出现在建表页的"资源目录"下拉里;标了必填的目录,建表保存时也不会被强制要求挂上。建表时系统只校验所选目录是否存在。要真正约束,得靠团队规范而不是这两个开关。

挂标准(数据中台 → 数据模型 → 表模型 → 建表向导第二步"字段配置")。 前面几个页面都是"定标准",这一步才是"用标准"。注意入口不在数据标准菜单下,而在建表向导的字段配置页——每一行字段的右侧有两个下拉:

取值是什么 / 选了会发生什么什么时候用
绑定数据元把数据元记到这个字段上。实际效果只有两个:一是生成脏数据同步 / 自助清洗计划时,系统读这条数据元的"数据格式(正则)"和值域配置来生成质检谓词;二是敏感识别扫描时优先采用数据元上登记的敏感类型。建表时给字段挂上已定好的标准,省掉手写质检条件。
标准字典直接给这个字段指定一份码表当合法值集合。质检时,字段上挂的字典优先级高于数据元值域里配的字典这个字段的码表跟数据元上配的不一样;或者字段没绑数据元,但仍想做值域校验。

注意: 1. 这两个下拉都不过滤状态——未发布的草稿数据元、原始字典、草稿字典都能被选到,跟数据元页"值域字典"只列"标准 + 已发布"的口径不一致,选之前先确认;2. 绑定不会把数据元的数据类型、长度、中英文名带到字段上,字段这些属性还是各填各的,两边不一致系统也不提醒;3. 绑定不改变物理列名——落库的列名始终是字段自己的"字段编码",不是数据元的内部标识符。

重要提示: 词根库在当前版本只被两处落标检测读取,做的是事后比对报告。系统里没有任何一处会用词根把中文名自动翻译成英文名或表名——"词根支持建表时自动翻译"是旧资料的说法,当前版本不成立。英文名仍要自己写,写完用落标检测体检。

说明: 前面反复提到的脏数据同步 / 自助清洗是这条质检链路的内部叫法,数据标准这五个页面里找不到同名按钮,数据模型下也没有。质检谓词是在跑清洗那一刻由后端按字段上挂的数据元现算的,不会在数据标准页面上生成一份可预览的清单。要配脏数据处理策略,入口在任务编排的模型清洗节点(见 3.5.2)。

验证。 保存建表向导后重新打开这张表的字段配置页,刚才那一行的"绑定数据元"仍显示所选数据元、"标准字典"仍显示所选码表,说明标准已经挂住;再到 数据资产 → 数据地图 打开该表的详情,字段列表里的数据元列能看到它已关联标准。


3.7 数据安全与脱敏

治理里最要命的一环:身份证、手机号这类敏感字段,不能让不该看的人看到明文。平台的做法是"先识别、再脱敏",脱敏又分读时(动态)和落库(静态)两条。

先分清六个页面各管什么。 其中五个挂在 数据中台 → 数据安全 → 数据保护 这个目录节点下——这个节点本身没有页面,点开只是展开子菜单;第六个是与"数据保护"同级的 数据授权

页面管什么一句话记法
安全等级维护全平台的数据分级标尺,内置 S1 / S2 / S3 / S4 四档贴标签:这份数据算哪一档
敏感类型定义"什么样的字段算敏感":类型名 + 命中方式 + 所属安全等级 + 默认脱敏规则判什么算敏感
数据识别建任务圈定扫描范围,逐字段比对敏感类型,产出识别结果供人工确认找出敏感列在哪
脱敏规则定义"怎么脱":算法类型 + 遮盖方式 + 算法配置 + 效果示例怎么遮
数据脱敏一页三个视图:动态脱敏(敏感列登记 / 兜底层)、静态脱敏(落库作业记录)、脱敏白名单(按角色免脱敏)兜底与例外
数据授权属主把自己的表分享给指定的人,并在同一张表单里逐列指定脱敏规则真正决定"某个人看某一列是什么"

重要提示: 这六者的关系不要理解反。前五个页面做的是准备、登记与兜底,它们本身不决定某个具体的人看到什么;真正决定"某人查某一列是明文还是掩码"的,是 3.7.4 里属主分享那一刻在数据授权页上的配置。数据脱敏页登记的敏感列只是一层安全网,用来兜住"分享时忘了配"的列。

3.7.1 敏感数据识别

场景切入。 一张 DWD 表几十列,哪几列是敏感的?靠人一列列看又慢又容易漏。漏配一列身份证,就等于把明文敞开了。敏感识别就是让系统先自动扫一遍。

是什么。 敏感数据识别,就是扫描数仓表,自动识别出敏感字段(身份证、手机号、银行卡等)并命中对应的敏感类型,为脱敏配置提供依据。它由三个页面接力完成:安全等级(定分级标尺)→ 敏感类型(定判定口径)→ 数据识别(扫描、改判、确认)。

为什么要用。 先识别后脱敏。自动命中避免人工逐列判断,降低"漏配了一列敏感字段导致明文泄漏"的风险。

准备一:安全等级(数据中台 → 数据安全 → 数据保护 → 安全等级)。 这个页面解决的问题是:给全平台一把统一的分级标尺,让"这份数据有多敏感"有一个大家都认的说法,而不是各人各叫。等级会被贴到敏感类型、数据元和资产条目上,供人工判断与资产画像用。

内置四档,逐档的含义与用法:

取值是什么 / 贴上去会发生什么什么时候用
S1 低给敏感类型 / 数据元 / 资产条目贴一个"低"标签,系统只做展示与筛选。日常经营分析、一般业务支撑类数据。
S2 中同上,纯标签。内置绑定:邮箱、IP 地址、车牌号三个敏感类型。部门级敏感业务信息。
S3 高同上,纯标签。内置绑定:手机号。含敏感个人信息或核心经营数据。
S4 极高同上,纯标签。内置绑定:身份证号、银行卡号。强监管、核心机密、极敏感数据。

自建一档时要填的参数:

参数名称描述
等级编码全平台唯一的短码,如 S5。敏感类型上引用的就是这个码。
等级名称展示名,如"极高"。
等级说明 / 控制范围纯文字描述,写给人看,如"查看需授权、导出需额外控制"。
排序列表按它升序排,数字小的在前。

重要提示: 安全等级只是标签,不触发任何执行动作。等级高不会让谁多一道审批,也不会自动给这一列加脱敏——"查看需授权、导出需额外控制"是等级说明里的文字描述,不是系统行为。要真的遮住内容,必须配脱敏规则并在分享时用上(3.7.4)。

注意: 内置四档不允许删除(删除按钮对它们恒置灰,绕过界面调接口也会被"内置安全等级不允许删除"挡住),但说明、控制范围、排序可以改。自建的等级被任一敏感类型或数据元引用时同样删不掉,得先解除引用。

准备二:敏感类型(数据中台 → 数据安全 → 数据保护 → 敏感类型)。 这个页面解决的问题是:告诉系统"什么样的字段算敏感"。一条敏感类型 = 类型名 + 命中方式 + 所属安全等级 + 默认脱敏规则;识别任务扫表时,就是拿这些条目一条条去比对字段。平台内置六类:手机号(S3)、邮箱(S2)、身份证号(S4)、银行卡号(S4)、IP 地址(S2)、车牌号(S2)。

参数名称描述
类型名称如"手机号"。它同时是与数据元敏感属性对齐的匹配键(见下方命中优先级)。
识别对象拿字段的哪一段文本去比对,三选一,见下表。
正则表达式选填。要填关键字类正则,不是值格式正则,原因见下方重要提示。
安全等级从安全等级页的清单里选一档,决定这类字段的分级标签。
默认脱敏规则选填。命中这一类的字段默认套哪条脱敏规则。
备注自由文本。

识别对象决定拿字段的哪一段文本去比对,三个取值:

取值是什么 / 选了会发生什么什么时候用
全部元数据(名称 + 编码 + 描述)把字段名、字段编码、字段描述三段文本拼成一个串再做包含匹配(不区分大小写),任一处露出线索都能命中。缺省档,绝大多数场景用它——召回最高。
字段名称 + 编码只拼"字段名 + 字段编码"匹配,忽略字段描述。表的字段描述写得随意、常混入无关词导致误报时,收窄到命名上判。
字段描述只拿"字段描述"一段文本匹配,忽略字段名与编码。物理字段名是无意义缩写(f1col_a)、但中文描述规范的老表。

重要提示(这一条最容易踩): 三个档位取的全是模型元数据文本,识别过程从不读取表里的任何一行数据。因此值格式正则(形如"以 1 开头的 11 位数字""18 位身份证结构")在识别链路上一条都不会命中。内置六类之所以照样能扫出来,靠的是代码内置的关键字兜底(mobile/phone/telemail/mailid_card/cert_no/identity/idnobank_card/card_no/acct_noip/login_ip/source_ipplate/license_plate/car_no),以及"字段文本里直接含类型名"这一条。自建敏感类型时,正则要写成关键字形式,如 手机|mobile|phone

注意: 正则在保存时只校验"语法能不能编译",不校验它像不像关键字正则——填成值格式正则不会报错,只会永远扫不出东西。另:字段描述为空时,"字段描述"这一档等于永不命中,同样没有提示。

命中优先级(三级,从高到低)。 同一个字段可能有多条线索,系统按这个顺序判:

  1. 字段已绑数据元、且数据元上写了敏感属性 → 直接按这个属性名去找同名敏感类型,命中就采用,不再走正则和关键字。数据标准已落标的表,识别准确率主要靠这一条。
  2. 本敏感类型填了正则 → 在"识别对象"选出的元数据文本上做部分匹配(不区分大小写),命中即算这一类。正则语法非法时,该类型直接判为不命中并静默跳过
  3. 内置关键字兜底,或字段文本里直接含类型名

注意: 第 1 条靠的是"数据元敏感属性文本 == 敏感类型名称"的字符串相等,任一侧改了名就断链,而且不会有提示。

默认脱敏规则决定识别结果里那一列"生效规则"填什么,按三级取:① 识别任务里为该敏感类型单独配的规则 → ② 敏感类型自己的默认规则 → ③ 挂在该敏感类型下、排序最前的一条规则。

注意: 三级全落空时,识别结果的"生效规则"为空,这一行在批量确认时会被直接跳过(不会生成任何脱敏配置),页面上没有提示。要么在类型上配一次默认规则,要么在任务里配映射。另:编辑敏感类型时把"默认脱敏规则"清空,是显式置空,不是"不改动"。

注意: 内置六类不允许删除;自建类型被脱敏规则、识别结果或动态脱敏配置任一引用时也删不掉。

主流程:数据识别(数据中台 → 数据安全 → 数据保护 → 数据识别)。 这个页面解决的问题是:把"要扫哪些库表"和"扫出来了什么"放在一起管。页面是左任务、右结果的双栏——左边建任务、跑任务,右边看结果、改判、确认。

怎么做。

说明: 涉及该操作的功能权限:敏感识别任务的新建执行,以及识别结果的查看 / 改判 / 确认

  1. 在侧边导航栏进入 数据中台 → 数据安全 → 数据保护 → 数据识别,点 新增识别任务,填任务名、选 目标库、选 表过滤模式 并圈定表。
  2. 按需为每个敏感类型指定一条 默认脱敏规则(即上文三级取值的第 ①),不配就往下落。
  3. 执行识别。系统先清空该任务的历史结果,再逐表逐字段重扫一遍并写入识别结果。
  4. 在右侧结果列表逐行看 库 / 表 / 字段 / 识别依据 / 敏感类型 / 安全等级 / 生效规则。判错的行,直接在行上的下拉里 改判敏感类型,改完系统会按新类型重算"生效规则"。
  5. 勾选确认无误的行,点 批量确认——这些行会被写进 动态脱敏配置(来源标记为"自动")。

表过滤模式决定这个任务扫哪些表:

取值是什么 / 选了会发生什么什么时候用
指定表下面出一个多选框,从目标库的模型表里逐张勾选,执行时只扫勾中的表。缺省档。表不多、想精确控制扫描面时用。
正则匹配填一条正则,执行时对目标库下所有模型表逐张做匹配,命中的进扫描范围。比的是模型的展示名,不是物理表名,见下方注意第 4 条。表按前缀成批命名(ods_*dwd_user_*)且会持续新增时——新表建好后不用回来改任务。

注意: 1. 选"指定表"却一张都没勾,保存会被直接拒绝;2. 正则是部分匹配不是完整匹配——写 user 会把 t_user_logabuser 一起命中,要精确匹配请自己加 ^$;3. 正则语法非法时保存被拒;4. 正则比的是模型的展示名(建模时给这张表起的那个名字),不是物理表名——展示名与物理名同名时两者没差别,但展示名写成中文(如"股票风险因子DWS宽表")时,ods_*dwd_* 这类按物理命名写的正则一条都匹配不到,任务会报"未命中任何模型表"。写正则前先到模型列表看一眼这批表的展示名长什么样;展示名不规范的,用"指定表"逐张勾更稳。

任务状态由系统自动置,不能手工设置:

取值是什么
草稿任务已建好但从未执行过,识别结果为空。
已完成最近一次执行成功。执行是同步一次性跑完的:先清空该任务的历史结果,再全量重扫写入。

注意: 重跑会清空上一轮结果。 已经确认过、写进脱敏配置的内容不受影响(那是另一份数据),但结果列表里做过的改判会丢,需要重新改判再确认。

注意: 识别在中台自建表上做(有模型元数据才有列可扫);外部数据源不在识别 / 脱敏范围内。识别与字段的数据类型无关;引擎级脱敏对数值 / 日期列会先转成字符串再遮盖,故数值型手机号同样能被识别与脱敏。仅静态脱敏落库时,目标列需能容纳遮盖后的字符串值。

验证。 任务执行后,识别结果列表里 id_card / phone 等字段被自动标为对应敏感类型并带出生效规则;勾选并批量确认后,到 数据脱敏 → 动态脱敏 能看到这几列已在列表里,来源显示为"自动",并带出识别任务名。

重要提示: 确认动作写入的是动态脱敏配置(兜底层),不是把敏感类型回写到字段元数据。所以确认完之后,不要以为"这一列从此对谁都是掩码"——它只是进了兜底层;某个具体的人看到什么,仍以 3.7.2 的三档判定为准。

3.7.2 动态脱敏(读时 · 引擎级列脱敏)

场景切入。 数仓组的同事建了一张含身份证的明细表,自己查是明文,把表分享给风控分析师后,对方查同一列是掩码。这不是两套规则打架,而是同一套规则按人给出的两个答案——动态脱敏解决的就是"数据能给出去用,但给出去的不必是明文"。

是什么。 动态脱敏是读数据时按人返回掩码值——查询时不改动库里的真实数据,只是不同的人查同一列看到不同程度的掩码。在中台自建数仓上,它是引擎级列脱敏:每个用户在中心库有独立账号,引擎按人判定。有一对反义概念要记住:动态脱敏(读时不落库)/ 静态脱敏(落库副本)

判定口径(当前版本的核心,务必记住)。 平台的口径是默认明文 + 分享时配脱敏,三档依次判定:

查这张表的人是谁引擎给什么
资产属主本人(这张表是平台为他建出来并已发布的)明文
被分享者,且分享时给这一列配了脱敏规则按规则掩码
被分享者,但这一列没配脱敏落到表级兜底:该列若在本页登记为敏感列,仍掩码;没登记过,就是明文

说明: 第一档有一个极少出现的例外——若有人反过来给属主本人也发了授权、并在上面给这一列配了脱敏,平台取严按那条配置掩码。删掉属主自己身上那条多余授权即可恢复明文。

也就是说,本页做的绑定已经从"对所有人生效的脱敏开关"退成了"敏感列标记 + 兜底安全网";真正决定"某个人看某一列是什么"的,是分享那一刻在数据授权页上的配置(见 3.7.4)。

为什么要用。 引擎级脱敏在结构上杜绝绕过:对一列求最大值,只能对掩码值求;对行数计数,只能数过滤后的行——不像早期"按查询结果的输出列名匹配"的做法(用别名、函数、聚合就能绕过而泄漏明文)。按人脱敏也满足最小权限与合规要求。

先备好脱敏规则(数据中台 → 数据安全 → 数据保护 → 脱敏规则)。 这个页面解决的问题是:把"怎么遮"沉淀成一条条可复用的规则,而不是每次配脱敏时现场描述。全平台三条链路——引擎按人下发、表级兜底、静态脱敏落库——共用这同一套规则,所以同一条规则用在哪儿强度都一样。

一条规则要填:

参数名称描述
规则名称展示名,如"身份证脱敏"。
归属敏感类型这条规则给哪一类字段用;敏感类型的"默认脱敏规则"也从这里取。
算法类型怎么脱,五选一,见下表。
算法配置键遮盖方式,只有算法类型选"掩码脱敏"时才起作用,见下表。
算法配置一段 JSON,填保留位数等参数,如 {"head":6,"tail":4,"mask":"*"}
效果示例纯展示文本,如 330106********1953,写给配置人自己看,不参与执行。
排序同一敏感类型下有多条规则时,排最前的那条会被当作兜底默认。

算法类型(界面下拉的五档):

取值是什么 / 选了会发生什么什么时候用
掩码脱敏(默认)不做整体替换,而是按下面的"算法配置键"决定怎么遮盖(保留首尾若干位 / 邮箱掩码 / IP 掩码)。原值为空值时仍返回空值。绝大多数场景。身份证、手机号、银行卡、车牌都用这一档。
替换脱敏整列值被替换成一个固定常量,默认 ******,可在算法配置里改。这一列对使用方完全没有分析价值、又不能删(要保持表结构一致);或想要一个显眼的"此列已脱敏"占位符。
散列脱敏(MD5)取 32 位定长十六进制摘要,不可逆。同值同码、异值异码。需要靠这一列做关联、去重、分组,但不能看到原值时——如按身份证号统计人数、跨表对齐同一个人。
散列脱敏(SHA-256)同上,取 64 位定长摘要,抗暴力反查更强。与上一档同用途,但对抗反查的要求更高时。
置空整列输出空字符串(不是空值 NULL)。原值为空值时仍返回空值。这一列对使用方完全无用,又不想让占位符干扰阅读。

注意: 1. 两档散列不加盐——同一个原值在任何表里都散列成同一个码,这既是它能做关联的原因,也是它的泄露面;对手机号、身份证这类取值空间有限的字段,MD5 可被预先算好的码表反查,要求更高就选 SHA-256;2. 散列出来的是定长长串,静态脱敏落库时目标列要装得下(MD5 32 字符、SHA-256 64 字符);3. "替换脱敏"会让整列取值相同,下游做去重计数、分布统计会失真;4. 空字符串不等于空值——下游按"是否为空值"判空会判不出来,得按"等于空串"判。

重要提示(存量数据里可能见到的三类取值,新建时界面已不再提供): 1. 加密脱敏——名不副实:两条真实链路都把它降级成不可逆摘要,结果解不回来,与散列同效(密钥刻意不下沉到 SQL 文本,避免随查询日志外泄);列表里回显为"不可逆散列(原「加密脱敏」)"。2. 截断脱敏——后端从来没有实现过这个分支,配了不报错、看着像生效,实际按掩码执行;列表里回显为"掩码脱敏(原「截断脱敏」,实际按掩码执行)"。3. 同义别名(如 md5、sha256、null、clear、const、constant)——后端认,界面不给,是为了不让同一种效果有多个名字。这三类都不要新建;存量规则建议逐条改成上表五档里的对应项。

算法配置键(遮盖方式)——只有"掩码脱敏"读它:

取值是什么 / 选了会发生什么什么时候用
不设置落到通用兜底:保留首尾各 1 位(除非算法配置里显式写了保留位数)。算法类型选了散列 / 替换 / 置空时——那几档根本不看这个键,留"不设置"即可。
保留首尾若干位保留开头 head 位与结尾 tail 位,中间按实际长度填充遮盖字符;长度不足时退化为整体遮盖,绝不因保留区盖满全串而回吐明文最常用的一档。身份证前 6 后 4、手机号前 3 后 4、银行卡前 6 后 4、车牌前 2 后 2。
仅保留开头若干位等价于上一档且结尾固定不保留;head 不填时默认 1。只需要前缀做归类,如行政区划码前 6 位、卡号前 6 位。
仅保留结尾若干位等价于"保留首尾"且开头固定不保留;tail 不填时默认 1。只需要末几位做人工核对,如手机尾号 4 位。
邮箱掩码@ 切分:本地部分保留前 head 位(默认 1)、其余打码,@域名 原样保留;串里没有 @ 时退化为"保留开头若干位"。邮箱列。既保住域名可做企业 / 渠道分析,又遮住具体是谁。
IP 掩码. 切四段,保留前 retainSegment 段(默认 2),其余段整段替换;不是四段形态时退化为整体遮盖。IPv4 列。保留网段做地域 / 机房分析,遮掉主机位。

注意: 1. "保留首尾若干位"的保留位数默认是 0 / 0(不是 1 / 1)——算法类型选了掩码、遮盖方式选了这一档,却忘了在算法配置里写位数,结果是整列全星号;2. "仅保留开头"不读 tail、"仅保留结尾"不读 head,写了也不生效;3. 邮箱掩码的域名整段是明文,若内部邮箱域名本身能反推组织,别用这一档,改用"仅保留开头"或散列;4. IP 掩码只认四段点分形态,IPv6 一律全遮。

算法配置(JSON)里认的键:

键名是什么怎么填
head保留开头位数(整数)身份证 6、手机号 3、银行卡 6、车牌 2。"保留首尾"下不填默认 0;"仅保留开头"与邮箱掩码下不填默认 1。
tail保留结尾位数(整数)身份证 4、手机号 4、银行卡 4、车牌 2。只有"保留首尾"和"仅保留结尾"读它。
mask遮盖字符(字符串)默认 *;想用 # 等其它符号时填。填空串会被当作没配、回落成 *;填多字符不会报错,但结果会比原值长。
retainSegmentIP 保留段数(整数)只有 IP 掩码读它,默认 2,取值被夹在 0~4 之间;填 4 等于完全不遮。
replaceWith常量替换的目标值只有"替换脱敏"读它,不填用 ******。想让占位符更有辨识度时填,如"已脱敏"。

注意: 常量替换的目标值历史上有六个等价键名(replaceWith / replacement / const / constant / value / text),按这个顺序取第一个非空值,新配统一用 replaceWith。另有一个 key(密钥)键是"加密脱敏"年代的遗留,当前填了完全不生效、也不报错,不要再用。

脱敏样例(把规则讲实): 身份证 330106199201011953 经"保留首尾、前 6 后 4"遮盖后为 330106********1953;手机号 15863794026 经"前 3 后 4"后为 158****4026

注意(改规则、删规则之前先看这一条): 删除脱敏规则时,平台会看三处引用,但处理方式不一样,别一概当成"在用就删不掉":

  1. 识别结果、动态脱敏配置——这两处只要有一条在引用,直接拒绝删除;
  2. 敏感类型的默认规则——这一处不拒绝:平台会先把引用它的敏感类型的"默认脱敏规则"自动解绑(置空),再照常把规则删掉。解绑没有二次确认,页面上也不提示;
  3. 数据授权上的列脱敏配置——根本不检查。已经分享出去、在授权里引用了这条规则的列,规则被删后会退化成"保留首尾各 1 位"的通用遮盖——不会退回明文(方向是安全的),但强度和当初配的不一样

内置六条规则一律不允许删除。第 2 条还有一个下游后果值得留意:被解绑的敏感类型从此没有默认规则,3.7.1 里"生效规则"三级取值的第 ② 档就落空了,会退到第 ③ 档(该类型下排序最前的一条规则);三级全空时,新识别出来的行在批量确认时会被静默跳过。所以删掉一条被当作默认规则的规则后,请回敏感类型页把默认规则补上;改、删规则前,也先确认没有授权在引用它。

登记敏感列:动态脱敏(数据中台 → 数据安全 → 数据保护 → 数据脱敏 → 动态脱敏)。 这个子视图解决的问题是:把"这张表的这一列是敏感列"登记下来并绑一条规则,作为分享时忘了配的兜底。

怎么做。

说明: 涉及该操作的功能权限:动态脱敏配置的新建查看。本页配置是兜底层,对没有单独配过列脱敏的被分享者生效,需谨慎配置——配错范围会让本该看明文的分析岗也被掩码。

  1. 在侧边导航栏进入 数据中台 → 数据安全 → 数据保护 → 数据脱敏,切到 动态脱敏 视图,点 新增动态脱敏
  2. 依次选 库 → 表 → 字段,再选一条 脱敏规则(规则来自上面的脱敏规则页)。
  3. 保存生效。数仓引擎侧约十秒内自动拉到新策略,无需重启。
参数名称描述
库 / 表 / 字段三级联动,只能从有模型的表里选。
脱敏规则绑一条规则,决定这一列在兜底层被怎么遮。
来源只读,由这一行的产生路径决定,见下表。

来源这一列的两个取值:

取值是什么 / 会发生什么什么时候出现
手工在本页手动新增出来的行,可编辑、可删除。识别没扫出来、或想临时补一列时。
自动由数据识别的"批量确认"写入的行,带识别任务名。编辑按钮被禁用,只能删系统产生。要改它的规则,回识别结果里改判敏感类型后重新确认,或删掉这行再手工建一条。

注意: 1. 新增时界面上选的是模型的中文展示名,保存时平台会把它翻译成物理表名 / 物理列名再落库,翻译不出物理名会直接报错、配置落不了库——这是有意为之:落中文名会让引擎侧永远匹配不上,表现为"配了脱敏却一直是明文";2. 同一个"库 + 物理表 + 物理列"再次由识别确认写入时是覆盖更新,不会产生重复行。

例外清单:脱敏白名单(数据脱敏 → 脱敏白名单)。 这个子视图解决的问题是:给需要看明文做核对的岗位开一个口子——按角色声明"这几张表对这个角色免脱敏"。

参数名称描述
授权对象类型界面只提供"角色",见下表。
授权对象角色标识(role_key),不是人名。
所属项目备注性质,写清这条例外是为哪个项目开的,便于日后回溯。
目标库这条例外在哪个库里生效。
资源范围 / 白名单表界面只提供"指定表",必须逐张勾选。
取值是什么 / 选了会发生什么什么时候用
授权对象类型 = 角色唯一可选项。生效时把"授权对象"解析成角色,再下发成引擎侧的角色级免脱敏条目:该角色的人查这个库里被列出的表时,表级兜底脱敏不生效,看到明文。数据安全审计、合规稽核这类岗位需要核对明文时。
资源范围 = 指定表唯一可选项。必须逐张勾表,下发时按表名生效。所有场景。

重要提示: "授权对象"要填的是角色标识。下发时先按角色标识精确查,查不到再按角色显示名兜一下,都查不到就整条跳过、不免脱敏——方向是安全的,但界面上不会提示,表现就是"配了没生效"。填之前请到系统管理里核对一遍角色标识。

注意: 1. 一张表都不选不等于整库免脱敏——保存会被拒绝,即使绕过界面写进去,下发时也会被整条丢弃;2. 后端另外还认"按用户"和"正则匹配"两个档位,但引擎侧都消费不了,配了等于没配,界面已把它们收敛掉;存量记录在列表里带"未生效"黄标,点编辑会被自动归一成受支持的配置并弹提示要求重选。要对某个人免脱敏,给他单建一个角色再加进来;3. 白名单只免掉表级兜底这一层——分享时逐列配的按人脱敏排在它前面判定,不受白名单影响

重要提示(几条硬边界): 1. 脱敏只管中台自建数仓,外部数据源一概不改写(产品口径);2. 失败即拒绝(fail-closed)——数仓引擎侧若拉不到脱敏策略(平台不可达、策略接口异常),查询直接失败,绝不退回明文;3. 对称加密在 SQL 侧刻意退化为不可逆的哈希摘要(密钥不下沉到 SQL 文本,避免进日志外泄);4. 无模型表挂不上动态脱敏——这一条卡在保存这一步:对没有模型的表配脱敏,保存时直接报"未找到表模型,无法解析物理表名",配置根本落不了库(见 3.4);5. 属主看到明文是正确行为,不要当成配置没生效。

重要提示(行级过滤:当前版本不生效,请勿依赖): 授权数据结构上保留了"行级过滤条件"这个字段,但它在本版是悬空的——授权页面上没有配置入口,后端也没有任何执行侧消费方(平台从不向数仓引擎下发行级策略)。后果是:即便通过接口把条件写进去,它既不会生效、也不会报错,配的人不会知道自己没有限制住任何人。在本版请当作"没有这个功能"。要达到"只让某人看到某几行"的效果,用下面两条已验证可用的替代路径:1. 列级脱敏——如果目的是遮住敏感内容,直接在分享时给相关列配规则(3.7.4);2. 拆表 + 表级授权——用一个 SQL 加工任务把该看的行筛成一张独立的表,再把这张表分享给对方,这是当前唯一真正落到引擎里的行级隔离。

验证。 完成配置后,用一个被分享但未单独配该列脱敏的账号在自助分析查该表,身份证 / 手机号列显示为掩码值;用该表属主账号查同一列,应为完整明文。两个结果同时成立,才说明按人判定确实生效。

3.7.3 静态脱敏落库

场景切入。 有时要给外部合作方交一份数据,对方是拿去离线用的,读时脱敏管不到它。这时需要的是一份"已经落库、彻底不含明文"的副本。

是什么。 静态脱敏是把源表脱敏后写进一张预建好的脱敏副本表(整表覆盖写入),产生不可逆的脱敏落库数据,供导出或给外部方使用。数据脱敏 → 静态脱敏 这个子视图解决的问题是:把这类落库作业的执行记录摆出来看——每个任务的来源、目标、起止时间,以及逐字段的敏感类型、所用规则和影响行数。

为什么要用。 有些场景需要的是一份"落库的、不含明文的副本",而不是读时改写——例如要把一份数据交给下游或外部合作方。它与读时脱敏共用同一套脱敏表达式,强度一致,不会出现"读时留 4 位、落库只留 1 位"的不一致。

怎么做。

说明: 具有该操作的角色:该步需要静态脱敏的新建执行权限;资产治理角色没有该权限,通常由管理员执行。

  1. 数据中台 → 数据安全 → 数据保护 → 数据脱敏 页切到 静态脱敏 视图,先看清已有任务的执行记录。
  2. 预先在目标库里建好目标表,列要按名覆盖源表的全部列
  3. 由管理员发起任务:指定 源表目标表,并为每一列 绑脱敏规则
  4. 执行 任务,生成脱敏副本表;执行完这条记录会在本页显示起止时间与逐列明细。
参数名称描述
源表 / 目标表目标表须预建;源表 ≠ 目标表强校验,源与目标应同引擎。
逐列脱敏规则每列绑一条规则,与读时链路共用同一套表达式。

任务状态由系统按执行过程自动流转:

取值是什么
已创建作业已建好(源表、目标表、逐列规则已定),尚未执行。
执行中已发起整表覆盖写入,开始时间已记录、结束时间为空。执行是同步一次跑完的,不是可轮询的异步作业。
成功覆盖写入完成,回填结束时间与影响行数,返回"源库.源表 → 目标库.目标表,脱敏 N 列,影响 M 行"。
失败执行过程报错,记录结束时间;目标表保持原样,不会残留"已清空未灌入"的中间态。

执行前有五道硬校验,任一不过直接拒绝:

  1. 源表 ≠ 目标表(同数据源 + 同库表名即判为同一张)。
  2. 源、目标数据源都不能为空。
  3. 非超级管理员必须对源表有读权限,且对目标数据源是 OWNER 级
  4. 目标表必须已存在,且按名覆盖源表的全部列——缺一列就拒,目标表不会自动创建
  5. 至少配一列脱敏规则;规则必须存在,列必须在源表里。库、表、列名只允许字母、数字和下划线,不合规直接拒。

重要提示: 当前版本的界面只提供"查看",不提供"新建 / 执行"入口——静态脱敏页列出的是已有任务及其明细,任务的创建与执行需要由管理员通过后端接口发起(对应静态脱敏的新建与执行两个功能权限)。若在页面上找不到"新建任务"按钮,这是当前版本的实际形态,不是权限问题。

注意: 1. 目标表不会自动创建,须预建且列覆盖源表;2. 加密类算法在静态链路同样退化为不可逆哈希摘要;3. 静态与读时两条链路的脱敏强度已统一,不会出现"读时保留前后各留 4 位、落库却只留 1 位"的不一致;4. 明细里的影响行数是整条写入语句的总行数,被原样记在每一列上,不是逐列各自统计出来的——两列显示同一个数字属正常。

验证。 任务执行后,查目标副本表,身份证 / 手机号列已是掩码值,且行数与源表一致。

3.7.4 属主自助分享:把自己的表给别人用,并当场决定他看到什么

场景切入。 数仓组的工程师建好了一张信贷申请人明细表,风控建模的同事要用它训模型。以前只有一条路——对方发起数据申请、等审批。但这张表本来就是他建的,给不给、给哪几列的明文,他自己最清楚。属主自助分享就是把这个决定权交回给他。

是什么。 属主自助分享: 一张表的资产属主可以直接在数据授权页把这张表授权给指定的人,并在同一个表单里逐列配脱敏规则——分享出去的那一刻就决定了对方看到的是明文还是掩码。它与 3.11 的跨部门数据申请工单是方向相反的两条路:申请工单是"用数据的人来要",自助分享是"有数据的人主动给";前者走审批,后者不走。

为什么要用。 三个理由。其一,离数据最近的人才知道该给什么——属主清楚哪几列敏感、给谁用合适,比集中审批更准。其二,减少一轮往返:内部同事要用一张表,不必为此起一张工单等审批。其三,也是最重要的——它是"默认明文"口径下的安全支点:数据不分享就没人有表权限,一旦分享,脱敏就在分享的表单里当面配掉,不依赖任何全局开关。

怎么做。

说明: 涉及该操作的功能权限:数据授权的新增 / 修改 / 删除 / 释放 / 续期——由细角色 role_data_owner_share(数据中台-属主分享)下发;部门自治角色 role_data_dept 已内含同一套菜单,持有它的人不必再叠加。此外,要在表单里选脱敏规则,还需要脱敏规则的查看权限(规则清单是从数据保护那边取的)。

  1. 在侧边导航栏进入 数据中台 → 数据安全 → 数据授权
  2. 在左侧 资源树 里逐级展开,点中要分享的那张
  3. 授权维护 区填 被授权对象(按用户选人)、勾选 授权动作、按需填 到期日
  4. 字段脱敏 区逐行添加要遮住的列,各选一条 脱敏规则不添加的列,这里不做指定(它是不是明文,看下方那条"未配置的列"提示)。
  5. 新增授权 保存。保存后在下方 当前授权记录 里能看到这条授权及其 列脱敏 摘要。
参数名称描述
被授权对象按用户选人。列脱敏只支持"表级资源 + 按用户授权";换成库级资源或按角色授权时,已配的列脱敏会在保存时被清空(页面会提示)。
授权动作该受让人能对这份资源做什么;至少勾一项,逐项含义见下表。
字段脱敏逐列绑一条脱敏规则,规则来自 数据保护 / 脱敏规则留空 = 这一列交回兜底层判定(见下方提示)。
到期日留空为长期有效;填了则到期自动失效。提前收回与续期有接口,但授权页上没有这两个按钮——界面只提供"编辑"和"删除",要改到期日走"编辑",要立刻收回走"删除"(见 3.11)。

授权动作逐项:

取值是什么 / 勾了会发生什么什么时候用
读权限当前版本唯一真正落到执行侧的动作:勾了它,平台才会把这份资源的读能力下发到数仓引擎,受让人才查得到数据。分享表给人用,最基本的一项,基本每次都要勾
写权限意图是"能往这张表写入、更新、删除"。当前版本只做登记、不下发能力,见下方提示。记录"这个人被允许回写",为后续版本预留。
改表权限意图是"能改这张表的结构"。当前版本只做登记、不下发能力同上;一般只给协作维护同一张表的人。
删表权限(表级资源)意图是"能删这张表"。当前版本只做登记、不下发能力同上;极少用。
建表权限(库级资源)意图是"能在这个库里建表"。当前版本只做登记、不下发能力同上。
脱敏白名单意图是"这个人对这份资源免脱敏"。当前版本只做登记、不下发能力,见下方提示。不要依赖它。

重要提示(最容易配错的一处): 授权动作里真正生效的只有"读权限"一项。写权限、改表权限、删表权限、建表权限、脱敏白名单这五项,当前版本勾了不生效、也不报错——它们会被正常校验、正常存下来,可以当作"这个人被允许做什么"的登记,但平台向引擎侧下发的只有读能力,不会因为勾了它们而多发写、改结构、删表或免脱敏的权。所以:不要把它们当成安全边界的一部分来算,也不要指望勾上就能用。其中 脱敏白名单 尤其容易误配——引擎侧判定"谁免脱敏"只认 数据保护 → 脱敏白名单(按角色)那一条路。要让某个人看到明文,有两个可靠做法:① 到数据保护的脱敏白名单里加(需要先给他单建一个角色);② 干脆在字段脱敏区不给这一列配规则,同时确认这一列没有被登记为敏感列。另:改表、删表、脱敏白名单这三项属于"只能由授权方直接下发"的动作,走不了数据申请工单——这是有意收口,避免有人通过提单自助索取脱敏豁免。

注意: 库级资源与表级资源的动作清单在界面上是分开的(库级给"建表"不给"删表",表级反过来),但后端校验用的是同一份全集、不按资源类型再分。也就是说,通过接口给库级资源配"删表"不会被拒——请以界面上的分组为准来配。

字段脱敏区的三种状态(这是本节最需要讲清的一处):

状态是什么 / 会发生什么什么时候用
给这一列配了脱敏规则落成"这个人 + 这张表 + 这一列 → 这条规则",按被分享者的库账号精确下发。引擎对这个人查这一列时先命中按人策略,直接返回掩码值——别名、函数、聚合都绕不过去。确定要遮住的列,一律在这里配。这是唯一能保证"这个人一定看不到明文"的做法。
留空(不添加这一列)不是"一定给明文"。引擎查不到这个人的按人条目,会回落到表级兜底:这一列若在动态脱敏页登记过,仍然掩码;没登记过,才是明文。这一列确实该给明文、且已确认它没被登记为敏感列时。
编辑既有授权时整个脱敏区没动过后端不改动已有的列脱敏配置,原样保留。只改到期日、只做续期时——不会顺手把之前配好的列脱敏抹掉。

注意(列脱敏的四道硬校验): 1. 只能配在表级授权上,库级授权会报"列脱敏只能配置在表级授权上";2. 被授权对象必须是用户,不能是角色;3. 列名只允许字母、数字和下划线;4. 引用的脱敏规则必须存在。

验证。 用受让人账号登录,在自助分析查这张表:配了规则的列呈掩码(如 330106********1953);而属主本人查同一张表,所有列都是明文。两边同时成立,即证明按人分享 + 按人脱敏都已生效。

注意(留空的准确含义): 表单里那一列留空,意思是"这一列我不单独指定,交回兜底层判定",不是"这一列一定给他明文"。只要平台还开着表级兜底(当前默认开着),留空的列就会退回 3.7.2 的第三档:这一列若已在数据脱敏页登记为敏感列,受让人看到的仍是掩码;只有既没在分享时配、也没被登记成敏感列的列,才真的是明文。要确保某列对受让人明文,得确认它没有被登记为敏感列;反过来,要确保某列对方一定看不到,就在这里给它配规则,不要指望留空。页面上的提示文案与这里的口径一致。

重要提示(最容易被误判为故障的一条): 保存成功不等于对方立刻能查。 只要这条授权配了列脱敏,平台就会先让脱敏规则在数仓引擎侧就位、再放开读权限——顺序反过来的话,受让人在规则追上来之前那几秒读到的就是明文。所以新分享会先落库、暂不放权,通常几秒后自动放开。这个中间状态页面上看不到:当前授权记录那张表没有"放权进度"这一列(它在列表接口里以 engineSyncStatus 返回,pending = 还没放权、synced = 已放权,要精确核对得请运维看接口或库)。属主实操时的判断办法只有一个——让受让人隔几秒再查一次。这期间对方查不到数据是正常且安全的,不要反复删了重建。若十几分钟后仍查不到(超过 10 分钟平台会把这条判为失败),说明引擎侧策略没能就位,请联系运维检查数仓引擎与平台的连通性。没配列脱敏的分享不走这道闸,立即生效。

注意(分享的三条边界,都由服务层守卫强制,越不过去): 1. 只能分享自己是属主的资源——表认的是"平台为你建出来并已发布落地"的记录,挂接他人已有表、或在查询工作台手敲 CREATE TABLE 建出来的表,都不算;把整个数据源分享出去也走同一道守卫,须是该数据源的 OWNER;2. 库级授权只有超管能做——平台没有"库属主"这个口径,想给就按表给;3. 查不到归属一律按无权处理(同一张表被登记了多个属主时也一样),这是有意的保守取向。

说明: 分享会自动补上数据源可见性,受让人才打得开这个数据源、在查询工作台里列得出这张表;不必再单独去数据源那边配一次。但要分清:可见性 ≠ 数据权限——能读到哪张表、哪几列是什么样子,仍由这条表级授权和它上面的列脱敏各自把着。

说明: 授权列表只显示与自己有关的三类:我收到的、我发出的、我自己资源上的。看不到全平台的授权关系是设计使然——那是数据安全审计员的视角(该角色额外持有"全平台授权视图")。


3.8 数据质量:规则、校验与报告

场景切入。 一张要喂给风控模型的宽表,如果月收入有一半是空的、申请人 ID 有重复,模型学出来就是错的。数据质量中心就是给数据"体检",在数据被用之前把坏数据挡下来。

是什么。 数据质量中心让用户给表 / 字段配质量规则(非空、唯一、值域、正则格式、自定义 SQL),定时或手动跑校验,出报告(通过 / 未通过、实际值、坏样本数),保障数据可用。评估角度覆盖完整性、一致性、准确性等常见质量维度。

这一页解决什么问题。 数据质量下只有 质量规则 一个页面,它一页把三件事全包了:给表 / 字段配规则、手动或定时跑校验、翻每条规则的历史结果。平台没有单独的"质量报告""质量评分""质量告警"菜单——所谓"报告",就是在这一页点开某条规则看到的那张历史结果表。在侧边栏里找不到别的质量入口是正常的,不是没开通。

为什么要用。 资损、财报等场景数据异常会造成损失。质量规则做到"事前定规则、事中监控、事后追溯",把坏数据挡在使用之前。

怎么做。

说明: 涉及该操作的功能权限:质量规则的查看 / 新建 / 修改 / 删除 / 立即校验,结果查看另有一项权限。规则在配置面建、校验在执行器跑,是两个环节,别在一处找结果。

重要提示(动手之前先确认这一条): 只有走过建模流程、建了逻辑模型的表才能配质量规则。 保存规则时平台要按"数据源 + 库 + 表名"在逻辑模型里找到对应记录,才能把界面上选的名字解析成物理表名;找不到就直接报"未找到表模型 x.y,无法解析物理表名,质量规则未保存",字段同理会报"未找到字段模型"。而新建弹窗里的库 / 表 / 字段下拉读的是库里的全部物理表——同步直用搬进来的表、属主自己 CREATE TABLE 建的表、扫描入池的裸表统统能被选中。选得到不等于存得下,要到点保存那一刻才报错。这类表要配质量规则,得先补建逻辑模型(见 3.4)。

  1. 打开侧边导航栏,进入 数据质量 → 质量规则,点 新建规则
  2. 在弹窗里依次选 数据源 → 库 → 表 → 字段(四级联动,列出来的都是物理名)。除自定义 SQL 外的四种规则类型必须选到字段,不选保存会报"该规则类型必须指定字段"。
  3. 规则类型,填这个类型的专属配置(值域填上下限、正则填模式、自定义 SQL 填查询语句)。
  4. 阈值比较符阈值(如非空率 >= 0.99)。
  5. 按需填 调度(留空 = 只能手动跑),选 状态(启用 / 停用)。
  6. 保存后在列表点 立即校验 当场跑一次,或等定时触发。
  7. 点规则名进详情,看 历史校验结果

规则类型:五种各管什么。 这是新建规则时第一个要定的东西,它决定平台生成什么样的校验 SQL、"实际值"这个数是怎么算出来的。

规则类型实际值怎么算(选了会发生什么)什么时候用
非空率 NOT_NULL非空行数 ÷ 总行数。总行数为 0 时分母按 1 计,空表不算不合格。结果里同时回填总行数与坏行数(坏行数 = 总行数 − 非空行数);坏样本取该字段为空的前 20 行,且只带主键列。关键业务字段不允许缺失的场景。典型:月收入、身份证号、申请人 ID 的填充率必须 ≥ 99%。
唯一率 UNIQUE去重值数 ÷ 非空行数——空值不参与唯一性判断。结果里的"总行数"填的是非空行数(不是全表行数),坏行数 = 非空行数 − 去重值数;坏样本取重复值所在行的主键列,前 20 条。主键、业务单号、证件号这类本该唯一的列,用来发现重复灌数、重复跑批。
值域占比 RANGE落在闭区间 [下限, 上限] 内的非空行数 ÷ 非空行数。上下限必须都填且下限 ≤ 上限,缺一个或填反了保存直接报错。数值字段有业务上下界的场景。典型:逾期次数 0–50、年龄 18–70、评分 0–100。
正则匹配率 REGEX把字段值转成字符串后按填的模式做匹配,匹配行数 ÷ 非空行数;坏样本取非空且不匹配的行。保存时平台会先把模式预编译一次做合法性校验,语法写错当场报错。格式类约束:手机号、邮箱、统一社会信用代码、日期串格式、业务编号前缀。
自定义 SQL CUSTOM_SQL自己写一条查询,平台取它第一行第一列当实际值。不产生总行数 / 坏行数 / 坏样本——结果里这三项为空,样本区会明说"CUSTOM_SQL 规则不采集坏样本"。这也是唯一不要求选字段的类型。前四种表达不了的口径:跨表一致性(两表金额差)、同比环比波动、多条业务规则的组合校验。

注意(唯一率的两个坑): 1. 分母是非空行数,一列大面积为空时唯一率会虚高——唯一率规则通常要和一条非空率规则搭着配才有意义;2. 它的坏样本查询带一层子查询、要全表扫,大表上比其它四种类型明显慢。

注意(值域只对数值列有意义): 区间是闭区间,正好等于上下限的值算命中。平台不检查字段类型——把值域规则配到字符串列上不会报错,但比较走的是字符串比较语义,算出来的占比没有业务含义。另外空值不算坏行(它被分母排除在外),要管缺失得另配一条非空率规则。

注意(正则:保存过了不等于跑得对): 保存时的合法性校验用的是平台侧的通用正则语法,而真正执行匹配的是分析型数据库自己的正则引擎,两者语法并不完全等价——平台这边认的写法(如某些字符属性类)到库里可能一条都匹配不上,结果是保存不报错,但匹配率恒为 0。复杂正则先去自助分析写一条 SELECT 试通了再回来配。

重要提示(自定义 SQL 只能是只读查询): 保存和执行两道闸门都会检查这条 SQL:只能以 SELECTWITH 开头,不能用分号拼多条语句,正文里出现写库或运维类关键字(insert / update / delete / merge / create / drop / alter / rename / grant / revoke / call / execute / exec / outfile / dumpfile / install / kill / shutdown / load,以及语句形态的 truncate)一律拒绝。这道限制是刻意的:质量校验是以系统身份 + 数据源属主凭证执行的,放进一条写语句就等于绕开权限体系去写别人的库。另外这条 SQL 必须返回一个数值,返回多列时只取第一列;取不到数会落一条"校验SQL未返回可用的数值结果"的失败结果。

阈值比较符:实际值和阈值怎么比。 它和"通过阈值"成对填,决定这条规则判通过还是不通过。

比较符判定口径什么时候用
>= 大于等于实际值 ≥ 阈值 判为通过。绝大多数"率"类规则用这个:非空率 ≥ 0.99、唯一率 ≥ 1、值域占比 ≥ 0.95。
<= 小于等于实际值 ≤ 阈值 判为通过。配自定义 SQL 算"坏行数""重复条数""两表差额"这类越小越好的指标时用。
= 等于实际值与阈值按数值精确相等才通过(比的是数值不是写法,1 与 1.00 视为相等)。要求绝对达标:唯一率 = 1、自定义 SQL 返回的差异条数 = 0。
> 大于实际值 > 阈值 判为通过。少用。要求严格超过某条线时才用,例如自定义 SQL 返回的有效样本量 > 1000。
< 小于实际值 < 阈值 判为通过。同上,要求严格低于某条线时用。

注意: = 慎用在比率型规则上。除法算出来的比率多半是无限小数,除了 0 和 1 这两个整值,几乎不可能刚好等于你填的那个阈值,规则会长期不通过。

状态:启用还是停用。

取值选了会发生什么什么时候用
启用规则正常。若同时配了调度表达式,保存时会自动建 / 更新一条调度任务,并当场算好下次触发时间。默认值,规则配好就用它。
停用保存时把这条规则对应的调度任务一并注销,定时不再跑;即使被触发也会直接抛"规则已停用,跳过执行"。规则暂时不想跑又不想删——比如源表在改造期,先停用。

注意: 停用只挡定时,不挡手动。 界面上对一条停用规则点"立即校验",它照样会执行并落一条结果。要彻底停,把规则删掉(删除是软删,历史校验结果会保留)。

调度:填与不填是两种行为。

取值选了会发生什么什么时候用
留空不建任何调度记录,这条规则只有点"立即校验"才会跑。原本配过调度的规则,把表达式清空后调度会被真正注销。一次性排查、临时验数、还在调参的规则。
填 6 段表达式(秒 分 时 日 月 周)保存后自动注册成一条平台调度任务,由统一调度器按表达式触发执行器跑校验并落结果。改表达式会重算下次触发时间。每日 / 每小时例行体检,通常挂在 ETL 跑批之后——跑完批就校验。

注意: 调度表达式只认 6 段,填 7 段(带年份字段的那种写法)保存时直接报错。这是刻意收紧的:放行 7 段的后果不是报错,而是算不出下次触发时间,界面上明明显示配了定时,实际一次都不跑。另外调度注册失败不影响规则保存,服务端只记一条告警,界面上看不出来;这时规则仍然可以手动执行。

校验结果里有什么。 详情抽屉里展示最近 200 条结果,按校验时间倒序。

结果字段含义
是否通过Y = 通过,N = 未通过。按上面的比较符与阈值判出来的。
实际值这次算出来的那个数(率类规则是 0–1 的小数,自定义 SQL 是它返回的值)。
总行数 / 坏行数非空率是全表行数 / 空值行数;唯一率是非空行数 / 重复行数;自定义 SQL 两项都为空。
坏样本不合格行的主键列,最多 20 条。识别不出主键时宁可不采样,并在结果里写明原因。
耗时 / 错误信息本次校验的执行耗时;失败时给出错误原文。

实例锚定(三条规则): 给 DWD 明细表配——月收入 monthly_income 非空率 ≥ 99%(非空规则 + 阈值)、申请人 applicant_id 唯一(唯一规则)、逾期次数 overdue_count 值域 0–50(值域规则)。跑完就知道这张表能不能喂模型。

说明: 值域 / 正则这类约束,若目标字段已挂了发布态的数据元,直接照数据元里写的格式与值域来配阈值,别另立一套口径(见 3.6.1)。

注意(列表上的筛选): 列表页的 规则类型状态 两个下拉是真过滤,按它们收窄列表没问题。但**"规则名称"搜索框在当前版本不生效**——输什么都返回全部规则,不报错也不提示。要找某条规则,用规则类型 + 状态收窄后翻列表。

重要提示(质量校验读的是明文,这是有意的): 质量校验以系统身份、用数据源属主的凭证读原始数据,不经过脱敏。原因很实际:掩码之后不同的原值会撞成同一个串,唯一率立刻失真,非空率、值域也一样测不准。作为对冲,平台做了三层收敛——校验 SQL 只返回聚合数、坏样本只落主键 / 行标识列、识别不出主键时宁可不采样。所以这条链路不会把敏感明文吐到界面上。另外,规则的列表与详情都按数据权限过滤:对目标表没有权限的规则直接不返回,判不出来时按无权限处理。

验证。 运行后校验结果显示"通过 / 未通过、实际值、坏样本数",三条规则均通过,即表示该表质量达标。


3.9 数据资产:把治理好的表变成能被发现的资产

治理好了,还得让别人找得到、用得上。这一节把表变成"货架上的资产"。

3.9.1 数据地图(目录 / 血缘 / 表详情)

场景切入。 一个分析师想找"有没有现成的申请人特征宽表",不知道它叫什么、在哪个库。数据地图就是那本能按名字、按主题翻的货架目录。

是什么。 数据地图是全平台数据资产的统一浏览入口:左侧目录树 / 主题树 + 右侧资产卡片网格,顶上一个全局搜索框,右栏挂着热门资产和最近浏览。是找数、看数、溯源的一站入口(此处"入口"为界面用语)。

这一页解决什么问题。 一句话:找数。不知道表叫什么就搜、不知道搜什么就翻树、翻到了就点开看结构和血缘,看完还能收藏订阅或者去申请权限。它只列当前账号对其数据源有 OWNER 或 READ 的资产——没授权就是一张空页,这一点后面还会再强调。

为什么要用。 让治理好的表能被发现、被复用;血缘支撑数据溯源、变更影响分析、故障定位。

怎么做。

说明: 涉及该操作的功能权限:数据地图的查看搜索;能看到内容的前提是对相应数据源有源级授权。

  1. 打开侧边导航栏,在 数据资产 分区打开 数据地图
  2. 用左上角的 分组维度 选按目录还是按主题翻;点树上的节点过滤右侧卡片。
  3. 或者直接用顶部 全局搜索,先选一个搜索范围再回车。
  4. 点资产卡片进 表详情,在四个页签之间看描述、数据、字段和血缘。

分组维度:左侧那棵树按什么分。

取值左边显示什么、右边跟着变什么什么时候用
按目录左侧是资产目录树,来自每个资产填的"资产目录路径";没填路径的资产统一归到默认的"业务域 / 待分配目录"。右侧卡片里既有表也有指标默认档,进页面就是它。按业务域翻资产时用。
按主题左侧是主题域树(数仓规划里建的那套主题域,带父子层级)。右侧只列挂到该主题的模型表,不含指标想按数仓主题域 + 分层找模型表时用。

注意: 点树节点是连同子节点一起看——选中一个父节点,它下面所有子节点的资产都会显示出来,不用逐个点。关键字过滤框在左侧树的上方(占位符"搜索目录 / 主题 / 资产名称"),但它过滤的是右侧卡片、不是树;卡片区下方带分页,默认每页 24 条,可切 12 / 48 / 96。

重要提示: "按主题"这一档另外要一项权限,它只授给了资产治理角色数据全量角色只读类角色(资产消费者、只读数据角色)点"按主题"会被拒——树是空的,还会弹一个全局错误提示。这不是数据没建,是这档看不了;用"按目录"翻同样能找到表。

全局搜索:四个范围各搜什么。 搜索框下面有四个标签,选哪个决定了在什么东西上匹配。回车后跳到搜索结果页(这个页面只能从这里跳进去,侧边栏里没有它)。

搜索范围在哪些内容上匹配什么时候用
搜表表名、表中文名、负责人、项目、主题、目录、描述、分层、数据源类型、数据源名——十个字段上做不区分大小写的包含匹配。默认档。知道表名片段,或者只知道负责人 / 主题时用。
搜 Topic主题域的名称、描述、负责人、示例表名、表数量。只返回名下至少有一张表的主题域不知道具体表名,只知道大概属于哪块业务时,先找到主题域再往下翻。
搜字段所有可见表的字段名、字段类型、绑定的数据元、字段描述,外加该字段所属表的表名 / 中文名 / 负责人 / 主题。只记得列名(比如 monthly_income)、不记得在哪张表时用。
搜指标已定义指标的名称、编码、描述、口径,外加其底表的表名 / 中文名 / 负责人 / 主题。找现成的指标口径,避免重复定义。

注意: 指标能不能被搜到,跟着它底表的可读性走——底表没授权,挂在上面的指标一条都搜不出来。

表详情:四个页签各看什么。 点资产卡片进来的页面,同样只能从数据地图跳进去。

页签里面有什么
描述信息基本信息(数据库类型、库名、表名、表中文名、字段数、分区字段数、创建时间、更新时间)、数据源与业务信息(负责人、主题、目录、分层、生命周期、进入资产池方式)、来源解释(这张表跟哪些任务绑着、是来源表还是结果表)。
查看数据数据预览,分页表格,默认每页 20 条。看到的内容按本人账号脱敏。
字段信息字段清单:字段名、类型、是否分区、描述、绑定的数据元与数据字典、字段声明的来源表。
数据血缘一张库表级 DAG,标出这张表的上下游,带一个深度徽标;下方"血缘来源解释"逐条列出每条边是哪个任务 / 编排产生的、方向是什么、置信度多少。

页头一共三颗按钮,前两颗的文案随本人对这张表的权限状态变:

按钮位有数据权限时申请审批中时没有权限时
主按钮去 Query 分析(带着表名跳自助分析)查看申请状态申请数据权限
副按钮查看数据权限收藏 / 已收藏收藏 / 已收藏
第三颗订阅(三种状态下都在,文案不变)同左同左

注意(这是个容易卡住的地方): 副按钮那一位是二选一——一旦对这张表拿到了数据权限,它就变成"查看数据权限",页头上再也点不到收藏。而这颗按钮是全平台唯一的收藏开关——别处没有第二个入口。所以收藏要趁"还没拿到权限"时点;已经收藏过又想取消的,见 3.9.3 的说明。

注意(别按设计稿的想象找): 表详情里没有数据量、存储大小、产出信息这几项,基本信息只到字段数和更新时间为止。血缘页签只有库表级一种视图——页面上自带一句说明"当前页面仅展示库表级血缘,不展开字段级来源";没有字段级 / 任务级 / 指标血缘,也没有关系视图与列表视图的切换、活跃 / 静默过滤、全景 / 聚焦切换

右栏两块。 热门资产 取最近更新的前 6 条(需要一项单独的权限,取不到就静默留空,不报错);最近访问(界面上就叫这四个字)是本人最近打开过的前 6 张表(进详情页自动记,不用手动操作)。

说明: 最近访问挂在数据地图页右栏,不在"我的数据"页里,别在那边找。

重要提示: 1. 可见性主控在数据源源级授权——对源没有授权,数据地图 / 详情 / 血缘一律为空(这是最常见的"页面空白"原因);2. 血缘边来自任务同步关系,一条都没有时会退回按字段声明的来源表拼一张图,两者皆空时图上只有孤立节点;3. 资产页已收敛,原先的"资产地图首页 / 数仓表导引 / 统一资产池"三页已合并进现有页面,某些旧权限项没有菜单承载,非超管访问返回 403 是预期行为,不是缺陷。

验证。 对有授权的账号,数据地图能看到目录树与资产卡片,点开表能看到字段、数据预览与血缘 DAG;换一个对该源没授权的账号,同一页应当是空的。

3.9.2 资产治理(元数据登记 / 扫描入池 / 自动归层)

场景切入。 扫描把库里几百张物理表都发现进来了,但它们没主、没描述、没分层,像一堆没贴标签的箱子。资产治理就是给这些裸表贴上"归谁管、装什么、放哪层"的标签。

是什么。 资产治理把物理表扫描发现登记进资产目录,并登记维护资产的业务元数据(中文名、负责人、目录、主题、生命周期),按命名规则自动归层。

这一页解决什么问题。 它把 采集入池 → 登记 → 发布 一整条链压在一页里,用顶上的状态分面代替了多个平级菜单。所以别去侧边栏找"资产登记""资产发布"——都在这一页,靠切分面走流程。

为什么要用。 资产治理是把"裸表"变成"有主、有分类、有分层的资产"——自动归层解决了"有骨架没实现"的问题(此前大量资产的分层字段为空)。

怎么做。

说明: 具有该操作的角色:资产治理角色(asset_governor)负责资产元数据登记与治理。扫描与保存另有两项独立权限。

  1. 数据资产 → 资产治理采集入池,选一个数据源(可选填库名 / Schema)开扫。扫完弹一句"发现 N 张表,新增入池 M 项"。新入池的表初始状态是 待登记
  2. 切到 待登记 分面,逐条点 登记,在抽屉里补业务信息:资产中文名、资产目录、主题域、负责人、生命周期、发布状态、业务描述、备注。
  3. 要登记一个平台扫不到的对象,用右上角 注册资产,手填物理名新建一条。
  4. 保存时把 发布状态 选成"已发布",这张表就在数据地图里对外可见了。

采集入池:一次扫一个数据源。 弹窗里选数据源、可选填库名或 Schema,平台逐表逐字段扫描,把发现的表写进资产池、把字段清单同步进来。

注意: 界面上一次只能扫一个数据源。平台另有一条"扫全部可见数据源"的定时全量扫描(由调度按表达式触发,遍历当前可见的所有源),但界面上没有触发它的按钮,要改它的频率得找管理员。

注意(扫描是异步的,失败要会认): 定时全量扫描是受理即返回——调度实例显示成功只代表"已受理",不代表扫完了。真实进度与失败原因记在扫描记录里,而扫描记录当前没有界面,只能请管理员按批次号查接口。扫描记录里有四种状态值得知道:执行中(还没跑完)、成功(表清单取到了,并完成了"本次没看到的表逐级降级"的对账)、连不上(扫到 0 张表且连通性探测也失败,此时刻意跳过对账,不把整库资产误判成待核查 / 已下线)、失败(过程中抛异常,错误信息记在里面)。上一批还在跑时本批会被跳过,这是正常保护,不是失败。

登记 / 注册抽屉里的每一栏。

参数名称描述
资产类型表(TABLE)或视图(VIEW),见下。编辑已有资产时这一栏置灰不可改。
物理名称库里的真实表名。扫描来的资产这一栏也置灰;人工注册时手填。
展示名称资产中文名,数据地图里显示的就是它。
资产目录一条路径,如"接入资产 / 用户域"。它决定这张表在数据地图"按目录"树上挂在哪。留空会被归到默认的"业务域 / 待分配目录"。
主题域从数仓规划里建好的主题域中选。它决定"按主题"树上的位置。
负责人从用户里选。数据地图卡片和搜索都能按负责人找。
生命周期一个业务阶段标签,见下。
发布状态决定这张表在数据地图里对外可不可见,见下。
业务描述 / 备注自由文本。描述会进搜索匹配范围,写清楚点对别人找数有实际帮助。

资产类型:表还是视图。

取值含义与影响什么时候用
TABLE按物理表看待。扫描时只要库返回的类型里不含"视图"字样就归成表;人工注册的默认值也是它;任务同步带进来的资产一律记成表。绝大多数情况。登记一张实际存在的物理表时选它。
视图 VIEW按视图看待。扫描时靠库返回的类型字符串里含"VIEW"自动判定。数据地图对表和视图一视同仁地列出来。登记的对象实际是一个视图时选。

注意: 1. 判定只看类型字符串里有没有"VIEW",物化视图也会被归成视图;2. 编辑时这一栏置灰,而且平台只允许人工登记来源的资产改类型——扫描来源资产的类型永远以下一次扫描的结果为准,改不动;3. 除了列表筛选,选表还是视图对后续的脱敏、血缘、质量规则没有任何行为差异

资产状态:系统自动流转,用户不能直接选。 它反映的是"这张物理表还在不在、业务信息补没补",不是发布与否。

状态什么情况下会变成它读到它该做什么
待登记扫描第一次发现这张物理表时的初始状态。此时它有技术元数据,没有业务元数据。去"待登记"分面里逐条认领、补业务信息。
已登记扫描来源的资产被人工登记 / 编辑保存过一次后,从"待登记"(或"待核查")提升上来;任务同步和人工注册进来的资产一进来就是已登记业务信息补完了,接下来考虑发不发布。
待核查某次扫描连上了数据源,但没再看到这张表,第一次降级为它。去核实物理表是不是被删了、改名了、换库了。
已下线已经是"待核查"的资产,下一次扫描仍然没看到,降到这一档,之后不再继续降。基本可以确认这张表废弃了。若它以后又被扫到,会自动"复活"回待登记 / 已登记。

注意(同一个状态两处叫法不一样): "待登记"在表详情页里显示成 待治理,"待核查"在资产治理列表的彩点上写的是 待更新。是同一个状态、同一份数据,只是两处文案没对齐,不用怀疑自己看错了。

注意: 状态提升只对扫描来源的资产生效,且只从"待登记 / 待核查"往上提;其它状态原样不动——这是为了不破坏"这张表还在不在"这层语义。

发布状态:决定别人在数据地图里看不看得到。 这一项是用户在抽屉里手选的,和上面那个自动流转的资产状态是两回事。

取值选了会发生什么什么时候用
已发布资产在数据地图里对外可见的正式态。选它保存前会先弹一次确认("发布后该资产将在资产地图对外可见")。除了手选,模型表发布成功时也会自动把对应资产刷成已发布业务信息补齐、确认可以给别人用了。
草稿表达"还没发布"。想显式标一下没发布时选。
已下线资产下线态,数据还在,只是不再推荐使用。模型表下线或删除时也会自动把对应资产刷成它。表还在但不希望别人再用时。
物理表已删除由物理表回收动作自动写入,表示这条资产指向的物理表已经被删掉了。这一档下拉里选不到,是系统专用的。读到它说明这张表点进去也没有数据了。

注意: 选"草稿"和什么都不选,界面上看不出任何区别——两种情况下"发布状态"列显示的都是这条资产的资产状态中文名。想表达"没发布",留空即可。

重要提示: 界面上的"发布"是直接写字段,不走审批。 抽屉里把发布状态改成"已发布"、保存、确认,资产当场就在数据地图里可见了。平台后端另有一条走工单审批的资产发布通道,但界面上没有任何按钮调它,当前版本只能由管理员通过接口发起。不要按"发布要过审批"来安排流程。

生命周期:一个纯标签。

取值含义什么时候用
接入标记这张表处在数据接入阶段。ODS 层、刚同步进来的原始表。
加工标记处在加工阶段。DWD / DWS 这类中间加工表。
服务标记处在对外服务阶段。ADS 层、直接被应用或接口消费的表。
归档标记已归档。冷数据、只留存不再更新的表。

重要提示: 这四档全是纯标签,不触发任何行为。尤其是"归档"——它不会真去归档、不改存储、不停调度,只是在资产上写了两个字。另外当前版本这一栏在表详情页里显示的是英文原码(如 ACCESS),不是中文,这是两边取值口径没对齐导致的显示问题,不影响数据。

进入资产池方式:这张表怎么进来的。 这一项在表详情的描述信息里显示,用户不能选,由平台按入池路径自动写。

取值含义读到它意味着什么
数据源扫描由"采集入池"或定时全量扫描发现并写入。先有物理表,后被平台发现。这类资产的技术字段(数据源、库、物理名、字段清单、最近扫描时间)每次扫描都会刷新,而人工补的业务字段(中文名、负责人、描述、数据元、字典)不会被覆盖。
任务同步由数据集成任务或任务编排保存时反向登记进来的:同步任务的源表和目标表、SQL 加工任务里解析出的读表和写表,都会被登记成资产,状态直接给"已登记",目录默认落到"任务开发 / 资产池"。这张表是被某条 ETL 任务带进来的。同时平台会写一条任务绑定和一条血缘边,详情页"来源解释"里能看到具体是哪条任务或哪个编排。
人工登记由"注册资产"手填物理名创建,状态直接给"已登记"。有人手工把它登记进来的。它是唯一允许事后修改资产类型的来源。

注意: 编排(多节点任务流)同步进来的资产,这一栏写的也是任务同步,详情页上永远显示"任务同步",看不到"编排同步"——"编排同步"这个字样只会出现在下方"来源解释"的绑定条目和血缘条目里。

注意: 人工登记不校验物理表是否真的存在。登记了一张不存在的表,在数据地图里点开会什么都查不到。

状态分面:表格上方那四个带计数的按钮。

分面筛出哪些行什么时候用
全部不按状态过滤,显示当前筛选条件下的全部资产。总览。
待登记只看资产状态为"待登记"的行,也就是扫进来还没补业务信息的裸表。这些行的操作列会多一个"登记"按钮。扫描跑完后,从这里逐条认领。
已登记只看已登记、且发布状态不是"已发布"的行。检查哪些表补完了业务信息但还没发布。
已发布只看发布状态为"已发布"的行(这一档优先级最高,先判发布状态再判资产状态)。看已经对外可见的资产清单。

注意: 四个分面的计数加起来不等于总数。 "待核查"和"已下线"的资产不属于任何一个分面,只能在"全部"里翻到。

另外列表上还有两个过滤下拉:创建人数据源类型。它们的选项不是固定字典,而是从当前这批列表数据里现算出来的——列表里没有的值,下拉里也不会出现。

自动归层:表名怎么对上分层。 归层规则本身配在 数据模型 → 分层设计 的每一层下面,在这里只是"消费"它:扫描入池时按规则给表打上分层。

匹配方式怎么匹配什么时候用
通配(默认)* 当任意多字符、? 当任意单字符,整串匹配,大小写不敏感。不填匹配方式时按它处理。最常用。写 ods_* 匹配所有 ods_ 开头的表。
前缀表名以该串开头即命中,大小写不敏感。标准命名前缀(ods_ / dwd_ / dws_ / dim_ / ads_ / ext_ / ref_)直接用它,比通配少写一个星号。
后缀表名以该串结尾即命中,大小写不敏感。按后缀约定归层,例如 _df / _di 结尾。
包含表名任意位置含该串即命中,大小写不敏感。命名不规范、只能靠中间的业务词判断时兜底用。
正则按正则做整串匹配,大小写不敏感。前四种表达不了的复杂命名约定。

规则还分两种范围:包含规则——命中任意一条就算这一层的候选;排除规则——命中任意一条则这一层立刻出局,即使已经命中了包含规则。

注意(整体匹配语义,决定了归层结果): 平台按层的排序号升序逐层试,第一个"命中包含规则且未命中排除规则"的层胜出,后面的层不再参与。所以层的排序直接决定归层结果,规则有重叠时靠排序分先后。

注意(两个静默失效点): 1. 通配是整串匹配不是包含匹配——写 ods_ 匹配不到 ods_user,必须写 ods_*;2. 正则也是整串匹配,模式必须覆盖整个表名,而且正则本身写错时这条规则直接判为不命中,不报错,界面上看不出来。"包含"是最容易误伤的一档,写得太短会把大量无关表拖进这一层。

重要提示: 改了归层规则之后,界面上没有"全量重算"的按钮。平台后端有这条通道(命中则写入分层,不命中则清空),但当前版本只能由管理员通过接口执行。界面上能做的是重新扫一次该数据源——扫描时会按新规则给命中的表补上分层(不命中的不清空)。

注意: 登记权限虽已绑定,但登录态缓存陈旧时可能误拒,换管理员或清缓存重登即可。

重要提示(当前版本的已知问题):已在列表里的资产点"登记 / 编辑",保存有可能被后端拒掉——列表下发的资产标识带了一层前缀,原样回传时后端解析不了。碰到保存失败,当前可用的替代做法是用右上角 注册资产 手填物理名新建一条人工登记资产,业务信息填在这条上;或者请管理员从后台补录。这一条已在修复清单里,实际操作前建议先在自己的环境上试一次登记,确认行为再照本节流程走。

验证。 扫描 + 登记后,资产在列表里落到"已发布"分面、归到了正确分层;换一个有权限的账号打开数据地图,能在对应目录 / 主题下找到它。

3.9.3 我的数据(收藏 / 订阅 / 访问)

场景切入。 一个分析师每天都要查那几张固定的宽表,不想每次都在目录里翻。收藏、订阅、访问历史就是把常用资产钉在手边。

是什么。 "我的数据"是个人视角的常用资产收纳夹,两个页签:我收藏的我订阅的

这一页解决什么问题。 就一件事:把每天要查的那几张表钉在手边,少翻一次目录树。它不做推荐、不排热度、不做团队共享——纯个人的两份名单。

为什么要用。 降低找数成本——收藏和订阅把个人常用资产沉淀下来。

怎么做。

说明: 涉及该操作的功能权限:资产收藏 / 订阅 / 访问记录相关权限,已补授给资产消费与资产治理角色,不再需要管理员。

  1. 表详情 页头对一张表点 收藏订阅
  2. 数据资产 → 我的数据 切页签查看这两份名单,点行跳回表详情。

三种个人标记,各是什么。

标记方式怎么记、记了会怎样什么时候用
收藏按"本人 + 这张表"记一行;在表详情页头点收藏是开关语义——已收藏的再点一次就是取消。收藏时会把表的中文名、负责人、数据源、分层做一份快照存下来,"我收藏的"直接读这份快照渲染,所以打开很快。每天都要查的那几张固定宽表。
订阅按"本人 + 这条资产"记一行,幂等——重复点不会记成两条。取消订阅是逻辑删除,没订阅时点取消也返回成功。想把某张表单独拎出来跟一段时间时用。
浏览留痕不用手动操作,每次打开表详情自动记一条;同一个人同一张表只保留最近一次。按浏览时间倒序,默认取 20 条。想回到刚才看过的那张表。

两个页签各显示什么。

页签每行显示行上能做什么
我收藏的表名、物理名、负责人、更新时间。点行跳表详情。这一页没有取消收藏按钮
我订阅的表名等基本信息,外加一个发布状态彩点。资产已被删除的显示"(资产已删除)"。每行有 取消订阅(带二次确认)。

重要提示(订阅不会给你发任何通知): 订阅在当前版本只是一份关注名单——平台没有对订阅做任何变更检测,不发消息、不发邮件、没有站内信。表结构改了、数据没刷新、资产下线了,订阅方不会收到任何提醒。把它理解成"收藏夹的第二个格子"就对了,不要拿它当监控用;要盯数据质量,配 3.8 的质量规则。

注意(取消收藏的入口在别处,而且有条件): "我收藏的"页签里没有取消收藏的按钮,要取消得点进表详情、再点一次页头的收藏按钮。但这颗按钮和"查看数据权限"共用一个位置(见 3.9.1)——对这张表已经拿到数据权限的人,页头显示的是"查看数据权限",按钮上根本没有"已收藏"可点,当前版本就取消不掉这条收藏。订阅则相反,取消入口就在"我订阅的"每行上,不受权限状态影响。

注意: 只有已纳入资产地图的表才能收藏,否则会提示"当前表未纳入资产地图,暂不支持收藏"。另外收藏是先写本地、再异步落库的,后端一时不可用时不会报错,但那条记录只留在本机;"我收藏的"列表只显示能对上资产的记录。

注意: 浏览历史不在这一页。 它叫 最近访问,挂在数据地图页右栏(见 3.9.1),这里只有收藏和订阅两个页签。

说明: 收藏 / 访问 / 订阅为纯个人记录,不带推荐或热度排行,别人也看不到你收藏了什么。

验证。 在表详情点收藏后,到"我的数据 → 我收藏的"能看到该表回显;点订阅后,"我订阅的"里出现该表并带取消订阅按钮。


3.10 自助分析 / 查询工作台

场景切入。 数据搬进来、治理好了,分析师要验一验"数到底对不对";数据工程师走同步直用时,还要先手写一句 CREATE TABLE 把目标表建出来。这些即席取数、验数、建表的动作都在查询工作台完成。

是什么。 自助分析(查询工作台)是面向分析与开发的交互式 SQL 查询界面,用于取数、验数,以及为"同步直用"预建目标表。查询者在这里写的自由 SQL,其脱敏由中台数仓引擎级插件按本人账号在引擎内接管。

这一页解决什么问题。 三件事:取数(写一条 SQL 把数捞出来看)、验数(建完模、跑完同步,来这里确认数对不对)、建表(走同步直用的人在这里手写 CREATE TABLE 把目标表建出来)。界面上是多页签编辑器 + 左侧库表信息树 + 底部运行结果区三块。

为什么要用。 降低取数门槛;它是 OWNER 建表的一条路;而且用户自由写的 SQL,其脱敏由中台数仓引擎按本人账号在引擎内落实——别名、聚合都绕不过,因为读到的就是掩码值。查询工作台在数据开发者和数据消费者之间充当管道:消费者不必关心数据存哪、开发者不必关心取数怎么实现。

怎么做。

说明: 涉及该操作的功能权限:自助分析的查看 / 新建 / 运行 / 保存 / 配置管理;CREATE TABLE 需对目标库有 OWNER。

  1. 打开侧边导航栏,在 自助分析 分区打开 Query
  2. 新建 Query 开一个页签,选 数据源
  3. 在左侧库表信息树里浏览表和字段——双击表名或字段名可以直接把标识符插进当前 SQL,不用手打。
  4. 在编辑器里写查询,需要时用 格式化 整理、用 复制 取走 SQL。
  5. 执行,在底部结果区看结果。
  6. 常用的查询点 保存,归到自己的文件夹里,下次直接打开。

多页签怎么用。 每个 Query 占一个页签,可以同时开多个、随时关闭;切换页签会各自恢复自己的 SQL 与运行状态,不会串。适合"一边跑长查询、一边在另一个页签里查表结构"。

底部四个页签,各看什么。

页签里面是什么什么时候看
运行信息本次执行的汇总:执行状态(成功 / 失败 / 未执行)与返回条数。跑完先看这里,确认到底返回了多少行。
SQL本次实际执行的 SQL 原文(还没跑过时显示编辑器里的当前内容)。确认自己跑的到底是哪一版 SQL——改了没保存、跑的是旧版,在这里一眼看出来。
日志执行消息与报错原文。执行失败时页面会自动切到这个页签。报错时看这里。
预览结果结果表格,带分页和"下载结果"按钮。执行成功时页面会自动切到这个页签。看数、导出。

下载结果。 在"预览结果"页签点 下载结果,平台会把结果集分页拉全(每页 500 行)后在浏览器端拼成文件,文件名是"Query 标题-时间戳"。

重要提示(导出只有一种格式): 当前版本只支持 CSV,没有表格文件(.xlsx)、没有 JSON,界面上也没有格式选择器——点下去就是 CSV。另外结果超过 5 万行会直接拒绝下载并提示超限;要拿更大的量,把结果先写成一张表(用加工任务或 CREATE TABLE AS),再走正规导出通道。

重要提示: 1. 自由 SQL 的脱敏由中台数仓引擎级插件按查询者本人账号在引擎内完成,SQL 不再在 FROM 处改写;别名、聚合都无法绕过,因为读到的就是掩码值(与 3.7.2 引擎级列脱敏同一套机制);2. 非 OWNER 用户在工作台 CREATE TABLE 会被拒;3. 控制面管理员无法直连数据源取查询行——"读真实业务数据"这类操作要走执行器,不要顺着"是不是没权限"排查。

验证。 用被授权账号查治理好的表,敏感列显示掩码;用它 CREATE TABLE 预建同步直用目标表后,同步任务即可写入。


3.11 跨部门数据申请工单

场景切入。 数据开发工程师要用信贷源建模,但这个源归数据管理者所有,他没有权限。对方也不认识他、不会主动分享。这时不能直连,得走一张真实的审批工单去申请。

是什么。 当数据归属别的部门时,用数据方在权限中心里挑出要用的资源、勾上要用的权限、写清事由,提交后平台自动拉起一条真实的审批流程;审批通过后系统按申请单自动写授权。整条链路是"在线申请 → 审批 → 自动发权 → 到期回收"的闭环。

两个入口,办的是同一件事。

入口位置特点
权限中心(主入口)侧边导航栏 数据中台 → 数据安全 → 权限中心三个页签按粒度选资源,能逐资源勾动作、逐字段勾权限。本节以它为准。
发起申请 · 跨部门数据访问申请工作台 → 我的申请 → 发起申请同一件事的简表单版,只能申请数据源只读,字段少、填得快。

这是拿到别人数据的两条路之一。 另一条是 3.7.4 的属主自助分享——由属主主动给、不走审批,而且属主可以在分享时逐列配脱敏。两条路方向相反,选哪条只看由谁发起:自己要用别人的数据 → 走本节的申请工单;自己有数据要给别人用 → 走 3.7.4。

为什么要用。 数据资产有主,跨部门用数据要留痕、可控。

说明: 审批通过发下来的授权不带逐列脱敏配置(那是属主分享路径才有的动作),所以申请人读到什么,落在 3.7.2 的第三档:登记过的敏感列仍是掩码,没登记过的列是明文。若某几列必须对申请人遮住,可靠做法有两个——要么先在数据脱敏页把这几列登记为敏感列(兜底层),要么改走 3.7.4 由属主分享并当场配规则。

怎么做。

说明: 涉及该操作的功能权限:权限中心的查看申请提交;审批动作在工作台待办里办。申请由被申请资源的属主审(解析不到属主时落到配置的默认审批人),提单人不能审自己的单

  1. 用数据方在侧边导航栏进入 数据中台 → 数据安全 → 权限中心,按要申请的粒度切页签。
  2. 左栏搜资源、勾资源(可多选)。数据源卡片若已带"已授权""审批中"标签,复选框是灰的,不能重复申请。
  3. 右栏给每个已选资源勾申请权限;申请表权限时还能展开表、逐字段勾。
  4. 申请信息:项目名称(可选)、有效期(默认当天起三个月)、申请原因(必填)。
  5. 右上点提交申请,页面自动跳到流程详情页。
  6. 资源属主在 工作台 → 我的待办 打开这条待办,看清申请的资源清单、动作、有效期与事由,同意或驳回。
  7. 通过后平台自动写授权,用数据方到自助分析查该源的表,登记过的敏感列呈掩码。

第一步先选粒度:三个页签的区别。

页签申请的是什么什么时候用审批通过后实际发生什么
数据源申请一整个数据源的只读访问。选的是数据源本身,不落到具体库表。跨部门取数的正路,本节场景就是它。真发权:给申请人下发中心库的库级读权限,并补一条数据源可见性记录——他在自助分析的数据源清单里当场就能看到并选中这个源。
表权限申请某个库里某张表的读 / 写,可再逐字段勾。只需要一两张表、且想把范围写清楚时。只写控制面的授权记录,不下发引擎侧读权限、也不补数据源可见性。
数据库申请一整个库的读 / 写 / 建表。基本用不到。同表权限申请,只写控制面的授权记录。

重要提示: 表权限申请与数据库申请当前是登记性质的——审批通过后,申请人在授权记录里看得到自己有权,但到自助分析仍然查不到数据,因为审批自动发权这条路只对数据源粒度真正下发引擎侧读权限。跨部门要真拿到数据,走数据源申请;确实只想给某几张表、某几列,改走 3.7.4 由属主在数据授权页直接下发(那条是手工授权路径,会真下发)。

申请权限(右栏勾的动作)。

取值是什么什么时候勾勾了会发生什么
读权限 read查这个资源的数据。99% 的申请就勾这一个。唯一真正打通到数据面的动作:通过后生成一条按人授的只读授权;数据源粒度还会下发引擎侧读权限与数据源可见性。
写权限 write表达"想写"的登记项需要在申请单上留下写意图时。原样进流程表单、进授权记录,但平台不会因此给出任何写数据的能力
建表权限 create_table表达"想在这个库里建表"的登记项,只在数据库申请页签出现。同上。同上,只登记,不产生实际建表能力。

注意: 写权限、建表权限当前只是登记项——勾了不代表能写、能建表。要真在中台库里建表、写数据,靠的是对目标库的 OWNER 身份(见 3.10),不是这两个勾。

说明: 改表、删表、脱敏白名单三项在申请页上没有勾选框,页面下方有一行灰字写明"需由资源属主在『权限授权』直接下发"。这是有意收口:申请入口只校验一个粗权限点,若放开,任何能提单的只读需求方都可能自助索取脱敏豁免(拿明文)。绕过界面直接调接口传这三个值也会被打回。

说明: 数据源申请没有动作勾选框——数据源共享一律只读,接口里传 read 以外的值会直接报"数据源共享仅支持只读(read)权限"。

字段权限(只在表权限申请里出现)。 展开一张表能看到逐列的勾选框:

取值是什么什么时候勾
读权限 read声明"这一列我要读"。勾选表的那一刻,平台已经把这张表的每一列都预先勾上了读——申请单上的默认状态就是整表全给。保持默认即可,不用一列列去点。
写权限 write登记项,不产生任何写数据的能力。仅作意图登记。

重要提示: 想靠取消勾选来收窄列范围,当前是不生效的。 取消勾选只是把那一列的动作清空,并不会把它从申请单里去掉;而可见列的判定口径是"这一列在申请单里出现过就算可见"——勾了读算可见,动作被清空同样算可见。结果是被取消的列在审批通过后照样查得到,而申请单和授权详情里那一列显示成空,看着像是收窄成功了。这属于照着做会静默失效的一类,不要拿它当列级管控手段。

说明: 另有两条空值口径,查授权记录时会碰上:整张字段映射为空 = 不限制字段(整表都给),不是一列都不给;映射是坏数据、解析不出来时,该条授权反过来不贡献任何可见列。从界面选表产生不了空映射(选中即预置全列),只有接口直连、或这张表在逻辑模型里一个字段都没登记时才会出现。

注意: 真要按列控制别人看到什么,走 3.7.4 属主自助分享——属主在数据授权页逐列配脱敏规则,分享出去的敏感列直接是掩码。申请工单这条路做不出列级收窄。

申请信息(三个字段)。

参数名称描述
项目名称可选。标记本次申请所属项目,便于日后按项目盘点授权。
有效期授权到期日,默认当天起三个月。到期后由每日定时任务自动回收,不用人管。
申请原因必填。说明用途、使用场景与预计范围——它是审批人唯一的判断依据,也是事后追溯的凭证。

数据源卡片右上角的状态标签。 只在数据源申请页签出现,用来防重复提单:

标签含义卡片能不能勾
(不显示标签)当前用户对这个源既没有生效授权,也没有审批中的申请。可勾。
审批中已经提过一张单,还没审完。置灰,不可勾。
已授权已经有一条生效且未过期的授权。置灰,不可勾。

说明: 从数据地图的资产详情页点"申请权限"跳进来时,页面会自动预选那张表,并在旁边显示未申请 / 审批中 / 已授权,不用自己再找一遍。

申请单状态。

状态含义接下来能做什么
待审批单已提交、流程在跑,审批人还没处理。此状态下同一个人对同一资源不能重复提单(重复的资源会被跳过;全部被跳过时提交会报"所选资源已存在申请或授权,无需重复提交")。等审批;要改就撤回重提。
已通过审批人同意,平台随即按申请单内容生成授权(按人授、生效中、不带任何列脱敏配置)。去自助分析用数据。
已驳回审批人驳回或退回,不生成任何授权。补充事由后重新提单。
已撤回申请人主动撤,或底层流程实例被撤。它是终态——即便流程后来被误批通过,平台也不会据此发授权。重新提一张。

注意: 1. 状态不是实时翻牌的——平台每 30 秒扫一轮流程做对账,刚审批完可能要等一轮页面才变;2. 权限中心页上没有"撤回"按钮,要撤只能到工作台把对应的流程实例撤掉。

授权生命周期。 申请通过后生成的授权是"人 + 资源 + 读权限 + 到期日 + 授权人"这样一条记录,它有三个状态:

状态什么时候进入含义
生效中审批通过发权时;属主编辑或续期后也回到这个状态。授权可用,参与读权限判定。
已释放属主提前收回,或受让人本人主动归还。终态。置终态的同时回收数据源可见性、撤销引擎侧读权限。
已过期每天凌晨的定时任务扫出过了到期日仍生效的授权,先撤引擎侧读权限,再置终态。终态,系统自动流转,人不用管。

注意: 1. 授权记录表格不直接显示上面这三个值,显示的是按到期日算出来的长期有效 / 生效中 / 已过期彩点;2. 授权页上没有"释放"按钮——提前收回的接口是有的,但界面只提供"编辑"和"删除",不要照着"点释放"去找;3. 偶尔能看到过了期还是生效中的行——带脱敏配置的授权采用严格撤销,引擎侧权限撤不掉就先不置终态、下一轮再试,这是有意的保守设计。

从工作台发起的简表单版。工作台 → 我的申请 → 发起申请 → 跨部门数据访问申请,填这几项:

参数名称描述
数据源 datasourceId申请的目标源。这个下拉是表单定义里写死的几个选项,不是动态拉取的数据源清单,换环境要改表单。
访问级别 accessLevel只有 只读 READ 一档,也是默认值;数据源类申请一律被归一成只读。
到期日 expireDate授权到期时间;到期自动回收。
申请事由 applyReason用途说明,留痕备查。

重要提示(演示 / 落地时的两个坑): 1. 首次同步只落申请记录、不立即发授权(平台在同一事务内插入后重查为空的特性),第二轮同步或定时对账器才建授权——要让授权立刻生效,需连做两次同步动作(最终一致);2. 删授权删不掉,是因为定时对账器会按历史流程实例重建;要真删,须先删对应的历史流程实例。

验证。 授权后,用数据方账号在自助分析查信贷 DWD,已登记为敏感列的身份证显示 330106********1953、手机号显示 158****4026;用它做 CREATE TABLE AS SELECT 落库,副本也是掩码(掩码写进去就回不来了,这一点与 3.5.2 的 ETL 提交人规则是同一回事)。而该表属主查同一列仍是明文——这不是矛盾,是按人判定的两个正确答案。


3.12 数据安全 · 操作审计

场景切入。 合规检查时被问到"上个月谁改过信贷源的授权、谁动过身份证列的脱敏规则",得拿得出记录。操作审计就是把这些安全相关的写操作自动记下来。

是什么。 操作审计把安全域里的敏感写操作——授权变更、脱敏配置变更、敏感识别执行、物理表回收——自动留痕,记下"谁、在什么时候、对什么、做了什么、成没成功"。它是纯查询页,页面上没有任何写操作,记录也删不掉。

为什么要用。 满足合规与可追溯的要求:谁改了哪条授权、谁把某个字段认定成敏感列、谁往免脱敏白名单里加了人,都要有据可查、倒查得回去。

注意: 它记的是安全配置的写操作,不是数据访问日志。谁在自助分析查了哪张表、导出了什么,不在这张表里——别按"能查到谁看过身份证列"去用它。

怎么做。

说明: 涉及该操作的功能权限:需要给角色分配操作审计的查看权限才能看到该页面;安全审计角色(security_auditor)负责此项。

  1. 在侧边导航栏进入 数据中台 → 数据安全 → 操作审计
  2. 用顶部的五个筛选条件圈定范围,点查询;点重置清空重来。
  3. 需要看原始报文时,点行尾的技术详情

筛选条件逐项。

筛选项怎么用
资源类型按大类圈范围,三档,见下表。留空为全部。
操作类型按动作圈范围,十二档,见下表。留空为全部。
操作人按操作人名称模糊匹配。
关键字入参摘要与操作详情的原文做模糊匹配,匹配到的是表名、对象名这类原始标识,不是列表上显示的中文动作名——搜"新增授权"会搜空,搜表名才有。
操作时间起止时间区间。取证时先用时间收窄,再叠加其它条件。

列表列。

说明
操作时间 / 操作人谁在什么时候做的。
资源类型 / 操作类型两个分类维度,带彩点区分,取值见下面两张表。
操作详情翻译成中文的"动作 + 成败 + 失败原因"。
入参摘要翻译成中文键值的关键入参;翻不动的原文交给技术详情弹窗。

资源类型三档。

取值记的是哪一类操作什么时候按它筛
权限访问授权的增删改、资源访问策略保存、权限申请的提交 / 发起 / 审批状态同步。查"谁改过授权""谁提过跨部门取数申请"。合规上最关心的一档。
数据保护安全等级、敏感类型、脱敏规则、敏感识别任务与识别结果、动态脱敏配置、脱敏白名单的增删改与执行。查"谁改过脱敏规则""谁把某个字段认定成敏感列""谁往免脱敏白名单里加了人"。
表模型目前只记一种动作:物理表回收查物理表是被谁删的。

注意: 两个覆盖缺口要心里有数:1. 静态脱敏任务的创建与执行不入审计——那是会改写落库数据的动作(见 3.7.3),目前不留安全审计痕迹;2. 表模型的其它增删改也不入审计,只挂了物理表回收这一个动作,是为了不改变既有审计口径而有意为之。

操作类型十二档。 这个值不是人工填的,是平台按被记录的操作自动打的标:

取值对应哪些动作什么时候按它筛
新增新增授权,以及新增安全级别 / 敏感类型 / 脱敏规则 / 识别任务 / 动态脱敏配置 / 脱敏白名单。库里量最大的一档。查"谁新配了一条授权、一条脱敏规则"。
修改上述各类对象的修改。查配置被谁改过。
删除上述各类对象的删除。查权限或脱敏配置被谁删了。
保存只有一处:保存资源访问策略(数据授权页的资源策略区)。很少用到。
授权见下方重要提示——这一档不是发生了授权。不要按字面理解。
确认确认敏感识别结果:把扫出来的候选敏感字段正式登记为敏感列。查敏感列是谁认下来的。
更新调整识别结果的敏感类型。与"修改"中文相近但来源不同,按"哪个接口"理解,别按字面理解。
执行执行敏感识别任务。查扫描任务是谁跑的。
提交提交权限申请(直接落申请单、不走流程的那条通道)。与"发起"配合看,能分清申请是从哪条通道进来的。
发起发起权限申请审批——权限中心页"提交申请"按钮走的就是这条。查跨部门取数申请是谁提的。
同步人工触发的权限申请审批状态对账。排查"审批完了但授权没下来"时看它。
回收物理表表模型的物理表回收:真删中心库的数据、不可回滚。查物理表被谁回收了。

重要提示: "授权"这一档目前几乎全是误报——命中它的只有一个只读的授权列表查询接口,库里已经积累了近百条。界面上刻意把它的操作详情标成"查询授权列表(只读)",就是为了避免合规岗把它读成一次真实的授权动作。真正的授权变更,请按新增 / 修改 / 删除 + 资源类型权限访问去查。

说明: 1. 删除类记录的入参往往只有一串主键,界面显示成"目标标识:xxx",看不出删的是哪张表的授权——取证时要配合操作时间与操作人一起看,必要时点技术详情看原文;2. 每 30 秒一轮的定时对账不产生审计记录,"同步"这一档记的只是人工触发的那些。

注意: 审计只覆盖安全访问与安全防护两类控制器的写方法(加上物理表回收),不改控制器代码即自动落日志;普通业务查询不在其中。

验证。 完成一次授权变更后,到操作审计按资源类型"权限访问" + 操作类型"新增"查,能查到对应的一条记录(操作人 / 时间 / 操作类型 / 操作详情);点技术详情能看到这次操作的原始入参。

治理工单:四类发布审批的统一台账

这个页面解决什么问题。 平台里的"发布"从来不是保存即生效——表模型发布、数据标准发布、指标发布、资产发布这四类动作,都先落一张工单,审批通过后才由平台去真正执行业务动作(建物理表、把数据元置为标准态、把指标 / 资产置为已发布)。治理工单页就是这四类工单的统一台账:提单人在这里跟踪自己的单,审批人在这里审、驳、看流转日志。它与操作审计同在数据中台 → 数据安全分区下——一个记安全配置的写操作,一个记发布动作的审批。

为什么要用。 发布类动作里有不可逆的(在库里建物理表),也有会立刻改变别人看到什么的(指标、资产上架)。工单化保证它们经过审批、留痕、可追溯,并把"谁批的、批语是什么、执行结果如何"钉在同一条记录上。

怎么做。

说明: 涉及该操作的功能权限:治理工单的查看;提交与撤回另需工单提交权限,审批需要审批权限,由治理审批角色(gov_approver)承担。提单人不能审自己的单。

  1. 在侧边导航栏进入 数据中台 → 数据安全 → 治理工单
  2. 切页签圈定范围(页面默认落在"我的申请")。
  3. 点行或点详情打开抽屉,看基础信息、申请理由、驳回原因、结果摘要与审批日志时间线。
  4. 审批人点通过(二次确认后由平台派发执行)或驳回(必填驳回原因)。
  5. 提单人在单还没被处理时可以撤回,改完重新提交。

三个页签。

页签列的是什么什么时候用
我的申请自己发起的全部工单,不分状态。页面默认落在这里。跟踪自己提的发布单走到哪了、要不要撤回。
待我审批设计意图是"待审批、且不是自己提的、且自己有权审"的工单。审批人处理待办。
全部管理员看全部工单;非管理员被收敛成只看本人发起的。管理员做全局巡检。

重要提示: "待我审批"页签当前不起过滤作用——界面传的页签值与后端认的对不上,于是落进兜底分支:非管理员在这里看到的和"我的申请"一模一样,管理员则看到全部工单(含已办结的)。别把这个页签当待办清单用;审批待办以 工作台 → 我的待办 为准,或在本页按状态"待审批"自行辨认。

说明: 非管理员点"全部"看到的也只是自己发起的单,这是有意的越权收敛(防止列举别人的工单),界面上没有提示,不是页面出错。

工单类型四档。 类型由发起动作自动决定,界面上不可自选:

类型审批通过后平台会做什么从哪里提出来
表模型发布在中心库真建物理表,把表模型置为标准态,并记一条发布落地记录。执行前先探测目标位置上有没有同名表:已存在就跳过建表、也不记落地记录。数据表管理页对设计完成的表点"发布"(见 3.3.2)。
指标发布把指标定义从未发布置为已发布。幂等,重复执行没有副作用。指标定义页点"发布"。
数据标准发布把数据元从草稿置为标准态。幂等。界面上没有入口,当前只能由管理员通过接口发起——数据元页上没有"发布"按钮。
资产发布把资产置为已发布。幂等。界面上没有入口(资产详情抽屉里那个"发布"是直接改字段、不走工单,见 3.9.2)。

注意: 表模型发布是四类里唯一会产生不可逆物理副作用的工单,审批要慎重,也不宜无人值守批量跑。"已存在就跳过建表"这条保护是为了防止把别人已有的表误认成平台建的——否则日后一次"回收物理表"就成了无预警地删别人的数据。

说明: 执行失败会整笔回滚、工单留在待审批,不会出现"已通过但没生效"的半吊子状态。执行以系统身份跑,不受审批人个人数据源权限的限制。

注意: 少数情况下类型列会显示成"其他"(原始码放在悬停提示里)。提交接口对类型不做白名单校验,接口冒烟或外部调用写进来的非标类型就长这样;这类工单审批通过时找不到执行器,只置状态、不执行任何业务动作。

工单状态四档。

状态含义这个状态下能做什么
待审批刚提交、等人处理。只有这个状态能被通过 / 驳回 / 撤回,其余状态上做这三个动作都会报"工单状态不允许该操作"。同一个业务对象已有待审批工单时不能重复提交,会报"该对象已有待审批的工单,请勿重复提交"。
已通过审批人点了通过、且业务动作执行成功,执行结果写在"结果摘要"里。终态。
已驳回审批人驳回,驳回原因必填并显示在详情里,不执行任何业务动作。终态。改完重新提交。
已撤回提单人本人撤回(只有本人、且单还在待审批时可撤)。终态。需重新提交。

审批日志时间线。 详情抽屉底部按时间列出这条工单的流转:

动作什么时候写入备注里放什么
SUBMIT提交工单时申请理由
APPROVE审批通过时审批意见
REJECT驳回时驳回原因
CANCEL提单人撤回时

注意: 时间线上的动作当前直接显示英文码(SUBMIT / APPROVE / REJECT / CANCEL),不是中文,照上表对着看即可。

注意: 持有指标发布权限的角色当前没有被授予治理工单的查看权限,提交后在左侧看不到"治理工单"菜单,既跟踪不了也撤不回自己的单。要让这类角色能自助跟单,需要管理员在角色菜单里补上治理工单的查看权限。

验证。 提一张表模型发布工单,在"我的申请"里能看到它处于待审批;换审批人账号点通过后,状态变为已通过、结果摘要里有执行结果,到自助分析或数据地图能查到这张物理表已存在。


3.13 使用指南:一条数据的一生(数据中台段)

前面把功能拆开讲清楚了,这一节把它们焊回一条真实业务线,读者跑完就"从 0 通了第一个数仓任务"。

背景。 某企业做信贷风控,需要把外部信贷库里的申请人数据接进中台数仓、治理好(身份证 / 手机号脱敏、跑质量),供上层决策引擎建模;同时每天推来的黑名单表只需搬进来直查。数据管理者负责规划与审批,数据开发工程师负责建模与加工。要产出三张表:贴源层 ods_credit_applicant_df、明细层 dwd_credit_applicant_di、汇总层 dws_credit_applicant_feature_df

准备。 数据管理者对中心库有 OWNER;数据开发工程师对外部信贷源无权;已准备好一张含身份证、手机号字段的申请人源表(敏感识别按字段名 / 编码 / 描述命中,与字段数据类型无关)。

操作步骤(严格按作业顺序):

① 规划(数据管理者)。 涉及功能权限:主题 / 分层的新建。建主题域"信贷风控 credit_risk",建 ODS / DWD / DWS 三层并配 ods_ / dwd_ / dws_ 前缀,常用词根(applicant / credit / overdue / income)入库,锁定列式中心库为唯一落地库。

② 接入(数据管理者)。 涉及功能权限:数据源的新建。注册外部信贷源,点 测试连接 通过后保存;设可见性为部门内(业务账号看不到该源)。

③ 两条流分叉。 黑名单表走 同步直用:开发方 OWNER 在自助分析里手写 CREATE TABLE 预建目标表 → 建单表同步任务搬数 → 资产扫描入目录 → 直接 SELECT 查。申请人主数据走 建模流,进入第 ④ 步。

④ 建模(数据开发工程师)。 涉及功能权限:数据表的新建。按 ODS→DWD→DWS 设计逻辑模型:字段配类型 / 主键 / 标准化标签,id_card / phone 绑数据元、声明来源表,看 DDL 预览、过命名校验 → 发布走模型表发布工单 → 数据管理者审批 → 执行器建三张物理表(状态 standard)。

注意: 键模型由 table_type 标签决定、与分层解耦(标签含"唯一键 / 主键 / 更新"才得唯一键模型,否则为明细模型);本案例三张表都是明细模型。其中 DWD / DWS 由 SQL 加工任务以 INSERT OVERWRITE 覆盖写装载,重跑不翻倍;ODS 由跨源同步贴源装载,须按 3.5.1 的幂等前提(跨源同步的"覆盖写"并不真正清空,重跑仍是追加,故明细模型下要么用唯一键模型去重、要么改由 SQL 覆盖写装载)避免数据翻倍。提单人(开发方)不能审自己的单,须由数据管理方审批。

⑤ 加工调度(数据开发工程师)。 涉及功能权限:同步 / 任务的新建与执行。建一个跨源同步把源表贴源同步进 ODS;建两个 SQL 任务做 ODS→DWD(去重 / 类型规整 / 标准化)、DWD→DWS(按申请人汇总);编排成任务流并给节点中文名;挂定时作业每天 02:30 跑批。运行后 SQL 被自动解析出表级血缘。

⑥ 治理(数据开发工程师 / 管理员)。 涉及功能权限:数据元、脱敏、质量的新建。建数据元"身份证号码""手机号"并绑到 DWD 的 id_card / phone;跑敏感识别自动命中;配动态脱敏(引擎级、按人,身份证前 6 后 4、手机号前 3 后 4)并做一次静态脱敏落库副本;配三条质量规则(月收入非空 ≥ 99%、申请人 ID 唯一、逾期次数值域 0–50)跑校验出报告。

⑦ 编目(资产治理角色)。 扫描入池 + 元数据登记 + 自动归层,DWS 资产发布为 PUBLISHED,在数据地图可看目录 / 详情 / 血缘,可收藏订阅。

⑧ 跨部门取数(数据开发工程师)。 涉及功能权限:数据申请的发起与审批。他对信贷源无权 → 走数据申请工单 → 数据管理者审批 → 自动授 READ → 他查 DWD,已登记为敏感列的身份证 / 手机号呈掩码。若数据管理者想更精确地控制"给他看哪几列",也可以反过来走 3.7.4 的属主分享,在分享时逐列配规则。

验证结果(闭环收尾)。 数据开发工程师账号在自助分析查 DWD,id_card 显示 330106********1953phone 显示 158****4026;用它 CREATE TABLE AS SELECT 落库,副本同样掩码;定时作业每天自动刷新;数据地图能按主题域 / 分层找到这三张表并看到血缘。至此,数仓里有了干净、及时、治理好、可发现、按人脱敏的数据,交给决策引擎去建指标 / 模型 / 规则 / 打分(属决策引擎域,见后续章节)。

说明: 上述表名、参数、脱敏位数、Cron 时刻等仅适用于本节举例,不代表其他规范或国家标准。实际使用时,数据元定义、脱敏强度、值域范围等请以官方专业标准规范文档为准。