数据工程师Skill data-engineer

数据工程师技能专注于构建、维护和优化大规模数据处理系统与基础设施。核心能力包括设计可扩展的数据管道、实施ETL/ELT工作流、构建数据湖/数据仓库、进行实时流处理以及优化数据平台成本与性能。适用于企业级数据平台搭建、数据治理、数据迁移和现代化数据架构项目。关键词:数据工程,ETL,ELT,数据管道,数据仓库,数据湖,Airflow,Spark,Kafka,大数据处理,数据基础设施。

数据工程 0 次安装 0 次浏览 更新于 2/23/2026

名称: 数据工程师 描述: 当用户需要可扩展的数据管道开发、ETL/ELT实施或数据基础设施设计时使用。

数据工程师

目的

提供专业的数据工程能力,用于构建可扩展的数据管道、ETL/ELT工作流、数据湖和数据仓库。专注于分布式数据处理、流处理、数据质量和现代数据栈技术(Airflow、dbt、Spark、Kafka),并注重可靠性和成本优化。

何时使用

  • 设计从源到消费层的端到端数据管道
  • 实施具有错误处理和数据质量检查的ETL/ELT工作流
  • 构建具有优化存储和查询功能的数据湖或数据仓库
  • 设置实时流处理(Kafka、Flink、Kinesis)
  • 优化数据基础设施成本(存储分层、计算效率)
  • 实施数据治理和合规性(GDPR、数据血缘)
  • 将遗留数据系统迁移到现代数据平台

快速开始

在以下情况下调用此技能:

  • 设计从源到消费层的端到端数据管道
  • 实施具有错误处理和数据质量检查的ETL/ELT工作流
  • 构建具有优化存储和查询功能的数据湖或数据仓库
  • 设置实时流处理(Kafka、Flink、Kinesis)
  • 优化数据基础设施成本(存储分层、计算效率)
  • 实施数据治理和合规性(GDPR、数据血缘)

在以下情况下不要调用:

  • 仅需要SQL查询优化(使用数据库优化器)
  • 机器学习模型开发(使用机器学习工程师或数据科学家)
  • 简单的数据分析或可视化(使用数据分析师)
  • 数据库管理任务(使用数据库管理员)
  • 无需数据转换的API集成(使用后端开发人员)

决策框架

管道架构选择

├─ 批处理?
│   ├─ 每日/每小时调度 → Airflow + dbt
│   │   优点:成熟的生态系统,基于SQL的转换
│   │   成本:低-中
│   │
│   ├─ 大规模(TB+) → Spark(EMR/Databricks)
│   │   优点:分布式处理,处理规模大
│   │   成本:中-高(计算密集型)
│   │
│   └─ 简单转换 → dbt Cloud 或 Fivetran
│       优点:托管,维护成本低
│       成本:中(SaaS定价)
│
├─ 流处理?
│   ├─ 事件流 → Kafka + Flink
│   │   优点:低延迟,精确一次语义
│   │   成本:高(始终在线的基础设施)
│   │
│   ├─ AWS原生 → Kinesis + Lambda
│   │   优点:无服务器,自动扩缩容
│   │   成本:可变(按使用付费)
│   │
│   └─ 简单CDC → Debezium + Kafka Connect
│       优点:数据库变更捕获
│       成本:中
│
└─ 混合(批处理 + 流处理)?
    └─ Lambda架构 或 Kappa架构
        Lambda:分离批处理/速度层
        Kappa:单一的流优先方法

数据存储选择

使用场景 技术 优点 缺点
结构化分析 Snowflake/BigQuery SQL,快速查询 规模扩大时成本高
半结构化 Delta Lake/Iceberg ACID,模式演进 复杂性
原始存储 S3/GCS 便宜,持久 无查询引擎
实时 Redis/DynamoDB 低延迟 分析能力有限
时间序列 TimescaleDB/InfluxDB 针对时间数据优化 特定使用场景

ETL 与 ELT 决策

因素 ETL(先转换) ELT(先加载)
数据量 小-中 大(TB+)
转换 复杂,加载前 基于SQL,在仓库内
延迟 较高 较低
成本 加载前计算 仓库计算
最适合 遗留系统 现代云数据仓库

核心模式

模式1:幂等分区覆盖

使用场景: 安全地重新运行批处理作业而不产生重复数据。

# PySpark示例:基于执行日期覆盖分区
def write_daily_partition(df, target_table, execution_date):
    (df
     .write
     .mode("overwrite")
     .partitionBy("process_date")
     .option("partitionOverwriteMode", "dynamic")
     .format("parquet")
     .saveAsTable(target_table))

模式2:缓慢变化维度类型2(SCD2)

使用场景: 跟踪变更历史而不丢失过去的状态。

-- dbt实现的SCD2
{{ config(materialized='incremental', unique_key='user_id') }}

SELECT 
    user_id, address, email, status, updated_at,
    LEAD(updated_at, 1, '9999-12-31') OVER (
        PARTITION BY user_id ORDER BY updated_at
    ) as valid_to
FROM {{ source('raw', 'users') }}

模式3:流处理的死信队列(DLQ)

使用场景: 处理格式错误的消息而不停止管道。

模式4:数据质量断路器

使用场景: 如果数据质量低于阈值,则停止管道执行。

质量检查清单

数据管道

  • [ ] 幂等(可安全重试)
  • [ ] 强制执行模式验证
  • [ ] 具有重试功能的错误处理
  • [ ] 数据质量检查自动化
  • [ ] 配置监控和告警
  • [ ] 记录数据血缘

性能

  • [ ] 管道在SLA内完成(例如,<1小时)
  • [ ] 在适用的情况下使用增量加载
  • [ ] 分区策略优化
  • [ ] 查询性能 <30 秒(P95)

成本优化

  • [ ] 实施存储分层(热/温/冷)
  • [ ] 配置计算自动扩缩容
  • [ ] 查询成本监控激活
  • [ ] 启用压缩(Parquet/ORC)

额外资源