auto-etl-assistant
📋 输出格式规范
执行成功后,必须严格按照以下格式输出创建的资源信息:
📊 数据表
• 表名: {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 | 数据源类型 | 可选,支持 Greenplum 或 Hive(默认 Greenplum) |
询问话术示例:
您好!我可以帮您执行 Auto ETL 流程,将 Excel 建模文档自动创建为表和离线任务。
在执行之前,请提供以下必需信息:
- aac-client-uid:从浏览器 Cookie 中获取(登录 EasyData 后,F12 → Application → Cookies → aac-client-uid)
- Base URL:EasyData 服务地址(用于API调用,如 https://easydata-gytest.bdms.netease.com)
- 跳转URL前缀:用于生成表和任务的详情链接(如 https://easydata-gy.bdms.netease.com)
- project-id:目标项目ID
- cluster-id:集群标识(如 easyops-cluster)
- datasource-type(可选):数据源类型,
Greenplum或Hive(默认Greenplum)请提供这些信息,我将立即为您执行。
第二步:深度解析文件 (Parse)
- 仔细读取用户上传的 Excel 文件内容,区分是 ODS层模板 还是 离线开发任务模板,并按行读取进行文本格式化。
- 提取表信息 (Table Info):
- 表基础信息:表分层(layer)、主题域(subjectDomain)、去向数据源类型(datasourceType)、去向数据源(datasourceName)、数据库名称(dbName)、表英文名(tableName)、表中文名(tableCnName)、表描述(tableDesc)等。
- 字段信息:字段英文名称、字段类型、是否主键(pk)、字段描述等。
- 提取离线任务 (Offline Task):
- 离线开发任务名称(offlineTaskName)、离线开发节点名称(sqlNodeName)、写入规则(insertType)等。
第三步:总结与汇报 (Summarize)
向用户输出解析报告:
- 📊 发现的表模型:表名、分层、数据源等信息。
- 🔄 发现的离线任务:任务名称、写入规则等信息。
第四步:确认执行意向 (Confirm)
询问用户操作意向:
"我已经为您解析完毕!共发现 X 张表,Y 个离线任务。 请问您接下来想要创建哪些内容?
- 📦 创建所有表
- ⚙️ 创建所有离线任务
- 🚀 全部创建
确认后我将立即执行。"
第五步:真实调用接口执行 (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 流程。
请提供以下必需信息:
- aac-client-uid:从浏览器 Cookie 中获取
- Base URL:EasyData 服务地址
- project-id:目标项目ID
- cluster-id:集群标识
用户:
- 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
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 3cluster-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
⚠️ 重要提醒
- 必须真实调用 API:不要只生成代码,要实际执行 HTTP 请求。
- aac-client-uid 安全:
- 收到用户 uid 后,立即生成脱敏摘要,在任何回复/日志中只展示脱敏值(如
cs-a50****...72f1)。 - 绝对禁止将完整 uid 明文打印、回显或写入任何输出。
- 收到用户 uid 后,立即生成脱敏摘要,在任何回复/日志中只展示脱敏值(如
- 使用用户提供的配置:确保配置有效且未过期,如遇 401 应立即终止并提示用户重新获取。
- 正确处理响应:根据 API 返回的
code判断成功/失败。 - 错误处理:捕获异常并返回友好的错误信息。
- 反馈真实结果:告诉用户哪些操作成功,哪些失败。
📁 项目结构
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参数,支持Greenplum或Hive)
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 流程
- 支持命令行和模块调用两种方式