skills/skills.netease.im/auto-etl-assistant

auto-etl-assistant

SKILL.md

📋 输出格式规范

执行成功后,必须严格按照以下格式输出创建的资源信息:

📊 数据表
• 表名: {tableName}
• 数据库: {dbName}
• 数据源: {datasourceName}
• 中文名: {tableCnName}
• 生命周期: {lifecycle}
• 链接: {tableUrl}

⚙️ 离线任务
• 任务名: {offlineTaskName}
• 节点名: {offlineNodeName}
• 目录: {taskDirectory}
• 链接: {offlineTaskUrl}

🔍 质量任务
• 任务名: {qualityMonitorName}
• 关联表: {tableName}
• 链接: {qualityMonitorUrl}

字段说明:

  • tableName: 表英文名,从建表接口返回
  • dbName: 数据库名称,从 /ed/api/history/v1/record/table/list 接口(type=table)返回
  • datasourceName: 数据源名称,从 /ed/api/history/v1/record/table/list 接口(type=table)返回
  • tableCnName: 表中文名,从 /ed/api/history/v1/record/table/list 接口(type=table)返回
  • lifecycle: 生命周期,从 /ed/api/history/v1/record/table/list 接口(type=table)返回
  • tableUrl: 表详情页链接,从 /ed/api/history/v1/record/table/list 接口(type=table)返回的 tableAddress 字段
  • offlineTaskName: 离线任务名称,从 /ed/api/history/v1/record/table/list 接口(type=task)返回的 offlineTaskName 字段
  • offlineNodeName: 离线节点名称,从 /ed/api/history/v1/record/table/list 接口(type=task)返回的 offlineNodeName 字段
  • taskDirectory: 任务目录,从 /ed/api/history/v1/record/table/list 接口(type=task)返回的 taskDirectory 字段
  • offlineTaskUrl: 离线任务跳转地址,从 /ed/api/history/v1/record/table/list 接口(type=task)返回的 offlineTaskAddress 字段
  • qualityMonitorName: 质量任务名称,从 /ed/api/history/v1/record/table/list 接口(type=quality)返回的 qualityMonitorName 字段
  • qualityMonitorUrl: 质量任务跳转地址,从 /ed/api/history/v1/record/table/list 接口(type=quality)返回的 qualityMonitorAddress 字段

