数仓团队落地 Claude Code:从重复劳动到 AI 辅助的实战路径

2026-05-22 17 预计阅读时间:1 分钟
来源:my.oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:12 分钟

得物离线数仓团队最近完成了一件容易被忽视的事:各小组已基本实现 AI Coding 工具的全覆盖,主力工具是 Claude Code,搭配数据平台的 IDE 插件做辅助。覆盖本身不算新闻,但"数仓场景怎么让 AI 工具真正好用"这件事,值得拆开来看。

数仓的工作形态和业务开发有本质差异——SQL 为主、表结构驱动、重复性高、改动牵连广。通用 AI 编码工具直接搬过来,往往卡在"能写代码但不懂表"这一层。得物的做法是围绕 Claude Code 做了一层 Harness 工程,把数仓的上下文喂进去,让工具从"能写"变成"写得对"。

数仓的重复性到底在哪

离线数仓的日常,大致有三类高频重复:

  • DDL 与分层表创建:ODS → DWD → DWS → ADS,每一层建表语句结构相似,字段来源可追溯,但手写耗时且易漏注释。
  • ETL 脚本编写:同层之间的清洗逻辑、分区过滤、空值处理,模式固定,只是表名和字段不同。
  • 数据比对与校验 SQL:上线前后需要跑比对查询,SQL 结构雷同,每次换表换字段。

这三类工作有一个共同特征:逻辑模板可复用,变量部分可枚举。这正是 AI 工具擅长填补的空间——你给出模板和变量,它帮你拼装并校验。

Harness 工程的核心思路

Claude Code 本身是 CLI 形态的编码助手,能读项目文件、执行命令、自动编辑代码。但数仓场景下,它缺少两个关键上下文:

  1. 表结构元数据——不知道有哪些表、字段含义、分区策略。
  2. 团队规范——命名规则、分层约定、注释模板。

Harness 工程做的事情,就是把这两类上下文"挂"到 Claude Code 能读取的位置上,让每次交互都带着完整的数仓语境。

具体做法是:在数仓项目仓库中放置一组约定文件,Claude Code 启动时会自动读取,作为后续生成的依据。

实操:数仓项目中的 Claude Code Harness 配置

下面给出一个可直接改造使用的最小 Harness 配置方案。假设你的数仓项目是 Hive/Spark SQL 体系,项目结构如下:

data-warehouse/
├── CLAUDE.md              # Claude Code 全局指令文件
├── .claude/
│   └── settings.json      # 工具行为配置
├── metadata/
│   ├── tables.json        # 表结构元数据摘要
│   └── conventions.md     # 团队规范文档
├── sql/
│   ├── ods/
│   ├── dwd/
│   ├── dws/
│   └── ads/
└── scripts/
    └── etl/

1. CLAUDE.md——让 Claude Code 理解数仓语境

CLAUDE.md 是 Claude Code 启动时自动加载的项目级指令文件,放在仓库根目录即可生效:

# Data Warehouse Project — Claude Code Instructions

## 项目概述
本项目为得物离线数仓,基于 Hive/Spark SQL,采用 ODS → DWD → DWS → ADS 四层分层模型。

## 核心规则
- 表命名:{业务域}_{分层}_{实体描述},如 `trade_dwd_order_detail`
- 字段命名:snake_case,禁止拼音
- 每个DDL必须包含:字段注释、分区字段注释、表注释、创建人标记
- DWD层清洗规则:空值用默认值填充(字符串空串、数值0、日期'1970-01-01'),禁止直接丢弃
- 分区字段统一为 `dt`,格式 `yyyy-MM-dd`

## 上下文文件
- 表结构元数据见 `metadata/tables.json`
- 团队规范详见 `metadata/conventions.md`

## 生成要求
- 生成DDL时,先查阅 metadata/tables.json 中源表字段,确保字段来源可追溯
- 生成ETL脚本时,必须包含分区过滤条件 `WHERE dt = '${bizdate}'`
- 所有SQL语句末尾加分号,缩进用2空格

2. 表结构元数据摘要

metadata/tables.json 不需要全量字段,放核心表的关键字段即可,控制体积让 Claude Code 能高效读取:

{
  "ods": {
    "ods_trade_order": {
      "comment": "交易订单原始表",
      "partition": "dt",
      "key_fields": [
        {"name": "order_id", "type": "string", "comment": "订单ID"},
        {"name": "user_id", "type": "string", "comment": "买家用户ID"},
        {"name": "item_id", "type": "string", "comment": "商品ID"},
        {"name": "order_status", "type": "int", "comment": "订单状态(0待支付 1已支付 2已发货 3已完成 4已取消)"},
        {"name": "pay_amount", "type": "decimal(16,2)", "comment": "支付金额"},
        {"name": "create_time", "type": "timestamp", "comment": "下单时间"}
      ]
    }
  },
  "dwd": {
    "dwd_trade_order_detail": {
      "comment": "交易订单明细清洗表",
      "partition": "dt",
      "key_fields": [
        {"name": "order_id", "type": "string", "comment": "订单ID"},
        {"name": "user_id", "type": "string", "comment": "买家用户ID"},
        {"name": "item_id", "type": "string", "comment": "商品ID"},
        {"name": "order_status", "type": "int", "comment": "订单状态(清洗后: 1有效 0无效)"},
        {"name": "pay_amount", "type": "decimal(16,2)", "comment": "支付金额,空值填充0"},
        {"name": "create_time", "type": "timestamp", "comment": "下单时间"}
      ]
    }
  }
}

