SuperAPI AI 工具集

data-engineering-best-practices

数据与分析

查看项目

更新于 10-16 09:20

技能介绍

该技能用于生产架构与标准层面的决策,包括存储布局、数据生命周期、增量语义、模式演进、质量检查以及成本与性能权衡。它侧重“标准与决策”,具体实现细节建议交给相应领域技能(如数据工程核心、湖仓存储、存储格式、远程访问、认证等)。

一、适用场景 当你需要完成以下工作时使用本技能:设计 Bronze/Silver/Gold 或等价数据分层;选择 append、overwrite 或 merge 写入行为;制定分区与文件大小策略;定义模式演进政策;设置测试与可观测性护栏;建立保留期与成本控制。实现细节则转交领域技能处理。

二、决策清单(按顺序应用)

  1. 数据契约:必需列与类型?可空性与键唯一性?
  2. 分层语义:Bronze 是否不可变?Silver 是否去重并校验?Gold 是否为面向业务的聚合?
  3. 写入模式:append、分区 overwrite 还是 merge?
  4. 布局:分区键与目标文件大小是否确定?
  5. 增量逻辑:水位线/检查点策略是否定义?
  6. 演进政策:是否默认仅做加法变更?
  7. 运营控制:测试、可观测性、保留期、回填流程是否齐备?

三、核心标准

  1. 分层(Medallion):Bronze 为原始不可变摄入,仅追加;Silver 为清洗、校验、统一模式后的数据;Gold 为面向消费的集市、特征或聚合。不要为省事跳过 Silver 校验,静默的质量漂移代价高昂。
  2. 写入语义:append 用于严格新增的不可变事件,最简单、成本最低;分区 overwrite 用于按日期/键切片的确定性重处理,适合回填;merge/upsert 用于修正、迟到更新或删除,需要键与冲突语义。
  3. 分区:好的分区键是高频过滤维度(通常是日期加低/中基数维度)。避免高基数键(如 user_id),避免过度分区导致产生大量小文件。
  4. 文件大小:目标约 256MB–1GB(取决于工作负载)。过小会带来元数据与列举开销、扫描变慢;过大则并行度差、处理倾斜。
  5. 模式演进:默认策略为优先做加法变更(新增可空列);仅在兼容性明确时做类型拓宽;对于共享生产表,不在原地做破坏性重命名或删除。
  6. 增量处理:将水位线/检查点外部持久化;让重跑具备幂等性;包含迟到数据策略(延迟窗口或回填)。
  7. 质量与可靠性:最低控制包括必需列与类型、主键唯一性(或去重策略)、关键字段的空值阈值、新鲜度/SLA 检查、运行级指标(行进出、失败、延迟)。

四、反模式(评审时应拒绝) 为小增量变化做全表覆盖;周期性管道没有检查点/水位线;无限制地生成小文件;用用户值拼接动态 SQL 而不做参数绑定;将生产凭证提交到代码或配置仓库;没有回填计划或回滚策略。

五、最小生产蓝图

  1. 将原始数据摄入 Bronze(仅追加);2. 校验并标准化到 Silver;3. 构建 Gold 输出;4. 产出指标与质量报告;5. 持久化检查点/水位线;6. 应用生命周期规则并定期压缩/维护。

六、渐进式披露(按需继续阅读) 可继续参考:best-practices-detailed.md(详细深度示例)、data-engineering-core/patterns/incremental.md(增量加载模式)、data-engineering-storage-lakehouse(Delta/Iceberg/Hudi 具体行为)、data-engineering-quality(校验框架实现)、data-engineering-observability(指标/追踪/告警)。

参考资料包括 Delta Lake 模式演进、Apache Iceberg 演进、DuckDB MERGE INTO、PyArrow Dataset API。