3. 数据资产盘点与灾备分级

灾备恢复的第一条铁律是:你无法保护你尚未盘点的资产。在 Databricks 平台上,一个工作区里往往同时存在数千张 Delta 表、上万个 Notebook、数百个作业、若干外部存储卷以及 Unity Catalog 中的元数据对象。如果不做资产盘点与分级,灾备方案要么"全量保护"导致成本失控,要么"重点保护"却漏掉了关键对象。本节的目标是建立一套可落地的资产分类框架,并给出优先级排序的判断依据。

一、为什么必须先盘点再谈恢复

灾备的核心指标是 RTO(恢复时间目标)与 RPO(恢复点目标)。这两个指标不是对所有资产一刀切的——一张用于每日报表的汇总表,和一张支撑实时风控的特征表,其 RTO 可能相差两个数量级。资产盘点的作用,就是把"整个平台"这个模糊对象拆解为可独立评估、可独立设定 RTO/RPO 的资产单元,从而让灾备资源按价值分配。

在 Databricks 语境下,盘点需要覆盖四类对象:Unity Catalog 元数据(catalog、schema、table、view、function、volume、外部位置、权限授权)、Delta 表数据(含托管表与外部表)、非结构化数据(Volume 中的文件、模型工件、日志、图片等)、Notebook 与作业(含 Job 定义、调度、依赖、参数)。这四类对象的恢复方式、恢复顺序和依赖关系各不相同,必须分开盘点。

二、四类资产的盘点维度与关键字段

盘点不是简单列清单,而是为每个资产采集"恢复决策所需的最小字段集"。以下字段是实践中真正会用到的:

  • 唯一标识:Unity Catalog 全限定名(如 prod.finance.risk_features)、Volume 路径、Notebook 路径或 Job ID。
  • 资产类型:MANAGED_TABLE / EXTERNAL_TABLE / VIEW / VOLUME / NOTEBOOK / JOB。
  • 存储位置:托管表落在 UC 管理的存储根,外部表指向外部位置(如 s3://corp-data/prod/... 或 abfss://...)。这一字段直接决定恢复时是"重建元数据"还是"重新挂载路径"。
  • 数据规模与更新频率:行数、大小、每日增量、是否流式写入。用于估算恢复耗时与增量恢复可行性。
  • 上游依赖:该表由哪些 Job 产出、依赖哪些源表。用于确定恢复顺序。
  • 下游消费者:哪些报表、模型、API 读取它。用于评估业务影响面。
  • 合规属性:是否含 PII、是否受审计要求约束、保留期限。

这些字段可以通过 Unity Catalog 的 information_schema 与 Jobs API 自动采集。例如,列出所有托管表及其大小:

SELECT table_catalog, table_schema, table_name,
       table_type, data_source_format
FROM prod.information_schema.tables
WHERE table_type IN ('MANAGED','EXTERNAL')
ORDER BY table_catalog, table_schema, table_name;

-- 结合 DESCRIBE DETAIL 获取存储路径与大小
DESCRIBE DETAIL prod.finance.risk_features;
-- 返回字段包含 location、numFiles、sizeInBytes、format 等

对于 Job,可通过 Jobs API 2.1 的 /api/2.1/jobs/list 拉取全部作业定义,再逐个 /api/2.1/jobs/get?job_id= 获取任务依赖、集群配置与调度。Notebook 则可通过 Workspace API 递归遍历目录树导出。

三、灾备分级:从资产属性到恢复优先级

分级不是按"重要性"主观打分,而是按业务影响 × 恢复难度两个维度定位。业务影响由下游消费者数量、是否支撑实时决策、是否涉及合规决定;恢复难度由数据规模、依赖深度、是否可重建决定。据此可划分为四级:

级别典型资产RTO 目标RPO 目标恢复策略
P0 关键实时风控特征表、核心交易明细、UC 元数据与授权≤ 1 小时≤ 5 分钟跨区域副本 + 持续同步 + 元数据快照
P1 重要每日报表汇总表、关键 Job、模型工件≤ 4 小时≤ 1 小时定时快照 + 增量恢复
P2 一般探索性 Notebook、中间层表、日志 Volume≤ 24 小时≤ 24 小时按需重建或从上游重算
P3 低临时表、草稿 Notebook、过期归档不承诺不承诺不备份,接受丢失

需要特别强调的是 Unity Catalog 元数据本身应至少定为 P0。原因在于:即使底层 Delta 数据文件完好,如果 UC 中的 catalog、schema、表定义、权限授权丢失,所有查询都会失败,恢复数据文件也无法直接访问。元数据的恢复往往比数据恢复更紧急,因为它是一切访问的前提。

常见误区:把"数据在 S3/ADLS 上还在"等同于"资产没丢"。对于托管表,UC 元数据丢失后,底层文件虽在但无法通过表名访问;对于外部表,路径虽在但授权与表定义丢失同样导致不可用。元数据必须单独纳入备份范围。

四、依赖关系决定恢复顺序

资产之间存在明确的生产依赖:Job 产出表,表被下游表引用,Notebook 调用函数,Volume 中的文件被表读取。恢复时若顺序错误,会出现"表恢复了但上游 Job 未恢复导致无法继续写入"或"Job 恢复了但依赖的表不存在导致启动失败"。因此盘点必须同时产出一张依赖图,恢复顺序应遵循:元数据 → 基础源表 → 中间层表 → 应用层表 → Job 与调度 → Notebook 与函数。

Databricks 资产依赖与灾备恢复顺序 ① Unity Catalog 元数据 catalog / schema / 表定义 / 授权 / Volume ② 基础源表 (P0/P1) 交易明细 / 实时特征 ② 非结构化数据 (P1) Volume 文件 / 模型工件 ③ 中间层表 (P1/P2) 清洗 / 聚合 / 特征工程 ④ 应用层表 (P0/P1) 报表 / 风控输出 / API 数据源 ⑤ 作业与调度 (P1) Job 定义 / 依赖 / 参数 ⑤ Notebook 与函数 (P2) Notebook / UDF / 库依赖 元数据 源数据 中间层 应用层 计算资产

五、盘点成果的落地形式

盘点最终应产出一份可维护的资产台账,建议以 Delta 表形式存放在独立的 governance catalog 中,便于持续更新与查询。台账至少包含以下字段:asset_id、asset_type、full_name、storage_location、size_bytes、update_frequency、upstream_deps、downstream_consumers、compliance_flag、dr_tier、rto_minutes、rpo_minutes、last_reviewed。台账本身也应纳入 P0 保护范围。

台账建立后,应定期(建议每月)复核一次,重点检查:新增资产是否已分级、P0/P1 资产的下游消费者是否发生变化、外部表的存储路径是否仍然有效、Job 依赖是否因重构而改变。只有持续维护的台账,才能在真正发生故障时作为恢复依据。

实操建议:先用 information_schema 与 Jobs API 自动生成台账初稿,再组织业务方对 P0/P1 资产逐条确认。人工确认环节不可省略,因为"哪些表真正支撑业务"往往只有业务方清楚,自动化采集无法替代。

完成本节盘点后,你将得到一份带分级、带依赖、带 RTO/RPO 目标的资产清单。这份清单是后续所有灾备动作——备份策略选择、跨区域复制配置、恢复演练设计——的输入。没有它,灾备方案就是空中楼阁。