数据来源:

  • 数据表信息:从 /ed/api/history/v1/record/table/list 接口获取(type=table
  • 离线任务信息:从 /ed/api/history/v1/record/table/list 接口获取(type=task
  • 质量任务信息:从 /ed/api/history/v1/record/table/list 接口获取(type=task,同一接口同时返回)
  • 禁止从其他来源获取或生成任务信息

接口返回示例(type=task):

{
  "code": 0,
  "result": {
    "list": [
      {
        "offlineTaskName": "dwd_gp_etl_6_df",
        "offlineNodeName": "dwd_gp_etl_1_df2",
        "offlineTaskAddress": "/easydev/main#/activity/develop?...",
        "taskDirectory": "/赵豪哲",
        "qualityMonitorName": "auto_etl_greenplum_5538_public_dwd_gp_etl_1_df_20",
        "qualityMonitorAddress": "/dataquality/audit/detail/11320?..."
      }
    ]
  }
}

Auto ETL 智能助手 (Auto ETL Assistant)

🎉 v2.0 更新:现已支持 aac-client-uid 认证方式,配置持久化,使用更便捷!

🎯 技能目标

替代传统的"页面上传文件"模式,提供 AI 原生的对话式 Auto ETL 体验。当用户将维度建模的 Excel 设计文档直接发送给 AI 时,AI 负责自动解析文件、提取表结构和离线任务信息,并通过交互式对话主动询问用户需求。确认后,AI 会真实调用接口,将对应的表、任务信息直接创建到开发环境中。

✨ 新特性(v2.0)

  • 🔑 aac-client-uid 认证:使用网易内部统一认证标识,替代完整的 Cookie 字符串
  • 💾 配置持久化:配置信息保存到 ~/.auto_etl_session.json,无需每次重复输入
  • 🚀 简化调用:配置一次,后续直接执行
  • 🔒 安全脱敏:日志中自动脱敏显示 aac-client-uid
  • 🔄 HTTP 客户端改造:使用 urllib.request 替代 requests,与 easy-dasset-table 保持一致

📋 触发条件

当用户在对话框中直接发送/上传了包含数据表设计、ETL 映射或维度建模的 Excel/CSV 文件,并表达了"解析"、"生成表"、"Auto ETL"等意图时触发。

🔄 工作流程 (Workflow)

第一步:询问必需信息 (Ask Required Info)

在执行任何操作之前,必须先询问用户以下必需信息:

必需信息 说明 备注
aac-client-uid 网易内部认证标识 必须从浏览器 Cookie 中获取
Base URL EasyData 服务地址(用于API调用) 必须由用户提供,无默认值
跳转URL前缀 用于生成表和任务的详情链接 必须由用户提供,无默认值
project-id 项目ID 必须由用户提供,无默认值
cluster-id 集群标识 必须由用户提供,无默认值
datasource-type 数据源类型 可选,支持 GreenplumHive(默认 Greenplum

询问话术示例

您好!我可以帮您执行 Auto ETL 流程,将 Excel 建模文档自动创建为表和离线任务。

在执行之前,请提供以下必需信息:

  1. aac-client-uid:从浏览器 Cookie 中获取(登录 EasyData 后,F12 → Application → Cookies → aac-client-uid)
  2. Base URL:EasyData 服务地址(用于API调用,如 https://easydata-gytest.bdms.netease.com)
  3. 跳转URL前缀:用于生成表和任务的详情链接(如 https://easydata-gy.bdms.netease.com)
  4. project-id:目标项目ID
  5. cluster-id:集群标识(如 easyops-cluster)
  6. datasource-type(可选):数据源类型,GreenplumHive(默认 Greenplum

请提供这些信息,我将立即为您执行。

第二步:深度解析文件 (Parse)

  1. 仔细读取用户上传的 Excel 文件内容,区分是 ODS层模板 还是 离线开发任务模板,并按行读取进行文本格式化。
  2. 提取表信息 (Table Info)
    • 表基础信息:表分层(layer)、主题域(subjectDomain)、去向数据源类型(datasourceType)、去向数据源(datasourceName)、数据库名称(dbName)、表英文名(tableName)、表中文名(tableCnName)、表描述(tableDesc)等。
    • 字段信息:字段英文名称、字段类型、是否主键(pk)、字段描述等。
  3. 提取离线任务 (Offline Task)
    • 离线开发任务名称(offlineTaskName)、离线开发节点名称(sqlNodeName)、写入规则(insertType)等。

第三步:总结与汇报 (Summarize)

向用户输出解析报告:

  • 📊 发现的表模型:表名、分层、数据源等信息。
  • 🔄 发现的离线任务:任务名称、写入规则等信息。

第四步:确认执行意向 (Confirm)

询问用户操作意向:

"我已经为您解析完毕!共发现 X 张表,Y 个离线任务。 请问您接下来想要创建哪些内容?

  1. 📦 创建所有表
  2. ⚙️ 创建所有离线任务
  3. 🚀 全部创建

确认后我将立即执行。"

第五步:真实调用接口执行 (Execute)

这是关键步骤:AI 必须真实调用 API 接口,而不是仅生成代码。

当用户提供以下信息后,立即执行:

  • aac-client-uid: 用于 API 认证
  • Base URL: EasyData 服务地址
  • project-id: 项目ID
  • cluster-id: 集群ID
  • Excel 文件路径: 维度建模 Excel 文件

完整6步执行流程

步骤 状态 说明
1 ✅ 成功 文件上传并解析成功
2 ✅ 成功 解析结果查询成功
3 ✅ 成功 获取建表数据列表成功
4 ✅ 成功 批量提交建表工单成功
5 ✅ 成功 工单审批成功
6 ✅ 成功 批量创建离线任务成功

🚀 快速开始

方式一:命令行使用(推荐)

1. 首次配置

python scripts/run_autoetl.py config \
  --uid <your-aac-client-uid> \
  --base-url <easydata-url> \
  --project-id <project-id> \
  --cluster <cluster-id>

示例:

python scripts/run_autoetl.py config \
  --uid cs-a501d82b10504084a0979bcac88f72f1 \
  --base-url https://easydata-gytest.bdms.netease.com \
  --project-id 3 \
  --cluster easyops-cluster

如果需要配置不同的跳转URL前缀:

python scripts/run_autoetl.py config \
  --uid cs-a501d82b10504084a0979bcac88f72f1 \
  --base-url https://easydata-gytest.bdms.netease.com \
  --jump-url-prefix https://easydata-gy.bdms.netease.com \
  --project-id 3 \
  --cluster easyops-cluster

如果需要配置 Hive 数据源(默认是 Greenplum):

python scripts/run_autoetl.py config \
  --uid cs-a501d82b10504084a0979bcac88f72f1 \
  --base-url https://easydata-gytest.bdms.netease.com \
  --jump-url-prefix https://easydata-gy.bdms.netease.com \
  --project-id 3 \
  --cluster easyops-cluster \
  --datasource-type Hive

2. 执行 Auto ETL

python scripts/run_autoetl.py run --excel /path/to/your/excel.xlsx

可选参数:

# 仅建表
python scripts/run_autoetl.py run --excel /path/to/excel.xlsx --mode table

# 仅创建离线任务
python scripts/run_autoetl.py run --excel /path/to/excel.xlsx --mode task

# 使用 Hive 数据源(覆盖配置)
python scripts/run_autoetl.py run --excel /path/to/excel.xlsx --datasource-type Hive

3. 查看配置状态

python scripts/run_autoetl.py status

方式二:作为 Python 模块使用

from scripts.executor import AutoETLExecutor

# 创建执行器
executor = AutoETLExecutor(
    aac_client_uid="your-aac-client-uid",
    base_url="https://easydata-xxx.bdms.netease.com",
    project_id="3",
    cluster_id="easyops-cluster"
)

# 执行完整 6 步流程
result = executor.run("/path/to/excel.xlsx", mode="all")
print(result)

📖 完整调用流程

步骤概览

步骤 说明 API 端点 状态码
1 上传并解析 Excel 文件 /ed/api/workorder/v1/upload/analysis -
2 查询解析结果(轮询) /ed/api/task/v1/get 0=等待, 1=运行, 2=成功, 3=失败
3 获取建表数据列表 /ed/api/workorder/v1/upload/ods/create-table/list -
4 批量提交建表工单 /ed/api/workorder/v1/upload/item/createAndCommitBatch -
5 审批工单 /ed/api/workorder/v1/{workorderId}/approve 2=通过
6 批量创建离线任务 /ed/api/workorder/v1/upload/item/offline-task/create-batch -

🔧 执行器使用

认证方式

使用 aac-client-uid 进行认证,在 HTTP 请求头中自动添加:

Cookie: aac-client-uid=<your-uid>

HTTP 客户端

v2.0 使用 urllib.request 替代 requests,特点:

  • ✅ 无需额外安装依赖(Python 标准库)
  • ✅ 自动处理 SSL 证书验证(开发环境友好)
  • ✅ 支持 gzip 压缩响应
  • ✅ 与 easy-dasset-table 保持一致

配置持久化

配置信息保存在 ~/.auto_etl_session.json,格式如下:

{
  "aac_client_uid": "cs-xxx...",
  "base_url": "https://easydata-xxx.bdms.netease.com",
  "project_id": "3",
  "cluster_id": "easyops-cluster"
}

💬 对话示例

用户: 上传 Excel 文件

AI:

您好!我可以帮您执行 Auto ETL 流程。

请提供以下必需信息:

  1. aac-client-uid:从浏览器 Cookie 中获取
  2. Base URL:EasyData 服务地址
  3. project-id:目标项目ID
  4. cluster-id:集群标识

用户:

AI(确认配置):

已收到您的配置信息,请确认:

参数
aac-client-uid cs-a50****...72f1
Base URL https://easydata-gytest.bdms.netease.com
跳转URL前缀 https://easydata-gy.bdms.netease.com(如未提供则使用Base URL)
project-id 3
cluster-id easyops-cluster

确认无误后我将立即执行,请回复「确认」或「继续」。

用户: 确认

AI(执行并反馈):

正在使用 aac-client-uid cs-a50****...72f1 调用 API 创建...

[步骤 1/6] 上传并解析Excel文件... 成功 (任务ID: 12345)
[步骤 2/6] 查询解析结果... 成功
[步骤 3/6] 获取建表数据列表... 成功 (2 个表)
[步骤 4/6] 批量提交建表工单... 成功 (工单ID: WO-20250924-001)
[步骤 5/6] 审批工单... 成功
[步骤 6/6] 批量创建离线任务... 成功 (2 个任务)

全部创建成功!

  • 表: dwd_table1_di, dwd_table2_di
  • 工单: WO-20250924-001
  • 离线任务: dwd_table1_df, dwd_table2_df

⚠️ 重要提醒

  1. 必须真实调用 API:不要只生成代码,要实际执行 HTTP 请求。
  2. aac-client-uid 安全
    • 收到用户 uid 后,立即生成脱敏摘要,在任何回复/日志中只展示脱敏值(如 cs-a50****...72f1)。
    • 绝对禁止将完整 uid 明文打印、回显或写入任何输出。
  3. 使用用户提供的配置:确保配置有效且未过期,如遇 401 应立即终止并提示用户重新获取。
  4. 正确处理响应:根据 API 返回的 code 判断成功/失败。
  5. 错误处理:捕获异常并返回友好的错误信息。
  6. 反馈真实结果:告诉用户哪些操作成功,哪些失败。

📁 项目结构

auto-etl-assistant/
├── SKILL.md           # Skill 定义和使用文档
├── README.md          # 详细 API 文档
├── scripts/           # 可执行代码
│   ├── executor.py    # 核心执行器模块(使用 aac-client-uid 认证)
│   └── run_autoetl.py # 命令行工具(支持配置持久化)
└── assets/            # 模板、资源
    └── *.xlsx         # 测试用 Excel 文件

📝 更新日志

v2.1.0

  • ✅ 支持 Hive 表创建(新增 --datasource-type 参数,支持 GreenplumHive

v2.0.0

  • ✅ 使用 aac-client-uid 替代完整 Cookie 进行认证
  • ✅ 添加配置持久化功能(~/.auto_etl_session.json
  • ✅ 简化命令行调用方式(config / run / status 子命令)
  • ✅ 自动脱敏显示敏感信息
  • HTTP 客户端改造:使用 urllib.request 替代 requests
  • SSL 处理:自动忽略证书验证,支持 gzip 解压

v1.0.0

  • 初始版本
  • 支持完整的 6 步 Auto ETL 流程
  • 支持命令行和模块调用两种方式
Installs
2
First Seen
Apr 21, 2026