3. 用 Claude Code 生成 DDL + ETL 的实际命令

配置好上述文件后,在项目根目录启动 Claude Code,直接下达任务:

# 启动 Claude Code(已安装前提下)
cd data-warehouse
claude

# 在交互中输入指令,以下为示例 prompt:
> 根据 metadata/tables.json  ods_trade_order 的字段,
> 生成 dwd 层的 DDL 和对应的 ETL INSERT 脚本,
> 表名为 trade_dwd_order_detail,
> 清洗规则按 CLAUDE.md 中的 DWD 层规范执行。
> 输出文件放到 sql/dwd/ 目录下。

Claude Code 会读取 CLAUDE.mdmetadata/tables.json,生成符合团队规范的 DDL 和 ETL 脚本,并直接写入指定目录。生成的 DDL 大致如下:

-- sql/dwd/trade_dwd_order_detail_ddl.sql
CREATE TABLE IF NOT EXISTS trade_dwd_order_detail (
    order_id      STRING      COMMENT '订单ID',
    user_id       STRING      COMMENT '买家用户ID',
    item_id       STRING      COMMENT '商品ID',
    order_status  INT         COMMENT '订单状态(清洗后: 1有效 0无效)',
    pay_amount    DECIMAL(16,2) COMMENT '支付金额,空值填充0',
    create_time   TIMESTAMP   COMMENT '下单时间'
)
COMMENT '交易订单明细清洗表 — 创建人: ai-assisted'
PARTITIONED BY (dt STRING COMMENT '日期分区 yyyy-MM-dd')
STORED AS ORC;

对应的 ETL 脚本:

-- sql/dwd/trade_dwd_order_detail_etl.sql
INSERT OVERWRITE TABLE trade_dwd_order_detail PARTITION (dt = '${bizdate}')
SELECT
    order_id,
    user_id,
    item_id,
    CASE WHEN order_status IN (1,2,3) THEN 1 ELSE 0 END AS order_status,
    COALESCE(pay_amount, 0)        AS pay_amount,
    create_time
FROM ods_trade_order
WHERE dt = '${bizdate}';

4. 数据比对 SQL 的批量生成

上线前比对是另一类高频重复。同样通过 Claude Code 批量处理:

>  dwd_trade_order_detail 生成上线比对SQL,
> 比对新老表同分区下的总行数、pay_amount 总额、order_status 分布,
> 输出到 scripts/verify/ 目录。

Claude Code 会根据表结构自动生成含 COUNT、SUM、GROUP BY 的比对查询,省去每次手拼的过程。

覆盖落地中的几个实际问题

得物在推进覆盖时,并不是"装上工具就完事",有几个值得注意的摩擦点:

元数据维护成本。 tables.json 需要随表结构变更同步更新。如果放任它过时,Claude Code 生成的 SQL 就会基于错误字段。实践中用数据平台的 IDE 插件做辅助——插件能直连元数据库,实时拉取表结构,弥补静态文件的滞后。

生成结果的校验不能省。 AI 生成的 SQL 语法正确不代表逻辑正确。分区条件遗漏、清洗规则偏差、字段映射错位,这些都需要人工复核。团队的做法是:生成后必须跑一遍比对 SQL,确认结果一致才上线。

复杂逻辑仍需人工主导。 比如跨多表的复杂关联、业务规则密集的 DWS 聚合,Claude Code 能给出框架但细节容易出错。这类任务用它做初稿、人工做精修,比纯手写快,但不应期望一步到位。

落地 Checklist

如果你的数仓团队也在考虑引入 Claude Code 或类似工具,可以按这个清单推进:

  • [ ] 仓库根目录放置 CLAUDE.md,写清分层规则、命名规范、生成要求
  • [ ] 准备核心表的元数据摘要文件(不必全量,覆盖高频操作涉及的表即可)
  • [ ] 确定哪些任务交给 AI 生成(DDL、简单 ETL、比对 SQL),哪些仍需人工主导(复杂聚合、跨域关联)
  • [ ] 建立生成结果的校验流程——至少跑比对 SQL 确认数据一致
  • [ ] 搭配数据平台 IDE 插件,解决元数据实时性问题
  • [ ] 定期更新元数据文件,避免上下文过时导致生成偏差

AI Coding 工具在数仓场景的价值,不在于替代人写复杂逻辑,而在于把重复性模板工作从"每次手拼"变成"一次配置、批量生成"。得物的 Harness 工程思路,本质就是把数仓的规则和上下文变成 AI 工具能读懂的配置,让生成结果从"看起来像"逼近"跑起来对"。


相关推荐