4. 数据资产发现与分类

迁移项目最容易踩的坑,不是“搬不动”,而是“不知道要搬什么、搬了之后谁受影响”。在动手迁移之前,必须先把数据资产盘清楚:有哪些表、哪些字段、谁在用、从哪来、到哪去、哪些含敏感信息、哪些必须一起搬。这一节围绕四件事展开——元数据采集、数据血缘分析、敏感数据识别、迁移批次划分。

一、元数据采集:先建立“资产台账”

元数据采集的目标是把散落在各处的技术元数据、业务元数据、操作元数据统一收拢到一张可查询的资产清单里。在 Databricks 环境中,采集对象通常包括:

  • 技术元数据:catalog、schema、表名、列名、数据类型、分区键、文件格式(Delta/Parquet)、表属性、存储路径、表大小与行数。
  • 业务元数据:表/字段的中文名、业务口径、负责人、所属主题域、SLA 等级。
  • 操作元数据:最近访问时间、访问频次、作业依赖、刷新周期。

Databricks 的 Unity Catalog 自带 information_schema,可以直接用 SQL 拉取技术元数据。例如统计某 schema 下所有表的规模与最近访问情况:

SELECT t.table_catalog, t.table_schema, t.table_name,
       t.table_type, t.data_source_format,
       SUM(c.row_count) AS row_cnt
FROM system.information_schema.tables t
LEFT JOIN system.information_schema.table_lineage l
  ON t.table_name = l.target_table_full_name
WHERE t.table_schema = 'sales_dw'
GROUP BY 1,2,3,4,5
ORDER BY row_cnt DESC;

采集结果建议落到一张 asset_inventory 表中,字段至少包含:full_table_name、layer(ODS/DWD/DWS/ADS)、owner、row_count、last_access_time、has_pii、migration_batch。这张表就是后续所有决策的“单一事实来源”。

采集频率建议:技术元数据每日全量刷新一次;访问与血缘类操作元数据按小时增量刷新,避免迁移窗口期拿到过期信息。

二、数据血缘分析:判断“牵一发动全身”的范围

血缘分析回答两个问题:这张表的数据从哪来(上游)、被谁消费(下游)。在 Databricks 中,Unity Catalog 的 system.access.table_lineage 与 column_lineage 会自动记录 Notebook、Job、SQL Warehouse 产生的读写关系。对于未接入 UC 的旧集群,则需要通过解析 SQL 日志、Spark 执行计划或调度系统依赖来补全。

血缘的价值在于确定迁移的“最小闭包”。假设要迁移 sales_dw.dwd_order,如果它的下游有 12 张表、3 个报表、2 个特征工程任务,那么单独迁移这一张表会导致下游全部断链。正确做法是:以目标表为起点,向上追溯到 ODS 源表,向下追踪到所有消费方,形成一个完整的迁移单元。

血缘分析还要识别跨层依赖和循环依赖。跨层依赖(如 ADS 表直接读 ODS 表)会打乱分层迁移顺序,需要在迁移前先做“依赖拉直”;循环依赖则必须人工介入拆分,否则批次划分无法收敛。

三、敏感数据识别:合规是迁移的前置条件

敏感数据识别不能只靠字段名猜测。实践中采用“规则 + 采样 + 分类分级”三层策略:

  1. 规则匹配:按字段名和注释匹配关键词,如 id_card、phone、email、bank_card、address。
  2. 数据采样验证:对候选字段抽样 1000 行,用正则校验真实内容。例如手机号用 ^1[3-9]\d{9}$,身份证用 18 位校验规则。
  3. 分类分级打标:按合规要求分为 L1(公开)、L2(内部)、L3(敏感)、L4(高敏),并在 Unity Catalog 中用 tag 标注,如 pii.level = L3。

识别结果直接影响迁移方案:L3/L4 字段在迁移过程中必须启用列级加密或脱敏视图,跨区域迁移还需评估数据出境合规。若目标环境尚未配置好访问控制,这些表应推迟到后续批次,而不是抢进度先搬。

四、迁移批次划分策略

批次划分的本质是在“风险可控”和“进度可见”之间找平衡。推荐按以下优先级排序:

  • 第一批:低风险、无下游、非敏感。用于验证迁移工具链、网络、权限、调度是否跑通,通常选 5~10 张临时表或历史归档表。
  • 第二批:核心链路但血缘清晰。按主题域整条链路迁移,如“订单域”从 ODS 到 ADS 一次性搬完,保证链路完整。
  • 第三批:含敏感数据或跨系统依赖。需要额外做脱敏、加密、合规审批,放在工具链稳定之后。
  • 第四批:长尾与低频表。访问频次低、负责人不清、可能已废弃,先冻结再评估是否迁移。

批次划分时可参考一个简单的量化打分:优先级 = 业务重要性 × 0.4 + 血缘复杂度 × 0.3 + 敏感等级 × 0.2 + 访问频次 × 0.1。分数越高越靠后,先易后难,快速建立信心。

数据资产发现与分类 · 迁移决策链路 ① 元数据采集 information_schema 表/列/分区/格式 访问频次 · 负责人 → asset_inventory ② 血缘分析 table_lineage column_lineage 上游来源 · 下游消费 → 迁移最小闭包 ③ 敏感识别 规则匹配 + 采样验证 L1 ~ L4 分级打标 pii.level tag → 脱敏/加密要求 ④ 批次划分 优先级打分 先易后难 链路完整 → 迁移计划 迁移批次划分 · 四批推进策略 第一批 · 验证 低风险 · 无下游 非敏感 · 临时/归档表 目标:跑通工具链 第二批 · 核心链路 血缘清晰 · 主题域整搬 ODS→DWD→DWS→ADS 目标:保证链路完整 第三批 · 敏感数据 L3/L4 · 跨系统依赖 脱敏 · 加密 · 审批 目标:合规先行 第四批 · 长尾 低频 · 负责人不清 可能已废弃 目标:冻结后评估 优先级打分模型 优先级 = 业务重要性×0.4 + 血缘复杂度×0.3 + 敏感等级×0.2 + 访问频次×0.1 分数越高 → 越靠后迁移;先易后难,快速建立迁移信心

五、从资产清单到迁移计划

四步走完之后,asset_inventory 表应该已经具备完整的决策字段。此时可以生成迁移计划视图:

SELECT migration_batch,
       COUNT(*) AS table_cnt,
       SUM(row_count) AS total_rows,
       SUM(CASE WHEN has_pii THEN 1 ELSE 0 END) AS pii_tables
FROM asset_inventory
GROUP BY migration_batch
ORDER BY migration_batch;

判断迁移是否“盘清楚”的标准很简单:任意挑一张表,都能回答出它的上游来源、下游消费方、敏感等级、所属批次、负责人。如果有一项答不上来,说明资产发现还没做到位,不应进入实际搬迁阶段。

常见误区:把“表数量统计”当成资产盘点。真正的资产发现必须包含血缘和敏感标签,否则迁移过程中会出现“搬完了但下游报表全挂”或“敏感数据裸奔到新环境”两类严重事故。