3. 批次概念定义:元数据字段与数据仓库中的“批次”

在数据仓库与特征工程流水线中,“批次”(Batch)是数据按时间或业务规则切分的最小可追溯单元。每个批次都携带一组元数据字段,用于标识、定位和诊断该批次的数据质量与偏移状态。本节将正式定义批次的核心元数据,并给出标准化的字段规范。

3.1 批次的核心元数据字段

一个完整的批次记录至少包含以下三类元数据:

字段类别 字段名称 数据类型 说明
标识字段 batch_id STRING / BIGINT 全局唯一批次编号,通常由时间戳+流水号组成
时间字段 batch_timestamp TIMESTAMP 批次生成或写入数据仓库的精确时间
量级字段 batch_record_count BIGINT 该批次包含的数据行数(记录数)
量级字段 batch_feature_count INT 该批次包含的特征列数(维度数)
状态字段 batch_status STRING 批次处理状态:raw / validated / failed
来源字段 batch_source STRING 数据来源系统或管道名称,如 kafka_topic_orders
实践建议:在数据仓库中,建议将批次元数据单独存储为一张 batch_metadata 表,与特征数据表通过 batch_id 关联。这样可以在不扫描全量特征数据的情况下,快速定位异常批次。

3.2 批次元数据在特征稳定性分析中的角色

批次元数据并非仅用于数据管理,它在窗口函数偏移诊断中承担以下关键职责:

  • 时间对齐:batch_timestamp 是窗口函数 ORDER BY 子句的基准列,决定了偏移计算的时序顺序。
  • 粒度控制:batch_id 是 PARTITION BY 或 ORDER BY 的候选键,用于定义“每个批次内”或“跨批次”的窗口范围。
  • 异常检测:batch_record_count 的突变(如某批次行数骤降 50%)往往是数据管道故障或特征分布偏移的前兆信号。
  • 回溯诊断:当特征稳定性指标(如 PSI、均值漂移)出现异常时,通过 batch_id 可以精准定位到具体批次,结合 batch_source 追溯上游原因。

3.3 批次元数据关系结构图

下图展示了批次元数据表与特征数据表之间的关联关系,以及元数据字段在窗口偏移分析中的流向:

批次元数据与特征数据关联结构 batch_metadata batch_id (PK) batch_timestamp batch_record_count batch_feature_count batch_status batch_source feature_data batch_id (FK) feature_1 feature_2 feature_3 ... target 通过 batch_id 关联 窗口偏移分析

3.4 批次定义的标准 SQL 实现

以下 SQL 脚本展示了如何在数据仓库中创建批次元数据表,并插入一条示例批次记录:

-- 创建批次元数据表
CREATE TABLE batch_metadata (
    batch_id          STRING      COMMENT '全局唯一批次ID,格式:yyyyMMdd_HHmmss_XXXX',
    batch_timestamp   TIMESTAMP   COMMENT '批次生成时间戳',
    batch_record_count BIGINT    COMMENT '批次数据行数',
    batch_feature_count INT      COMMENT '批次特征列数',
    batch_status      STRING      COMMENT '批次状态:raw/validated/failed',
    batch_source      STRING      COMMENT '数据来源管道名称'
)
COMMENT '批次元数据表,用于特征稳定性分析与偏移诊断'
PARTITIONED BY (dt STRING)  -- 按日期分区
STORED AS PARQUET;

-- 插入一条示例批次记录
INSERT INTO batch_metadata VALUES (
    '20250315_140000_A001',
    TIMESTAMP '2025-03-15 14:00:00',
    1250000,
    48,
    'validated',
    'kafka_topic_user_behavior'
);
注意:批次 ID 的生成策略必须保证全局唯一且有序。推荐使用“日期+时间+流水号”的组合方式,避免在分布式环境下产生冲突。同时,batch_timestamp 应使用数据到达数据仓库的时间,而非数据产生时间,以保证窗口函数 ORDER BY 的单调递增性。

3.5 批次元数据在窗口函数中的典型用法

在后续章节的偏移诊断中,批次元数据将直接作为窗口函数的排序与分区依据。以下是一个典型的前置查询示例:

-- 按批次时间顺序,计算每个批次相对于前一批次的记录数变化率
SELECT
    batch_id,
    batch_timestamp,
    batch_record_count,
    LAG(batch_record_count, 1) OVER (ORDER BY batch_timestamp) AS prev_batch_count,
    ROUND(
        (batch_record_count - LAG(batch_record_count, 1) OVER (ORDER BY batch_timestamp))
        / NULLIF(LAG(batch_record_count, 1) OVER (ORDER BY batch_timestamp), 0)
        * 100, 2
    ) AS count_change_pct
FROM batch_metadata
WHERE batch_status = 'validated'
ORDER BY batch_timestamp;

该查询利用 LAG 窗口函数,快速识别出记录数发生剧烈波动的批次——这是数据管道异常或特征分布偏移的早期预警信号。

3.6 批次元数据字段的扩展建议

根据实际业务复杂度,可以在核心字段基础上增加以下扩展字段:

  • batch_data_volume_bytes:批次数据存储大小(字节),用于监控存储成本与数据膨胀。
  • batch_checksum:批次数据的哈希校验值,用于数据完整性验证。
  • batch_etl_duration_sec:ETL 处理耗时(秒),用于管道性能监控。
  • batch_feature_list:该批次包含的特征名称列表(JSON 格式),便于动态特征发现。

这些扩展字段在特征稳定性分析的高级场景中,能够提供更细粒度的诊断上下文。