深色模式
第三章 数据中台:把数据接进来、治理好、变成资产
一家做风控的企业,数据往往散落在十几个业务系统里:信贷申请在一个库、征信回填在另一个库、黑名单是别人每天推来的一张表。想拿这些数据训练风控模型,第一步不是写算法,而是先把数据"接进来、洗干净、管起来、能被找到"。数据中台就是干这件事的底座——它是风控中台的数据接入、治理与资产化底层,负责把原始数据变成"干净、及时、治理好、可发现、按人脱敏"的可用数据,再交给上层的决策引擎去建指标、跑模型、出分数。
通俗来讲,数据中台就是企业数据的"总仓库 + 加工车间 + 货架目录"三件套:仓库负责收货(数据源接入)、车间负责分层加工(建模与 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 查哪个源,都从这里登记过的数据源下拉里选。
为什么要用。 它是数据中台一切能力的起点。更重要的是它带一个"先验货再收货"的动作——测试连接:配好连接信息后当场探测能不能连通,把"账号密码错、端口不通、库名写错"这类问题挡在配置阶段,而不是等到半夜跑同步、跑建表时才在运行期暴露。如果跳过测试连接直接保存,后续同步 / 建表任务很可能在运行期才报连不上,排查成本高得多。
怎么做。
说明: 涉及该操作的功能权限:数据源的查看(能看到列表本身)与新建;测试连接、编辑、删除各是一条独立的功能权限,没配到的按钮不显示。可见性配置复用"编辑"权限,没有编辑权限就看不到那个入口。
- 打开侧边导航栏,进入 数据中台 → 数据开发 → 数据源管理,展示数据源列表;点击左上角 新建数据源 按钮,展示编辑页面。
- 选择 数据源类型。类型一选定,表单会按类型带出默认端口与驱动类,并决定要不要显示 Schema、FE 端口 / FE 节点 这些附加输入项(逐项说明见下表)。
- 填连接信息:数据源名称、主机地址、端口、数据库名(部分类型还要填 Schema)、用户名、密码。端口与驱动类留空即按类型默认值走。
- 点击 测试连接 按钮,等待返回结果。
- 连通后点击 确定 保存。
说明: 表单里没有"归属部门"这一项。数据源的归属部门取创建人当时所在的部门,由系统自动写入,界面上既选不了、事后也改不了——它决定了谁天然是这条源的属主(见 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",硬存下来也连不通。对外介绍时不要把它们当已交付能力;确需接入,得先把对应驱动补进平台的驱动模块并重新部署,再来配这条源。
说明: 只有分析型数仓这一类源受平台字段级安全(引擎级脱敏、按人授权)管控;外部纳管的业务库一概不管——接进来只做取数,不改写其中数据,也不在其上做列脱敏。这是产品的既定边界,不是配置问题。
测试连接实际做三件事,任何一步不过都判失败:
- 加载该类型的数据库驱动——驱动缺失直接报"缺少驱动: xxx",后面两步不再走;
- 拿填写的账号口令真发起一次连接,登录超时 5 秒;
- 类型是分析型数仓时,再打一次前端节点的健康检查接口(超时 3 秒)。库连上了但这一步不通,整体仍判失败——这种情况多半是 FE 端口 / FE 节点填错了。
连接参数:
| 参数名称 | 描述 |
|---|---|
| 数据源名称 | 列表与各处下拉里显示的名字,列表可按它模糊筛。 |
| 数据源类型 | 见上表;决定连接串拼法、默认端口、默认驱动类与附加输入项。 |
| 主机地址 / 端口 | 端口留空按类型默认值填。 |
| 数据库名 | 要连的那个库。 |
| Schema | 只有部分类型显示(PostgreSQL / Oracle / Hive / 达梦),测试连接时会切到该 Schema。 |
| 用户名 / 密码 | 连接凭据。密码不在列表和详情里明文回显;编辑时留空表示沿用原密码。 |
| 驱动类 | 留空按类型默认驱动类填,一般不需要动。 |
| 状态 | 见下表。 |
| 备注 | 自由文本,写清这条源是干什么用的,方便别人认。 |
注意: 数据库连接串由后端按"类型 + 主机 + 端口 + 库名"每次重新拼,不接受手工填写。要连一个非标准形态的库(比如必须在连接串上带一串参数),当前版本做不到。
状态逐项说明。
| 取值 | 选了会发生什么 | 什么时候用 |
|---|---|---|
| 正常 | 默认值。这条源出现在建表、同步、自助分析各处的数据源下拉里,可以列库、列表、执行语句。 | 正常接入、允许使用的源。 |
| 停用 | 跨模块取数据源清单和详情时被直接过滤掉,各处下拉里选不到;按 id 访问也会被判"不存在或不可用"而拒绝。记录仍留在数据源管理列表里,随时可以切回正常。 | 源要下线、或临时不让人用,但又不想删记录的时候——直接删源会把它上面配的共享规则一并删掉。 |
其他操作。
- 编辑: 密码留空表示沿用原密码,不必每次重填;端口、驱动类留空按类型默认值回填。
- 删除 / 批量删除: 只有这条源的属主能删(见 3.1.2)。删源会连带删掉它全部的共享规则,不可恢复——只是想让人暂时用不了,请改用"停用"。
- 列表筛选: 支持按名称(模糊)、类型、主机地址(模糊)、状态四个条件筛。
数据源目前只有"物理数据源"一层。 一个数据源就是一条真实的连接信息——某个地址上的某个库(填类型、连接串、账号)。
说明(规划中,勿当已交付): 设计蓝图里还规划了逻辑数据源——给物理源起"用户库""交易库"这类业务别名,让业务人记别名、系统连物理源;以及批量注册 / 批量修改(一次接入同类的一批库)。这两项当前版本尚未实现,对外介绍时不要按已交付对待。
验证。 保存后返回列表,新数据源出现在列表中、状态为"正常",即表示接入成功;后续在建表、同步、自助分析的数据源下拉里都能选到它。
注意: 只读的业务需求方角色看不到任何数据源下拉,这是设计使然的隔离,不是缺陷——需要用数据请走 3.11 的跨部门申请。
3.1.2 数据源可见性与源级授权
场景切入。 数据管理者把一个信贷库接进来了,但不希望全公司都能看到它——只想让风控团队可见,别的部门要用得先申请。这就是可见性与源级授权要控制的。
是什么。 可见性配置解决一个问题:除属主之外,还有谁能用到这条源。它是数据资产可见性与跨部门申请的总控开关——把 OWNER / READ 两级授权落到具体的数据源上。
为什么要用。 这是全平台权限模型的落点——控制粒度在资源层。数据资产地图、表详情、血缘图能不能显示内容,主控就在这里:对数据源没有源级授权,数据地图 / 详情 / 血缘会全空。 反过来,授权配得越精确,越能做到"用数据的人只看到该看的源",满足最小权限。
怎么做。
说明: 具有该操作的角色:该数据源的 OWNER(超级管理员 / 租户管理员、与创建部门相同的成员、创建人本人)。
- 在 数据中台 → 数据开发 → 数据源管理 列表中,对目标源点行内 ··· → 可见性配置。
- 弹窗里只有三块:全租户可见 开关、共享角色、共享用户,按需配置(逐项说明见下表)。
- 点 确定 保存。
三种共享方式逐项说明。
| 共享方式 | 配了会发生什么 | 什么时候用 |
|---|---|---|
| 全租户可见 | 写一条通配规则。租户内任何登录用户对这条源都判为只读:能在各处下拉里选到它、能在数据地图看到它下面的表、能在查询工作台读它,但改不了配置、改不了可见性、也删不掉。 | 人人都该能读的公共源,比如公共维表库、公共字典库。 |
| 共享角色 | 按角色逐条写规则,持有该角色的用户对这条源判为只读。下拉可搜索选择,也可以直接手输角色标识,回车或英文逗号分隔多个。 | 按岗位放开一批人,比如把信贷库放给风控建模岗。 |
| 共享用户 | 按用户名或用户 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"这个主题域下,以后建的模型都落在这个框架里。
为什么要用。 先立规矩再建模。表建到几百张时,没有主题域就只能靠表名前缀猜业务归属;有了主题域,找数的人能顺着树一层层点下去,建模的人也知道新表该往哪挂。
怎么做。
说明: 涉及该操作的功能权限:主题的查看、新建、编辑、删除四条。
- 打开侧边导航栏,进入 数据中台 → 数据模型 → 主题域,展示主题域树。
- 建一级主题点树顶部的 新增根主题;建下级则在树上选中父节点,点 新增子主题。父级由入口决定——抽屉里的"挂载父主题"是只读回显,不能在表单里改挂到别处。
- 填写主题信息并保存。
| 参数名称 | 描述 |
|---|---|
| 主题名称 | 中文业务名,树上显示的就是它。 |
| 主题编码 | 英文标识,全局唯一,重复保存会被拦下。 |
| 主题缩写 | 短英文,分层表名规则里的"主题缩写"占位符取的就是它;留空时依次退回主题编码、主题名。 |
| 负责人 | 自由文本输入框,不是用户选择器——填谁都行,只作责任标识,不产生任何权限,也不参与审批路由。 |
| 发布状态 | 见下表。 |
| 排序 | 数字,决定同级节点在树上的先后。页面上没有上移 / 下移按钮,调顺序就是改这个数字。 |
| 描述 | 写业务背景、范围、这个域装什么,供别人理解。 |
注意: 唯一性校验加在主题编码上,不在名称上——两个同名主题是能建出来的,两个同编码的不行。取名重复不会有任何提示,建的时候自己留意。
发布状态逐项说明。
| 取值 | 选了会发生什么 | 什么时候用 |
|---|---|---|
| 未发布 | 默认值。列表与详情上显示灰色"未发布"标记。 | 主题刚划出来、范围还在讨论。 |
| 已发布 | 显示绿色"已发布"标记。 | 主题定稿,可以开始往下挂表。 |
重要提示: 主题域的发布状态是纯展示标记,平台没有任何逻辑消费它。未发布的主题照样出现在建表页的"主题归属"下拉里、照样能挂表。不要理解成"没发布的主题不能用"。
层级逐项说明。
| 层级 | 怎么建 | 什么时候用 |
|---|---|---|
| 一级(根主题) | 树顶部的"新增根主题"。 | 划一个大的业务域,比如信贷风控、反欺诈。 |
| 二级(子主题) | 在根主题上点"新增子主题"。 | 域内再分小类,比如申请、征信、贷后。 |
| 三级 | 在二级主题上再点"新增子主题";保存时系统会同时检查自挂父级与循环引用。 | 最细一层。 |
注意: 到三级为止,再往下建会报"主题域当前仅支持三级"。另外,建表页的"主题归属"下拉不要求必须选到末级,根主题同样能选——要不要强制挂到末级,靠团队自己的约定。
重要提示: 删除主题是递归的——删一个节点会连它下面所有子孙主题一起删掉,操作前先展开看清楚。而且后端不检查这个主题下面有没有挂表:主题删了,挂在它下面的表模型既不会被拦、也不会被清理,那些表的主题归属会指向一个已经不存在的主题,在资产地图里就变成"找不到归属"。要删已经有表在用的主题,先把表改挂到别处。
其他操作。 刷新树、展开 / 折叠、选中节点看详情。页面上没有"编辑介绍""关联维度"这类单独入口——介绍就是编辑里的描述字段,维度定义在维度设计页维护(见 3.3.3)。
验证。 新建后主题域出现在左侧主题树对应层级;新建表模型时,"主题归属"下拉里能选到它。
3.2.2 分层设计(ODS / DWD / DWS / DIM / ADS)
场景切入。 主题域画好了,但同一个主题里的表还是有"生熟"之分:刚搬进来的原始数据、清洗过的明细、按维度汇总的宽表,不能混在一起。分层设计就是给它们分楼层。
是什么。 数仓分层: 按加工深度把数仓切成几层——贴源层 ODS(原样落业务数据)、明细层 DWD(清洗规整后的明细)、汇总层 DWS(按维度汇总的宽表);设计上还有维度层 DIM、应用层 ADS。分层配置页面除了维护这些层本身,还给每层挂两套规则:表名规则(建模时按它拼表名,保存模型与发布建表时按它判违规)和表抓取规则(给没走建模流、直接在库里建出来的表做资产自动归层)。
为什么要用。 分层是数仓规范化的骨架。有点像仓库分楼层:一楼收原货(ODS)、二楼分拣(DWD)、三楼装箱上架(DWS),每层门口贴着"只收带某某前缀的货"。两套规则各管一头——表名规则管住"我们自己建的表得守规矩",抓取规则管住"别人直接建的表也能被正确归位"。
怎么做。
说明: 涉及该操作的功能权限:分层的查看、新建、编辑、删除四条。
- 进入 数据中台 → 数据模型 → 分层配置。列表分 系统分层 与 自定义分层 两段展示,每行右侧的彩点显示已启用 / 已禁用。
- 点击 新增分层,抽屉里有三个页签:基础配置、表名规则、表抓取规则。
- 三个页签按下文逐项填完,保存。
基础配置页签参数:
| 参数名称 | 描述 |
|---|---|
| 分层类型 | 只读回显,系统分层 / 自定义分层,判定口径见下文。 |
| 分层编码 | 英文标识,是这层的身份;被判为系统分层的行,这个输入框是禁用的。 |
| 分层名称 / 分层别名 | 中文名与展示别名。 |
| 启用 | 见下表。 |
| 命名规则预览 | 只读,按"表名规则"页签配的内容实时拼出这层的表名期望格式,配规则时对着它看即可。 |
| 分层说明 / 备注 | 写这层收什么样的表、加工到什么程度。 |
说明: 抽屉里没有"是否暴露"开关,也没有排序号输入框。库里虽然留了这两列,但界面不录入:暴露标识没有任何功能消费它;排序号会影响自动归层的优先级,受影响的后果见下文归层顺序那条提示。
启用逐项说明。
| 取值 | 选了会发生什么 | 什么时候用 |
|---|---|---|
| 是(启用) | 默认值。资产自动归层时这一层参与匹配。 | 正常使用的层。 |
| 否(停用) | 资产自动归层遍历时跳过这一层,它的抓取规则不再生效。 | 某层暂时不用、但规则想留着,过阵子还要开回来。 |
注意: 停用不等于建表时选不到——建表页拉分层下拉不带启用条件,停用的分层照样出现在"分层"下拉里、照样能选来建表。停用只影响资产自动归层这一件事。另外注意这里的开关方向与数据源状态相反:分层是"启用 / 停用",数据源是"正常 / 停用"。
系统分层与自定义分层。
| 分类 | 有什么差别 | 什么时候是这一类 |
|---|---|---|
| 系统分层 | 列在列表上半段;分层编码输入框禁用、行上不给删除按钮和勾选框,只能改名称、别名和规则。 | 平台预置的标准层。 |
| 自定义分层 | 列在下半段;编码可改、可删、可批量删(编码撞上保留词的除外,见下方提示)。 | 团队自己加的层——新建的分层默认都属于这一类。 |
重要提示: 是不是系统分层,判定分两套口径,别混为一谈。列表分段只看内置标记:自己新建的分层一律列在"自定义分层"段里,带勾选框、带删除按钮。但抽屉里的"分层类型"回显、分层编码输入框禁用、以及删除拦截,另看一条口径——分层编码小写后落在
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 逐层建表:
说明: 涉及该操作的功能权限:表模型的查看、新建、编辑、删除,字段的查看与编辑,以及中心库配置。建议先建好贴源层,再往上加工。
- 进入 数据中台 → 数据模型 → 表模型。左侧是主题树,右侧是表模型列表,支持关键词搜索与状态筛选(未发布 / 已发布)。
- 点击 新建表,进入两步向导。
- 步骤① 表信息:选主题归属、分层、资源目录,填表中文名、表名主体与表名后缀,生成的表名会实时回显。
- 步骤② 字段配置:选表类型(键模型),逐列添加字段。
- 保存成草案。之后随时可以点 预览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 建表发布工单(审批 → 执行器建物理表)
场景切入。 设计稿画好了,但在库里真建一张表是不可逆的动作,不能谁都随手就建。平台的做法是:发布走一张工单,让审批人过一眼,通过了才由执行器落库。
是什么。 设计好的模型不是"保存即建表"。点"提交发布审批"生成一张表模型发布工单,审批人在治理工单页面处理;审批通过后由执行器在目标库真正建表,并把表模型状态置为已发布。
为什么要用。 在库里建物理表是不可逆操作,工单化保证它经过审批、留痕、可追溯——建表、数据元发布、指标发布、资产发布都会各自生成一张发布工单,审批前一律不生效。
怎么做。
说明: 涉及该操作的功能权限:提交由建模人发起(工单提交权限),审批需要工单的审批权限。审批人当前的实际口径见下方提示。
- 在 表模型 列表里,对一张未发布的表点 提交发布审批,填申请理由,系统生成一张表模型发布工单。
- 审批人进入 数据中台 → 数据安全 → 治理工单,在 待我审批 页签打开这张单,看申请理由与工单详情。
- 点 通过(二次确认后系统立刻派发执行器建表)或 驳回(驳回原因必填)。
- 建表成功后,表模型状态变为已发布;申请人可在 我的申请 页签看到结果与执行摘要。
审批通过时,执行器按顺序做四件事:
- 先探测目标库里有没有同名表;
- 没有就下发建表语句(刻意不带"不存在才创建",撞名要显式暴露出来,而不是悄悄跳过);
- 把表模型状态置为已发布,并且只有确实是这一次建出来的表,才登记"发布落地记录";
- 把中心库里对应的派生资产标为已发布。
这四步里任何一步失败都会抛错并整笔回滚,工单不会变成已通过——所以看到"已通过",就意味着表真的建出来了。
还有一步在这四步之外:给建模人授引擎侧读权限。 表建出来之后,系统会把这张表的读权限授给建模人在引擎里的账号(只对平台这次真建出来的表授,挂接他人既有表时不授)。这一步排在工单事务提交之后单独跑,而且失败了只记日志、不报错——因为建表语句已经落库、回滚不了,不能让授权失败把整张工单拖回滚,留下"表已建出来但记录没写"的孤儿表。
注意: 正因为如此,工单显示"已通过"不等于引擎侧授权一定成功。常见的失败原因是建模人在中台数仓里的账号还没就绪。发布之后属主自己查一下这张表,若被拒绝访问,请联系管理员补授,不必重新走工单。
说明: 建表执行由系统以超级管理员身份跑,审批人本人对目标库有没有权限,不影响建表成败。
重要提示: 如果目标库里已经存在同名表,执行器不建表,只把模型挂接上去并置为已发布,工单的执行结果摘要里会写明"本次未执行建表,仅挂接"。这类表因为没有平台建表记录,在平台内不可回收(见下文)。发布前先确认库里没有同名表,能省掉很多解释成本。
工单状态逐项说明。
| 状态 | 含义 | 这时能做什么 |
|---|---|---|
| 待审批 | 刚提交,还没人处理。 | 只有这个状态的单能被通过、驳回、撤回。 |
| 已通过 | 审批人点了通过、且执行器执行成功。记下审批人、办结时间和执行结果摘要。 | 只能看。 |
| 已驳回 | 审批人点了驳回并填了原因。表模型仍是未发布。 | 建模人按驳回原因改完设计,可以再提一次。 |
| 已撤回 | 申请人自己撤的。 | 改完可以重新提交。只能撤自己发起、且还在待审批的单。 |
治理工单的三个页签:
| 页签 | 看到什么 |
|---|---|
| 我的申请 | 只列自己发起的单,行上有"撤回"按钮。 |
| 待我审批 | 用于找待办;"通过""驳回"两个按钮只在这个页签里出现。 |
| 全部 | 管理员看全平台的单;非管理员在这里仍然只看得到自己发起的(防止横向列举别人的单)。在这个页签里看到待办单也没法直接批,得回"待我审批"。 |
注意(当前版本限制): 建表工单的审批在非超管手里是走不通的:"待我审批"页签的查询口径前后端不一致,非管理员打开它,看到的其实是自己发起的单,不是等自己审的单。结果是——新提交的建表工单当前只有超级管理员能审批,即使把治理审批角色配给了人也一样。这是已知问题,修复前请安排超管审批建表工单。
注意: 提单人不能审自己的单,避免自审自批;同一个对象已经有一张待审批的同类型工单时,再提交会被拒("该对象已有待审批的工单,请勿重复提交")。
表模型状态逐项说明。 表模型的新建 / 编辑抽屉里没有状态字段——状态只由"提交发布审批 → 审批通过"和"取消发布"这两个动作改:
| 状态 | 处于这个状态时是什么样 | 什么时候是它 |
|---|---|---|
| 未发布(草案) | 新建表模型的默认状态。可编辑、可删除,行上显示"提交发布审批"。物理表还不存在。 | 设计阶段,或取消发布之后。 |
| 已发布 | 建表工单审批通过、执行器建表成功后自动置上。行上的提交按钮换成"取消发布",模型不能直接删;中心库里的同名派生资产同时被标为已发布。 | 物理表已落地,可以开始加工和被消费。 |
重要提示: 关于已发布的表,有三件事和直觉不同,务必记住:①编辑一张已发布的表不会把状态退回草案,也没有版本号递增——表模型没有版本这个概念;②改了字段不会去改物理表——重新发布时执行器探测到同名表已存在就跳过建表,库里的表结构还是老的;③因此已发布的表要改结构,得先把库里的物理表处理掉,再重新走一遍发布。日常小改(描述、备注)直接编辑即可,涉及字段增删改的按这条来。
发布之后的三个动作:
| 动作 | 会发生什么 | 什么时候用 |
|---|---|---|
| 取消发布 | 只把状态退回未发布、把派生资产标为已下线。不删物理表、不清发布落地记录。 | 要改结构、或要删模型之前的第一步。 |
| 回收物理表 | 到目标库把这张物理表删掉。 | 见下方提示,当前基本用不上。 |
| 删除模型 | 删掉设计稿。已发布的表禁止直接删,必须先取消发布;删的时候若这张表有平台建表记录,会弹二次确认。 | 这张表彻底不要了。 |
重要提示: 删除模型时物理表按设计保留,但模型一删,平台内就永久失去了回收这张表的路径(平台只认自己的建表记录)。要彻底清掉一张平台建出来的表,顺序是:取消发布 → 回收物理表 → 删除模型。顺序反了,库里会留下一张没人管的表。
注意: "回收物理表"按钮受一条独立的功能权限控制,没配到的账号看不到它;更关键的是后端有一个默认关闭的总开关——开关关着时,按钮点下去只会提示"物理表回收功能未启用"。即便管理员把开关打开,也仍要求"已下线 + 有平台建表记录 + 对落地数据源是属主"三条同时成立才让删。当前版本要删物理表,请由数据库管理员在库里操作。
表的业务信息在哪改。 表模型页只管设计(分层、主题、表名、字段);表的业务属性——生命周期、资产目录、业务描述等——在 数据中台 → 数据资产 → 表详情 → 编辑业务信息 里改(见 3.9.1)。其中生命周期逐项如下:
| 取值 | 选了会发生什么 | 什么时候用 |
|---|---|---|
| 长期 | 资产地图的表卡片上多一个"长期"标签。 | 长期保留的核心表。 |
| 月度 / 季度 / 年度 | 卡片上分别显示"月度""季度""年度"标签。 | 按月 / 季 / 年滚动保留的表,给用数的人一个保留周期的预期。 |
| 临时 | 卡片上显示"临时"标签。 | 一次性、用完即弃的表。 |
| 未设置 | 卡片上不加生命周期标签。 | 默认值。 |
重要提示: 生命周期当前是纯标签——平台不会因为选了"月度"就按月清理或归档数据,它只影响资产卡片上显示的那个标签。到期清理要自己配调度任务去做(见 3.5.3)。
验证。 工单状态变为已通过、执行摘要显示建表成功后,到自助分析或数据地图查这张表,物理表已存在、表模型状态为"已发布"。
3.3.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 建好。
- 打开侧边导航栏,进 数据中台 > 数据开发 > 任务开发,点击 新建——直接进入任务编辑器,不需要先存一次。
- 在编辑器左侧的 基础信息 栏填 标准名称、简称、中文解释,选 任务类型 为"离线同步任务"(类型一选定,右侧的配置面板随之切换)。
- 配置面板分两步。第一步 源端配置: 选源数据源(纳管数据源或本地文件),再选库 / 模式 / 表,拉出源字段;只想搬源表的一部分数据时,填下面的 业务过滤条件。
- 同一步里的 抽取设置: 选抽取模式(全量 / 增量);选了增量,再配起止字段、比较符、参数与回写策略。
- 点"下一步"进第二步 目标端配置: 选目标数据源、目标表与写入规则;目标类型支持分区时再配分区。
- 点"进入字段映射",在 字段映射 页签里逐行确认:同名字段自动匹配、类型自动转换,按需把取值方式改成表达式。
- 点右上角 保存(或 保存并关闭)。想立刻验证就回列表点 运行;要每天自动跑,点 新建计划(见 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 任务的语句会被自动解析成表级血缘,把数据流转关系沉淀下来,后续变更影响分析、故障定位都靠它。
怎么做。
说明: 涉及该操作的功能权限:任务与编排的新建与执行;进画布还需要节点的查看权限。
- 在 数据中台 > 数据开发 > 任务开发 新建 SQL 任务 ①:ODS → DWD(去重、类型规整、标准化)。
- 新建 SQL 任务 ②:DWD → DWS(按维度汇总,如按申请人汇总)。
- 到 数据中台 > 数据开发 > 任务编排 新建一条编排,填标准名称、简称,选 编排类型,保存。
- 点 设计 进画布:拖一个开始节点定义入参 → 拖两个任务节点分别挂上前面两个任务 → 拖结束节点 → 依次连线,给每个节点起中文名。
- 逐个节点配输入映射、输出映射与执行策略,保存。
- 回列表点 发布 固化当前版本,再点 运行 手动跑一次验证。
重要提示(顺序不能反): 引擎只认已发布的版本,画布上的保存只是草稿。一条从没发布过的编排点"运行"会直接报"任务流未发布";画布改完只保存不发布,手动运行与定时调度跑的都还是上一个发布版本——不是没生效,是压根没读到新版本。所以验证顺序永远是"先发布、再运行"。画布顶部在有未发布改动时会挂一条提示条,看到它就说明当前跑的不是眼前这张图。
任务编排页上有哪些操作、各自干什么:
| 操作 | 作用 | 说明 |
|---|---|---|
| 新建 / 编辑 | 维护编排本体:标准名称、简称、编排类型、中文解释、状态、备注。 | 改的是"这条编排是什么",不涉及节点。 |
| 设计 | 进画布拖节点、连边、配节点的输入输出绑定与执行策略。 | 链路长什么样全在这里定。 |
| 运行 | 手动触发一次,立刻跑整条编排;有入参的会先弹框让填。 | 跑的是已发布版本,不是画布上的草稿;要验证刚改的图,先发布再运行。 |
| 发布 | 固化当前版本,此后手动运行与定时调度用的都是新版本。 | 画布改完只保存不发布,跑的还是老版本。 |
| 复制编排 | 按现有编排复制一份新的。 | 只有"编排模板"类型的行才有这一项,普通编排与数据管道的菜单里没有。 |
| 批量绑定调度 | 勾选多行,一次给多条编排建调度作业。 | 已绑定的自动跳过。不按编排类型过滤——编排模板也会被一起绑上,但它跑不起来,勾之前先看一眼类型列。 |
| 删除 | 删掉编排及其画布。 | 被别的编排当子编排引用的,删前先确认引用关系。 |
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 任务,用任务的提交人(任务定义的创建人)本人的中台库账号执行,不再共用一个数据源账号。这条规则有三个直接后果,配加工链路前必须知道:
- 提交人看不到明文的列,ETL 读到的也是掩码。 如果提交人对源表只是被分享者、且那几列配了脱敏,任务读出来的就是
330106********1953这样的值,写进下游表就是掩码,并且不可逆——下游表里再也拿不回原值。这是有意设计:没权看明文的人,不该借 ETL 把明文搬到自己名下。看到下游表里全是星号,先查提交人是谁,不要当成数据被写坏了。- 换个人跑,结果可能不一样。 同一段 SQL,由源表属主提交跑出来是明文,由被分享者提交跑出来是掩码。所以关键加工任务的提交人应当是对源表有完整视图的人(通常是属主);任务转手、人员调岗后要重新确认提交人。注意"提交人"取的是任务定义的创建人,既不是这次运行实例的创建人,也不是当前点按钮的人。
- 取不到提交人账号就直接失败,绝不退回共享账号。 提交人未开通中台库账号、账号被停用、或历史任务缺提交人记录时,任务会报错终止。修法是给该用户开通中台库账号,或重新保存一次任务以补齐提交人——不要试图绕过。
边界: 这条只管中台自建数仓。写向外部纳管数据源的任务仍走该数据源自己的账号(外部库的账号体系不在平台手里),其边界是资源层 OWNER / READ;执行前平台还会按真实身份校一次该数据源的权限,非属主直接失败。
验证。 编排发布之后手动触发一次,运行成功后在数据地图能看到由该流解析出的表级血缘(上下游连线);顺带核对一次产出表里敏感列的形态,确认与提交人的可见范围一致。
3.5.3 定时 ETL 调度与运行记录
场景切入。 加工链路能手动跑通了,但业务库的数据每天都在变,总不能每天早上手点一遍。要让数仓在上班前就自动刷新好,得把这条链路挂到定时计划上。
是什么。 定时 ETL 调度,就是在调度管理页把编排或任务挂到定时计划上自动跑批;运行记录则用来查每次跑批的节点级明细。
为什么要用。 数仓要每天定时刷新以保数据新鲜度;有了运行记录才能在出问题时快速定位到是哪个节点挂了、错在哪一句,而不是只知道"今天的数不对"。
怎么做。
说明: 涉及该操作的功能权限:定时作业的新建与查看,以及触发器的维护。
- 在 任务编排(或 任务开发)列表选中对象,点行内的 新建计划——系统会自动带上任务类型与关联对象,比在调度页手工填更不容易出错。
- 填 计划名称,按需填 执行参数(JSON)。
- 保存后回列表点这一行的 详情,配 Cron 表达式(可用 Cron 生成器)、错过执行、时区,把触发器状态置为正常。
- 回 任务开发 / 任务编排 列表确认"调度状态"为已调度、"下次运行时间"有值(调度管理页自己那一列显示的也是下次触发时刻,没配触发器时显示"未配置触发器")。
说明: 也可以在 数据中台 > 数据开发 > 调度管理 点 手工新增,但那样要自己选对象、自己确认关联对象 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 加工靠"昨天日期"取昨天的分区。把这些值写死在任务里,任务就只能跑对一次。
怎么做。
说明: 涉及该操作的功能权限:参数的查看;新增 / 修改 / 删除自定义参数还需要相应权限。系统参数是只读的——列表上它那一行的操作列直接显示"只读",既改不了也删不掉,后端同样拒绝。
- 打开 数据中台 > 数据开发 > 参数管理,先查一遍已有参数,别重复建。
- 要用系统参数的,直接记下它的参数标识,在任务配置里写成
${参数标识};增量同步的起止参数、回写参数则从下拉里直接选。 - 要建自己的参数,点 新增自定义参数,填参数名称、参数标识,选值类型、填参数值,保存。参数类型不用选——手工建的一律是"租户自定义参数"。
| 参数 | 说明 |
|---|---|
| 参数名称 | 中文名,列表和下拉里显示的就是它。 |
| 参数标识 | 引用时用的编码,任务配置里写 ${参数标识}。只能用字母、数字、下划线(点和短横也认),写成中文或带空格会导致占位符永远替换不上;不能与内置系统参数重名。建好后不要随意改,改了引用它的任务会失配。 |
| 参数类型 | 全局系统参数(平台内置、值现算、只读)/ 租户自定义参数(用户建、值固定)。它只是列表上的分类展示与筛选条件,新建时无从选择。 |
| 值类型 | 字符串 / 数字 / 日期 / 时间 / 时间戳(秒)/ 时间戳(毫秒)。决定了参数值被渲染成什么格式,配增量窗口时要与字段类型对得上——拿时间戳去比时间字段是比不出结果的。 |
| 参数值 | 自定义参数的固定值。系统参数这一列基本是空的(只有"上次执行时间"因为要存水位才有值)。 |
| 状态 | 停用的参数不参与运行时替换。 |
内置的系统参数一共 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 质检谓词,不用再手写校验条件;二是敏感识别扫描到这个字段时,会优先采用数据元上登记的敏感类型,不用再靠字段名去猜。举个例子:"证件类型"和"公民身份号码"常连用,只有把它们都定成数据元、建表时挂上去,口径才不会各写各的。
怎么做。
说明: 涉及该操作的功能权限:数据元的新建与查看;对数据元的操作需由管理员在角色上配好相应功能操作权限。
- 打开侧边导航栏,在 数据标准 分区打开 数据元,点击右上角 新增数据元,右侧滑出编辑抽屉,分 属性配置 与 规则配置 两个页签。
- 在 属性配置 页签按四张卡片(标识类 / 定义类 / 表示类 / 关系类)逐项填写,见下面各表。
- 切到 规则配置 页签,填敏感类型、状态、备注。
- 点保存。新建的数据元默认是未发布,要把它标成定稿口径,把状态改成已发布再保存一次。注意这一步只是口径管理上的表态:数据元的状态不控制任何候选下拉,草稿态的数据元在建表页的"绑定数据元"里照样选得到。
标识类属性:
| 参数名称 | 描述 |
|---|---|
| 中文名称 | 必填。业务上的叫法,如"身份证号码"。列表和各处下拉显示的就是它。 |
| 英文名称 | 必填。英文短名,如 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..200、n5,2。系统不做任何区分,照样把它当正则塞进 SQL,等价于要求字段值里含有 decimal5,4 这样的串,结果是整表非空行全部被判为脏数据。 | 不要这样填。长度和精度写在数据类型和建表字段上,不写在这里。 |
重要提示: 这个字段只有正则一种用法。系统里没有"格式类型 + 长度类型 + 小数位"三段结构,也没有任何一处会解析
anc4..200、n2、n5,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"各系统含义还不一样。词根、字典、分类这一组就是把这些也统一起来,最后再由"挂标准"把抽象的数据元真正落到物理字段上。
是什么。 这一组是数据标准的配套:词根是"中文词 ↔ 英文名 ↔ 英文缩写"的命名词块,作为落标检测的比对基准;数据字典是码表(分原始字典 / 标准字典);分类方案是给数据元归类的体系;资源目录是给表归置位置的目录树;挂标准则是把数据元真正绑到某张表的某个字段上。
为什么要用。 词根让英文命名有据可查、能被落标检测批量体检;标准字典把码值集中成一份,既能被多个数据元的值域引用,也能直接挂到字段上当质检的合法值集合;分类与资源目录给数据元和表提供检索、归置维度;而挂标准把抽象的数据元落到物理字段——只有落到字段,质检谓词和敏感识别才有抓手。
说明: 涉及该操作的功能权限:词根 / 字典 / 分类的新建与查看,以及数据表字段的编辑。
词根管理(数据中台 → 数据标准 → 词根管理)。 这个页面解决的问题是:把公司认可的命名词块登记成一张表,让"这个英文名合不合规"有客观的比对基准。数据元的落标检测和数据表的命名检测,都从这张表加载词根索引。
新增词根时右侧滑出抽屉,要填:
| 参数名称 | 描述 |
|---|---|
| 词根名称 | 必填。中文词,如"客户""逾期"。 |
| 词根编码 | 必填,全局唯一。通常写英文缩写,如 cust、overdue。 |
| 英文名称 | 选填。英文全称。 |
| 词根类型 | 必填,四选一,详见下表。 |
| 定义说明 | 选填。这个词根什么时候该用。 |
| 状态 | 未发布 / 已发布,口径同 3.6.1。 |
| 备注 | 选填。 |
词根类型(决定这条词根能给数据元的哪一段命名"背书"):
| 取值 | 是什么 / 选了会发生什么 | 什么时候用 |
|---|---|---|
| 对象类词 | 归入对象类词桶。数据元落标检测时,只有这个桶(外加自定义桶)里的词,才能让某条数据元的"对象类词"判为已落标。 | 业务实体名:客户 cust、账户 acct、贷款 loan、机构 org。 |
| 特性词 | 归入特性词桶,只对数据元的"特性词"这一段生效。 | 实体的属性名:开户 open、逾期 overdue、余额 balance、收入 income。 |
| 表示词 | 归入表示词桶,只对数据元的"表示词"这一段生效。 | 表示形式:金额 amount、日期 date、代码 code、号码 number。 |
| 自定义 | 下拉里的第四项(库里存的是 custom)。归入自定义桶,被当作对任意一段都合法的通用词——对象类词、特性词、表示词三段里任何一段命中它都算已落标。 | 限定词、修饰词这类不好归类的通用词块:本外币 ccy、当前 curr、历史 hist。 |
注意: 1. 一条词根的编码、英文名称、中文名称三路都会进索引,含下划线的还会再按段拆开分别登记(
cust_no会同时登记cust和no),所以数据元的三段词填中文或英文都有机会命中;2. 数据元的表示词是固定八项下拉、存的是英文值,要让落标检测过得去,词根库里得有对应的表示词类词根,且编码或英文名要跟下拉的英文值对得上(amount、date、code…);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)。
| 参数名称 | 描述 |
|---|---|
| 类型名称 | 如"手机号"。它同时是与数据元敏感属性对齐的匹配键(见下方命中优先级)。 |
| 识别对象 | 拿字段的哪一段文本去比对,三选一,见下表。 |
| 正则表达式 | 选填。要填关键字类正则,不是值格式正则,原因见下方重要提示。 |
| 安全等级 | 从安全等级页的清单里选一档,决定这类字段的分级标签。 |
| 默认脱敏规则 | 选填。命中这一类的字段默认套哪条脱敏规则。 |
| 备注 | 自由文本。 |
识别对象决定拿字段的哪一段文本去比对,三个取值:
| 取值 | 是什么 / 选了会发生什么 | 什么时候用 |
|---|---|---|
| 全部元数据(名称 + 编码 + 描述) | 把字段名、字段编码、字段描述三段文本拼成一个串再做包含匹配(不区分大小写),任一处露出线索都能命中。 | 缺省档,绝大多数场景用它——召回最高。 |
| 字段名称 + 编码 | 只拼"字段名 + 字段编码"匹配,忽略字段描述。 | 表的字段描述写得随意、常混入无关词导致误报时,收窄到命名上判。 |
| 字段描述 | 只拿"字段描述"一段文本匹配,忽略字段名与编码。 | 物理字段名是无意义缩写(f1、col_a)、但中文描述规范的老表。 |
重要提示(这一条最容易踩): 三个档位取的全是模型元数据文本,识别过程从不读取表里的任何一行数据。因此值格式正则(形如"以 1 开头的 11 位数字""18 位身份证结构")在识别链路上一条都不会命中。内置六类之所以照样能扫出来,靠的是代码内置的关键字兜底(
mobile/phone/tel、id_card/cert_no/identity/idno、bank_card/card_no/acct_no、ip/login_ip/source_ip、plate/license_plate/car_no),以及"字段文本里直接含类型名"这一条。自建敏感类型时,正则要写成关键字形式,如手机|mobile|phone。
注意: 正则在保存时只校验"语法能不能编译",不校验它像不像关键字正则——填成值格式正则不会报错,只会永远扫不出东西。另:字段描述为空时,"字段描述"这一档等于永不命中,同样没有提示。
命中优先级(三级,从高到低)。 同一个字段可能有多条线索,系统按这个顺序判:
- 字段已绑数据元、且数据元上写了敏感属性 → 直接按这个属性名去找同名敏感类型,命中就采用,不再走正则和关键字。数据标准已落标的表,识别准确率主要靠这一条。
- 本敏感类型填了正则 → 在"识别对象"选出的元数据文本上做部分匹配(不区分大小写),命中即算这一类。正则语法非法时,该类型直接判为不命中并静默跳过。
- 内置关键字兜底,或字段文本里直接含类型名。
注意: 第 1 条靠的是"数据元敏感属性文本 == 敏感类型名称"的字符串相等,任一侧改了名就断链,而且不会有提示。
默认脱敏规则决定识别结果里那一列"生效规则"填什么,按三级取:① 识别任务里为该敏感类型单独配的规则 → ② 敏感类型自己的默认规则 → ③ 挂在该敏感类型下、排序最前的一条规则。
注意: 三级全落空时,识别结果的"生效规则"为空,这一行在批量确认时会被直接跳过(不会生成任何脱敏配置),页面上没有提示。要么在类型上配一次默认规则,要么在任务里配映射。另:编辑敏感类型时把"默认脱敏规则"清空,是显式置空,不是"不改动"。
注意: 内置六类不允许删除;自建类型被脱敏规则、识别结果或动态脱敏配置任一引用时也删不掉。
主流程:数据识别(数据中台 → 数据安全 → 数据保护 → 数据识别)。 这个页面解决的问题是:把"要扫哪些库表"和"扫出来了什么"放在一起管。页面是左任务、右结果的双栏——左边建任务、跑任务,右边看结果、改判、确认。
怎么做。
说明: 涉及该操作的功能权限:敏感识别任务的新建与执行,以及识别结果的查看 / 改判 / 确认。
- 在侧边导航栏进入 数据中台 → 数据安全 → 数据保护 → 数据识别,点 新增识别任务,填任务名、选 目标库、选 表过滤模式 并圈定表。
- 按需为每个敏感类型指定一条 默认脱敏规则(即上文三级取值的第 ①),不配就往下落。
- 点 执行识别。系统先清空该任务的历史结果,再逐表逐字段重扫一遍并写入识别结果。
- 在右侧结果列表逐行看 库 / 表 / 字段 / 识别依据 / 敏感类型 / 安全等级 / 生效规则。判错的行,直接在行上的下拉里 改判敏感类型,改完系统会按新类型重算"生效规则"。
- 勾选确认无误的行,点 批量确认——这些行会被写进 动态脱敏配置(来源标记为"自动")。
表过滤模式决定这个任务扫哪些表:
| 取值 | 是什么 / 选了会发生什么 | 什么时候用 |
|---|---|---|
| 指定表 | 下面出一个多选框,从目标库的模型表里逐张勾选,执行时只扫勾中的表。 | 缺省档。表不多、想精确控制扫描面时用。 |
| 正则匹配 | 填一条正则,执行时对目标库下所有模型表逐张做匹配,命中的进扫描范围。比的是模型的展示名,不是物理表名,见下方注意第 4 条。 | 表按前缀成批命名(ods_*、dwd_user_*)且会持续新增时——新表建好后不用回来改任务。 |
注意: 1. 选"指定表"却一张都没勾,保存会被直接拒绝;2. 正则是部分匹配不是完整匹配——写
user会把t_user_log、abuser一起命中,要精确匹配请自己加^和$;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 | 遮盖字符(字符串) | 默认 *;想用 # 等其它符号时填。填空串会被当作没配、回落成 *;填多字符不会报错,但结果会比原值长。 |
retainSegment | IP 保留段数(整数) | 只有 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.7.1 里"生效规则"三级取值的第 ② 档就落空了,会退到第 ③ 档(该类型下排序最前的一条规则);三级全空时,新识别出来的行在批量确认时会被静默跳过。所以删掉一条被当作默认规则的规则后,请回敏感类型页把默认规则补上;改、删规则前,也先确认没有授权在引用它。
登记敏感列:动态脱敏(数据中台 → 数据安全 → 数据保护 → 数据脱敏 → 动态脱敏)。 这个子视图解决的问题是:把"这张表的这一列是敏感列"登记下来并绑一条规则,作为分享时忘了配的兜底。
怎么做。
说明: 涉及该操作的功能权限:动态脱敏配置的新建与查看。本页配置是兜底层,对没有单独配过列脱敏的被分享者生效,需谨慎配置——配错范围会让本该看明文的分析岗也被掩码。
- 在侧边导航栏进入 数据中台 → 数据安全 → 数据保护 → 数据脱敏,切到 动态脱敏 视图,点 新增动态脱敏。
- 依次选 库 → 表 → 字段,再选一条 脱敏规则(规则来自上面的脱敏规则页)。
- 保存生效。数仓引擎侧约十秒内自动拉到新策略,无需重启。
| 参数名称 | 描述 |
|---|---|
| 库 / 表 / 字段 | 三级联动,只能从有模型的表里选。 |
| 脱敏规则 | 绑一条规则,决定这一列在兜底层被怎么遮。 |
| 来源 | 只读,由这一行的产生路径决定,见下表。 |
来源这一列的两个取值:
| 取值 | 是什么 / 会发生什么 | 什么时候出现 |
|---|---|---|
| 手工 | 在本页手动新增出来的行,可编辑、可删除。 | 识别没扫出来、或想临时补一列时。 |
| 自动 | 由数据识别的"批量确认"写入的行,带识别任务名。编辑按钮被禁用,只能删。 | 系统产生。要改它的规则,回识别结果里改判敏感类型后重新确认,或删掉这行再手工建一条。 |
注意: 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 位"的不一致。
怎么做。
说明: 具有该操作的角色:该步需要静态脱敏的新建与执行权限;资产治理角色没有该权限,通常由管理员执行。
- 在 数据中台 → 数据安全 → 数据保护 → 数据脱敏 页切到 静态脱敏 视图,先看清已有任务的执行记录。
- 预先在目标库里建好目标表,列要按名覆盖源表的全部列。
- 由管理员发起任务:指定 源表、目标表,并为每一列 绑脱敏规则。
- 执行 任务,生成脱敏副本表;执行完这条记录会在本页显示起止时间与逐列明细。
| 参数名称 | 描述 |
|---|---|
| 源表 / 目标表 | 目标表须预建;源表 ≠ 目标表强校验,源与目标应同引擎。 |
| 逐列脱敏规则 | 每列绑一条规则,与读时链路共用同一套表达式。 |
任务状态由系统按执行过程自动流转:
| 取值 | 是什么 |
|---|---|
| 已创建 | 作业已建好(源表、目标表、逐列规则已定),尚未执行。 |
| 执行中 | 已发起整表覆盖写入,开始时间已记录、结束时间为空。执行是同步一次跑完的,不是可轮询的异步作业。 |
| 成功 | 覆盖写入完成,回填结束时间与影响行数,返回"源库.源表 → 目标库.目标表,脱敏 N 列,影响 M 行"。 |
| 失败 | 执行过程报错,记录结束时间;目标表保持原样,不会残留"已清空未灌入"的中间态。 |
执行前有五道硬校验,任一不过直接拒绝:
- 源表 ≠ 目标表(同数据源 + 同库表名即判为同一张)。
- 源、目标数据源都不能为空。
- 非超级管理员必须对源表有读权限,且对目标数据源是 OWNER 级。
- 目标表必须已存在,且按名覆盖源表的全部列——缺一列就拒,目标表不会自动创建。
- 至少配一列脱敏规则;规则必须存在,列必须在源表里。库、表、列名只允许字母、数字和下划线,不合规直接拒。
重要提示: 当前版本的界面只提供"查看",不提供"新建 / 执行"入口——静态脱敏页列出的是已有任务及其明细,任务的创建与执行需要由管理员通过后端接口发起(对应静态脱敏的新建与执行两个功能权限)。若在页面上找不到"新建任务"按钮,这是当前版本的实际形态,不是权限问题。
注意: 1. 目标表不会自动创建,须预建且列覆盖源表;2. 加密类算法在静态链路同样退化为不可逆哈希摘要;3. 静态与读时两条链路的脱敏强度已统一,不会出现"读时保留前后各留 4 位、落库却只留 1 位"的不一致;4. 明细里的影响行数是整条写入语句的总行数,被原样记在每一列上,不是逐列各自统计出来的——两列显示同一个数字属正常。
验证。 任务执行后,查目标副本表,身份证 / 手机号列已是掩码值,且行数与源表一致。
3.7.4 属主自助分享:把自己的表给别人用,并当场决定他看到什么
场景切入。 数仓组的工程师建好了一张信贷申请人明细表,风控建模的同事要用它训模型。以前只有一条路——对方发起数据申请、等审批。但这张表本来就是他建的,给不给、给哪几列的明文,他自己最清楚。属主自助分享就是把这个决定权交回给他。
是什么。 属主自助分享: 一张表的资产属主可以直接在数据授权页把这张表授权给指定的人,并在同一个表单里逐列配脱敏规则——分享出去的那一刻就决定了对方看到的是明文还是掩码。它与 3.11 的跨部门数据申请工单是方向相反的两条路:申请工单是"用数据的人来要",自助分享是"有数据的人主动给";前者走审批,后者不走。
为什么要用。 三个理由。其一,离数据最近的人才知道该给什么——属主清楚哪几列敏感、给谁用合适,比集中审批更准。其二,减少一轮往返:内部同事要用一张表,不必为此起一张工单等审批。其三,也是最重要的——它是"默认明文"口径下的安全支点:数据不分享就没人有表权限,一旦分享,脱敏就在分享的表单里当面配掉,不依赖任何全局开关。
怎么做。
说明: 涉及该操作的功能权限:数据授权的新增 / 修改 / 删除 / 释放 / 续期——由细角色
role_data_owner_share(数据中台-属主分享)下发;部门自治角色role_data_dept已内含同一套菜单,持有它的人不必再叠加。此外,要在表单里选脱敏规则,还需要脱敏规则的查看权限(规则清单是从数据保护那边取的)。
- 在侧边导航栏进入 数据中台 → 数据安全 → 数据授权。
- 在左侧 资源树 里逐级展开,点中要分享的那张表。
- 在 授权维护 区填 被授权对象(按用户选人)、勾选 授权动作、按需填 到期日。
- 在 字段脱敏 区逐行添加要遮住的列,各选一条 脱敏规则。不添加的列,这里不做指定(它是不是明文,看下方那条"未配置的列"提示)。
- 点 新增授权 保存。保存后在下方 当前授权记录 里能看到这条授权及其 列脱敏 摘要。
| 参数名称 | 描述 |
|---|---|
| 被授权对象 | 按用户选人。列脱敏只支持"表级资源 + 按用户授权";换成库级资源或按角色授权时,已配的列脱敏会在保存时被清空(页面会提示)。 |
| 授权动作 | 该受让人能对这份资源做什么;至少勾一项,逐项含义见下表。 |
| 字段脱敏 | 逐列绑一条脱敏规则,规则来自 数据保护 / 脱敏规则。留空 = 这一列交回兜底层判定(见下方提示)。 |
| 到期日 | 留空为长期有效;填了则到期自动失效。提前收回与续期有接口,但授权页上没有这两个按钮——界面只提供"编辑"和"删除",要改到期日走"编辑",要立刻收回走"删除"(见 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)。
- 打开侧边导航栏,进入 数据质量 → 质量规则,点 新建规则。
- 在弹窗里依次选 数据源 → 库 → 表 → 字段(四级联动,列出来的都是物理名)。除自定义 SQL 外的四种规则类型必须选到字段,不选保存会报"该规则类型必须指定字段"。
- 选 规则类型,填这个类型的专属配置(值域填上下限、正则填模式、自定义 SQL 填查询语句)。
- 配 阈值比较符 与 阈值(如非空率
>=0.99)。 - 按需填 调度(留空 = 只能手动跑),选 状态(启用 / 停用)。
- 保存后在列表点 立即校验 当场跑一次,或等定时触发。
- 点规则名进详情,看 历史校验结果。
规则类型:五种各管什么。 这是新建规则时第一个要定的东西,它决定平台生成什么样的校验 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:只能以
SELECT或WITH开头,不能用分号拼多条语句,正文里出现写库或运维类关键字(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 的资产——没授权就是一张空页,这一点后面还会再强调。
为什么要用。 让治理好的表能被发现、被复用;血缘支撑数据溯源、变更影响分析、故障定位。
怎么做。
说明: 涉及该操作的功能权限:数据地图的查看与搜索;能看到内容的前提是对相应数据源有源级授权。
- 打开侧边导航栏,在 数据资产 分区打开 数据地图。
- 用左上角的 分组维度 选按目录还是按主题翻;点树上的节点过滤右侧卡片。
- 或者直接用顶部 全局搜索,先选一个搜索范围再回车。
- 点资产卡片进 表详情,在四个页签之间看描述、数据、字段和血缘。
分组维度:左侧那棵树按什么分。
| 取值 | 左边显示什么、右边跟着变什么 | 什么时候用 |
|---|---|---|
| 按目录 | 左侧是资产目录树,来自每个资产填的"资产目录路径";没填路径的资产统一归到默认的"业务域 / 待分配目录"。右侧卡片里既有表也有指标。 | 默认档,进页面就是它。按业务域翻资产时用。 |
| 按主题 | 左侧是主题域树(数仓规划里建的那套主题域,带父子层级)。右侧只列挂到该主题的模型表,不含指标。 | 想按数仓主题域 + 分层找模型表时用。 |
注意: 点树节点是连同子节点一起看——选中一个父节点,它下面所有子节点的资产都会显示出来,不用逐个点。关键字过滤框在左侧树的上方(占位符"搜索目录 / 主题 / 资产名称"),但它过滤的是右侧卡片、不是树;卡片区下方带分页,默认每页 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)负责资产元数据登记与治理。扫描与保存另有两项独立权限。
- 在 数据资产 → 资产治理 点 采集入池,选一个数据源(可选填库名 / Schema)开扫。扫完弹一句"发现 N 张表,新增入池 M 项"。新入池的表初始状态是 待登记。
- 切到 待登记 分面,逐条点 登记,在抽屉里补业务信息:资产中文名、资产目录、主题域、负责人、生命周期、发布状态、业务描述、备注。
- 要登记一个平台扫不到的对象,用右上角 注册资产,手填物理名新建一条。
- 保存时把 发布状态 选成"已发布",这张表就在数据地图里对外可见了。
采集入池:一次扫一个数据源。 弹窗里选数据源、可选填库名或 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 我的数据(收藏 / 订阅 / 访问)
场景切入。 一个分析师每天都要查那几张固定的宽表,不想每次都在目录里翻。收藏、订阅、访问历史就是把常用资产钉在手边。
是什么。 "我的数据"是个人视角的常用资产收纳夹,两个页签:我收藏的、我订阅的。
这一页解决什么问题。 就一件事:把每天要查的那几张表钉在手边,少翻一次目录树。它不做推荐、不排热度、不做团队共享——纯个人的两份名单。
为什么要用。 降低找数成本——收藏和订阅把个人常用资产沉淀下来。
怎么做。
说明: 涉及该操作的功能权限:资产收藏 / 订阅 / 访问记录相关权限,已补授给资产消费与资产治理角色,不再需要管理员。
- 在 表详情 页头对一张表点 收藏 或 订阅。
- 在 数据资产 → 我的数据 切页签查看这两份名单,点行跳回表详情。
三种个人标记,各是什么。
| 标记方式 | 怎么记、记了会怎样 | 什么时候用 |
|---|---|---|
| 收藏 | 按"本人 + 这张表"记一行;在表详情页头点收藏是开关语义——已收藏的再点一次就是取消。收藏时会把表的中文名、负责人、数据源、分层做一份快照存下来,"我收藏的"直接读这份快照渲染,所以打开很快。 | 每天都要查的那几张固定宽表。 |
| 订阅 | 按"本人 + 这条资产"记一行,幂等——重复点不会记成两条。取消订阅是逻辑删除,没订阅时点取消也返回成功。 | 想把某张表单独拎出来跟一段时间时用。 |
| 浏览留痕 | 不用手动操作,每次打开表详情自动记一条;同一个人同一张表只保留最近一次。按浏览时间倒序,默认取 20 条。 | 想回到刚才看过的那张表。 |
两个页签各显示什么。
| 页签 | 每行显示 | 行上能做什么 |
|---|---|---|
| 我收藏的 | 表名、物理名、负责人、更新时间。 | 点行跳表详情。这一页没有取消收藏按钮。 |
| 我订阅的 | 表名等基本信息,外加一个发布状态彩点。资产已被删除的显示"(资产已删除)"。 | 每行有 取消订阅(带二次确认)。 |
重要提示(订阅不会给你发任何通知): 订阅在当前版本只是一份关注名单——平台没有对订阅做任何变更检测,不发消息、不发邮件、没有站内信。表结构改了、数据没刷新、资产下线了,订阅方不会收到任何提醒。把它理解成"收藏夹的第二个格子"就对了,不要拿它当监控用;要盯数据质量,配 3.8 的质量规则。
注意(取消收藏的入口在别处,而且有条件): "我收藏的"页签里没有取消收藏的按钮,要取消得点进表详情、再点一次页头的收藏按钮。但这颗按钮和"查看数据权限"共用一个位置(见 3.9.1)——对这张表已经拿到数据权限的人,页头显示的是"查看数据权限",按钮上根本没有"已收藏"可点,当前版本就取消不掉这条收藏。订阅则相反,取消入口就在"我订阅的"每行上,不受权限状态影响。
注意: 只有已纳入资产地图的表才能收藏,否则会提示"当前表未纳入资产地图,暂不支持收藏"。另外收藏是先写本地、再异步落库的,后端一时不可用时不会报错,但那条记录只留在本机;"我收藏的"列表只显示能对上资产的记录。
注意: 浏览历史不在这一页。 它叫 最近访问,挂在数据地图页右栏(见 3.9.1),这里只有收藏和订阅两个页签。
说明: 收藏 / 访问 / 订阅为纯个人记录,不带推荐或热度排行,别人也看不到你收藏了什么。
验证。 在表详情点收藏后,到"我的数据 → 我收藏的"能看到该表回显;点订阅后,"我订阅的"里出现该表并带取消订阅按钮。
3.10 自助分析 / 查询工作台
场景切入。 数据搬进来、治理好了,分析师要验一验"数到底对不对";数据工程师走同步直用时,还要先手写一句 CREATE TABLE 把目标表建出来。这些即席取数、验数、建表的动作都在查询工作台完成。
是什么。 自助分析(查询工作台)是面向分析与开发的交互式 SQL 查询界面,用于取数、验数,以及为"同步直用"预建目标表。查询者在这里写的自由 SQL,其脱敏由中台数仓引擎级插件按本人账号在引擎内接管。
这一页解决什么问题。 三件事:取数(写一条 SQL 把数捞出来看)、验数(建完模、跑完同步,来这里确认数对不对)、建表(走同步直用的人在这里手写 CREATE TABLE 把目标表建出来)。界面上是多页签编辑器 + 左侧库表信息树 + 底部运行结果区三块。
为什么要用。 降低取数门槛;它是 OWNER 建表的一条路;而且用户自由写的 SQL,其脱敏由中台数仓引擎按本人账号在引擎内落实——别名、聚合都绕不过,因为读到的就是掩码值。查询工作台在数据开发者和数据消费者之间充当管道:消费者不必关心数据存哪、开发者不必关心取数怎么实现。
怎么做。
说明: 涉及该操作的功能权限:自助分析的查看 / 新建 / 运行 / 保存 / 配置管理;
CREATE TABLE需对目标库有 OWNER。
- 打开侧边导航栏,在 自助分析 分区打开 Query。
- 点 新建 Query 开一个页签,选 数据源 与 库。
- 在左侧库表信息树里浏览表和字段——双击表名或字段名可以直接把标识符插进当前 SQL,不用手打。
- 在编辑器里写查询,需要时用 格式化 整理、用 复制 取走 SQL。
- 点 执行,在底部结果区看结果。
- 常用的查询点 保存,归到自己的文件夹里,下次直接打开。
多页签怎么用。 每个 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 由属主分享并当场配规则。
怎么做。
说明: 涉及该操作的功能权限:权限中心的查看与申请提交;审批动作在工作台待办里办。申请由被申请资源的属主审(解析不到属主时落到配置的默认审批人),提单人不能审自己的单。
- 用数据方在侧边导航栏进入 数据中台 → 数据安全 → 权限中心,按要申请的粒度切页签。
- 左栏搜资源、勾资源(可多选)。数据源卡片若已带"已授权""审批中"标签,复选框是灰的,不能重复申请。
- 右栏给每个已选资源勾申请权限;申请表权限时还能展开表、逐字段勾。
- 填申请信息:项目名称(可选)、有效期(默认当天起三个月)、申请原因(必填)。
- 右上点提交申请,页面自动跳到流程详情页。
- 资源属主在 工作台 → 我的待办 打开这条待办,看清申请的资源清单、动作、有效期与事由,同意或驳回。
- 通过后平台自动写授权,用数据方到自助分析查该源的表,登记过的敏感列呈掩码。
第一步先选粒度:三个页签的区别。
| 页签 | 申请的是什么 | 什么时候用 | 审批通过后实际发生什么 |
|---|---|---|---|
| 数据源申请 | 一整个数据源的只读访问。选的是数据源本身,不落到具体库表。 | 跨部门取数的正路,本节场景就是它。 | 真发权:给申请人下发中心库的库级读权限,并补一条数据源可见性记录——他在自助分析的数据源清单里当场就能看到并选中这个源。 |
| 表权限申请 | 某个库里某张表的读 / 写,可再逐字段勾。 | 只需要一两张表、且想把范围写清楚时。 | 只写控制面的授权记录,不下发引擎侧读权限、也不补数据源可见性。 |
| 数据库申请 | 一整个库的读 / 写 / 建表。 | 基本用不到。 | 同表权限申请,只写控制面的授权记录。 |
重要提示: 表权限申请与数据库申请当前是登记性质的——审批通过后,申请人在授权记录里看得到自己有权,但到自助分析仍然查不到数据,因为审批自动发权这条路只对数据源粒度真正下发引擎侧读权限。跨部门要真拿到数据,走数据源申请;确实只想给某几张表、某几列,改走 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. 静态脱敏任务的创建与执行不入审计——那是会改写落库数据的动作(见 3.7.3),目前不留安全审计痕迹;2. 表模型的其它增删改也不入审计,只挂了物理表回收这一个动作,是为了不改变既有审计口径而有意为之。
操作类型十二档。 这个值不是人工填的,是平台按被记录的操作自动打的标:
| 取值 | 对应哪些动作 | 什么时候按它筛 |
|---|---|---|
| 新增 | 新增授权,以及新增安全级别 / 敏感类型 / 脱敏规则 / 识别任务 / 动态脱敏配置 / 脱敏白名单。库里量最大的一档。 | 查"谁新配了一条授权、一条脱敏规则"。 |
| 修改 | 上述各类对象的修改。 | 查配置被谁改过。 |
| 删除 | 上述各类对象的删除。 | 查权限或脱敏配置被谁删了。 |
| 保存 | 只有一处:保存资源访问策略(数据授权页的资源策略区)。 | 很少用到。 |
| 授权 | 见下方重要提示——这一档不是发生了授权。 | 不要按字面理解。 |
| 确认 | 确认敏感识别结果:把扫出来的候选敏感字段正式登记为敏感列。 | 查敏感列是谁认下来的。 |
| 更新 | 调整识别结果的敏感类型。 | 与"修改"中文相近但来源不同,按"哪个接口"理解,别按字面理解。 |
| 执行 | 执行敏感识别任务。 | 查扫描任务是谁跑的。 |
| 提交 | 提交权限申请(直接落申请单、不走流程的那条通道)。 | 与"发起"配合看,能分清申请是从哪条通道进来的。 |
| 发起 | 发起权限申请审批——权限中心页"提交申请"按钮走的就是这条。 | 查跨部门取数申请是谁提的。 |
| 同步 | 人工触发的权限申请审批状态对账。 | 排查"审批完了但授权没下来"时看它。 |
| 回收物理表 | 表模型的物理表回收:真删中心库的数据、不可回滚。 | 查物理表被谁回收了。 |
重要提示: "授权"这一档目前几乎全是误报——命中它的只有一个只读的授权列表查询接口,库里已经积累了近百条。界面上刻意把它的操作详情标成"查询授权列表(只读)",就是为了避免合规岗把它读成一次真实的授权动作。真正的授权变更,请按新增 / 修改 / 删除 + 资源类型权限访问去查。
说明: 1. 删除类记录的入参往往只有一串主键,界面显示成"目标标识:xxx",看不出删的是哪张表的授权——取证时要配合操作时间与操作人一起看,必要时点技术详情看原文;2. 每 30 秒一轮的定时对账不产生审计记录,"同步"这一档记的只是人工触发的那些。
注意: 审计只覆盖安全访问与安全防护两类控制器的写方法(加上物理表回收),不改控制器代码即自动落日志;普通业务查询不在其中。
验证。 完成一次授权变更后,到操作审计按资源类型"权限访问" + 操作类型"新增"查,能查到对应的一条记录(操作人 / 时间 / 操作类型 / 操作详情);点技术详情能看到这次操作的原始入参。
治理工单:四类发布审批的统一台账
这个页面解决什么问题。 平台里的"发布"从来不是保存即生效——表模型发布、数据标准发布、指标发布、资产发布这四类动作,都先落一张工单,审批通过后才由平台去真正执行业务动作(建物理表、把数据元置为标准态、把指标 / 资产置为已发布)。治理工单页就是这四类工单的统一台账:提单人在这里跟踪自己的单,审批人在这里审、驳、看流转日志。它与操作审计同在数据中台 → 数据安全分区下——一个记安全配置的写操作,一个记发布动作的审批。
为什么要用。 发布类动作里有不可逆的(在库里建物理表),也有会立刻改变别人看到什么的(指标、资产上架)。工单化保证它们经过审批、留痕、可追溯,并把"谁批的、批语是什么、执行结果如何"钉在同一条记录上。
怎么做。
说明: 涉及该操作的功能权限:治理工单的查看;提交与撤回另需工单提交权限,审批需要审批权限,由治理审批角色(
gov_approver)承担。提单人不能审自己的单。
- 在侧边导航栏进入 数据中台 → 数据安全 → 治理工单。
- 切页签圈定范围(页面默认落在"我的申请")。
- 点行或点详情打开抽屉,看基础信息、申请理由、驳回原因、结果摘要与审批日志时间线。
- 审批人点通过(二次确认后由平台派发执行)或驳回(必填驳回原因)。
- 提单人在单还没被处理时可以撤回,改完重新提交。
三个页签。
| 页签 | 列的是什么 | 什么时候用 |
|---|---|---|
| 我的申请 | 自己发起的全部工单,不分状态。页面默认落在这里。 | 跟踪自己提的发布单走到哪了、要不要撤回。 |
| 待我审批 | 设计意图是"待审批、且不是自己提的、且自己有权审"的工单。 | 审批人处理待办。 |
| 全部 | 管理员看全部工单;非管理员被收敛成只看本人发起的。 | 管理员做全局巡检。 |
重要提示: "待我审批"页签当前不起过滤作用——界面传的页签值与后端认的对不上,于是落进兜底分支:非管理员在这里看到的和"我的申请"一模一样,管理员则看到全部工单(含已办结的)。别把这个页签当待办清单用;审批待办以 工作台 → 我的待办 为准,或在本页按状态"待审批"自行辨认。
说明: 非管理员点"全部"看到的也只是自己发起的单,这是有意的越权收敛(防止列举别人的工单),界面上没有提示,不是页面出错。
工单类型四档。 类型由发起动作自动决定,界面上不可自选:
| 类型 | 审批通过后平台会做什么 | 从哪里提出来 |
|---|---|---|
| 表模型发布 | 在中心库真建物理表,把表模型置为标准态,并记一条发布落地记录。执行前先探测目标位置上有没有同名表:已存在就跳过建表、也不记落地记录。 | 数据表管理页对设计完成的表点"发布"(见 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********1953、phone 显示 158****4026;用它 CREATE TABLE AS SELECT 落库,副本同样掩码;定时作业每天自动刷新;数据地图能按主题域 / 分层找到这三张表并看到血缘。至此,数仓里有了干净、及时、治理好、可发现、按人脱敏的数据,交给决策引擎去建指标 / 模型 / 规则 / 打分(属决策引擎域,见后续章节)。
说明: 上述表名、参数、脱敏位数、Cron 时刻等仅适用于本节举例,不代表其他规范或国家标准。实际使用时,数据元定义、脱敏强度、值域范围等请以官方专业标准规范文档为准。