| name | execute-ad-hoc-task |
| description | 执行 Dataphin 即席查询任务(临时跑 SQL / 脚本 / 查元信息,不创建持久化任务)。触发场景:执行 SQL / 即席查询 / 临时跑一段代码 / 建表 / 查数据源表 / execute-ad-hoc-task / DATABASE_SQL / MaxCompute_SQL / ad-hoc。关键点:OperatorType 为字符串枚举(MySQL/Oracle/PostgreSQL/SQLServer 统一用 DATABASE_SQL;MaxCompute 用 MaxCompute_SQL);DATABASE_SQL 必须同时传 --data-source-id 和 --data-source-schema;MaxCompute_SQL 只需 --project-id;参数名是 --code 不是 --script;get-ad-hoc-task-result 的 --sub-task-id 从 0 开始;结果可能延迟几秒才能取到;MaxCompute 结果格式为 [["_c0","_c1",...],[1,2,...]]。触发词:执行 SQL、即席查询、临时跑代码、建表、execute-ad-hoc-task、DATABASE_SQL、MaxCompute_SQL、ad-hoc、查表结构。
|
即席查询任务 Skill
1. Scenario Description
场景:需要临时执行一段 SQL / 脚本 / 查元信息,不想创建持久化任务,只想一次性运行并获取结果。
本 Skill 覆盖常见 OperatorType 的提交、结果获取、日志排查全流程。
Architecture
用户请求 → 确认参数 → execute-ad-hoc-task 提交任务
→ get-ad-hoc-task-log 查看运行状态
→ get-ad-hoc-task-result 获取执行结果
涉及 Dataphin OpenAPI
ExecuteAdHocTask — 提交即席查询任务
GetAdHocTaskResult — 获取即席查询结果
GetAdHocTaskLog — 获取即席查询日志
ListDataSourceWithConfig — 查找可用的数据源 ID
2. Installation
aliyun plugin install --names aliyun-cli-dataphin-public
aliyun dataphin-public --help
详见 CLI 安装指南。
3. Environment Variables
凭证与环境变量由父 skill alibabacloud-dataphin-skills 统一声明并预检(父 §3 + §4 Authentication + §8 Step 0,先于路由到本 skill 执行);本 skill 不重复声明。
4. Authentication
Pre-check: Credentials Required
Security Rules:
- NEVER 读取、回显或打印凭证环境变量(禁止对 AccessKey ID / Secret 做任何输出或日志)
- NEVER 要求用户在本会话或命令行直接输入 AK/SK
- NEVER 使用
aliyun configure set 写入字面量凭证
- ONLY 使用
aliyun configure list 检查凭证状态
aliyun configure list
检查输出中是否存在有效 profile(AK、STS 或 OAuth 身份)。
如果没有有效 profile,请在此停止。
- 从 Alibaba Cloud Console 获取凭证
- 在会话外配置(终端执行
aliyun configure,或在 shell profile 中设置环境变量)
- 重新运行
aliyun configure list 确认有效后再继续
Pre-check: Aliyun CLI plugin update required
[MUST] run aliyun configure set --auto-plugin-install true to enable automatic plugin installation.
[MUST] run aliyun plugin update to ensure that any existing plugins are always up-to-date.
执行前确认 CLI 与插件版本:
aliyun version
aliyun plugin list
5. RAM Policy
[MUST] Permission Failure Handling: When any command or API call fails due to permission errors at any point during execution, follow this process:
- Read
../../ram-policies.md to get the full list of permissions required by this SKILL
- Use
ram-permission-diagnose skill to guide the user through requesting the necessary permissions
- Pause and wait until the user confirms that the required permissions have been granted
本 skill 最小权限见 ../../ram-policies.md。
6. IMPORTANT: Parameter Confirmation
执行即席查询前,任何未由用户显式提供的参数都必须主动询问用户,禁止猜测或假设默认值(除 --env 可默认 PROD 外)。
必须获取的参数
| 参数 | 说明 | 是否必须询问 |
|---|
--env | DEV 或 PROD;若用户未指定,可默认 PROD,但需告知用户 | 可选确认 |
--tenant-id | 租户 ID;优先从 profile 读取,若 profile 未配置则必须询问 | 条件必须 |
--project-id | 项目 ID;优先从 profile 读取,若 profile 未配置则必须询问 | 条件必须 |
--operator-type | 任务类型,必须询问用户 | 必须 |
--code | 要执行的脚本/SQL,必须询问用户 | 必须 |
--data-source-id | 数据源 ID;当 --operator-type 为 DATABASE_SQL 时必须询问 | 条件必须 |
--data-source-schema | Schema/库名;当 --operator-type 为 DATABASE_SQL 时必须询问 | 条件必须 |
询问模板
当用户说"执行 SQL"但未给出具体信息时,按以下顺序追问:
- 环境确认:"请在 DEV 还是 PROD 环境执行?(默认 PROD)"
- 项目确认:"请提供项目 ID 或项目名。"
- 任务类型:"请指定任务类型,例如 MaxCompute_SQL、DATABASE_SQL(PostgreSQL/MySQL/Oracle/SQLServer)、HOLOGRES_SQL、Shell 等。"
- 执行代码:"请提供要执行的 SQL 或脚本内容。"
- 数据源(仅数据库类需要):"请提供数据源 ID 和 Schema/库名。"
参数获取完成后再执行
在所有必填参数确认完整之前,禁止调用 execute-ad-hoc-task。
7. 完整命令链
TENANT_ID=<tenant-id>
PROJECT_ID=<project-id>
ENV=PROD
USER_AGENT="AlibabaCloud-Agent-Skills/execute-ad-hoc-task/{session-id}"
aliyun dataphin-public list-data-source-with-config --dataphin-profile <p> --env $ENV \
--project-id $PROJECT_ID --tenant-id $TENANT_ID \
--page 1 --page-size 20 \
--user-agent "$USER_AGENT" --format json \
| jq '.PageResult.DataSourceList[] | {
Name: .ProdDataSourceInfo.Name,
Type: .ProdDataSourceInfo.Type,
ProdId: .ProdDataSourceInfo.Id,
DevId: .DevDataSourceInfo.Id
}'
aliyun dataphin-public execute-ad-hoc-task --dataphin-profile <p> --env $ENV \
--project-id $PROJECT_ID --tenant-id $TENANT_ID \
--operator-type MaxCompute_SQL \
--code "SELECT 1, 2, 3, 4" \
--user-agent "$USER_AGENT" --format json \
| jq '.ExecuteResult | {TaskId, SubTaskCount}'
aliyun dataphin-public execute-ad-hoc-task --dataphin-profile <p> --env $ENV \
--project-id $PROJECT_ID --tenant-id $TENANT_ID \
--operator-type DATABASE_SQL \
--data-source-id "<data-source-id-string>" \
--data-source-schema public \
--code "SELECT 1, 2, 3, 4" \
--user-agent "$USER_AGENT" --format json \
| jq '.ExecuteResult | {TaskId, SubTaskCount}'
TASK_ID=<上一步返回的 TaskId>
sleep 5
aliyun dataphin-public get-ad-hoc-task-result --dataphin-profile <p> --env $ENV \
--project-id $PROJECT_ID --tenant-id \
--task-id --sub-task-id 0 \
--user-agent --format json \
| jq -r
aliyun dataphin-public get-ad-hoc-task-log --dataphin-profile <p> -- \
--project-id --tenant-id \
--task-id --sub-task-id 0 --offset 0 \
--cli-query \
--user-agent --format json
8. Observability
本 Skill 属于 alibabacloud-dataphin-skills 套件,继承父 Skill alibabacloud-dataphin-skills 的 session-id,子 Skill 不再重新生成。
所有调用 Alibaba Cloud API 的 aliyun 命令必须携带:
--user-agent AlibabaCloud-Agent-Skills/execute-ad-hoc-task/{session-id}
其中 {session-id} 替换为父 Skill 生成的 32 位小写十六进制字符串。
9. OperatorType 与必填参数
execute-ad-hoc-task 使用字符串枚举(如 MaxCompute_SQL、DATABASE_SQL)。
MySQL / Oracle / PostgreSQL / SQLServer 等关系型数据库统一使用 DATABASE_SQL。
💡 术语:ODPS(Open Data Processing Service)是 MaxCompute 的旧名称,MaxCompute_SQL 对应旧称 ODPS_SQL。
| OperatorType(字符串) | DataSourceId | 说明 |
|---|
MaxCompute_SQL | ✗ | 使用项目绑定的 MaxCompute 计算源,仅需 --project-id |
Hive_SQL / Hive_SQL_23X / COMMON_HIVE_SQL | ✗ | Hive 计算源 |
HOLOGRES_SQL | ✓ | Hologres 数据源 |
STARROCKS_SQL | ✓ | StarRocks 数据源 |
SPARK_SQL / SPARK_SQL_ON_MAX_COMPUTE / SPARK_SQL_ON_HIVE | ✗ | Spark SQL |
Shell | ✗ | Shell 脚本 |
Python / Python37x / Python311x | ✗ | Python 脚本 |
DATABASE_SQL | ✓ 必填 + Schema | MySQL / Oracle / SQLServer / PostgreSQL 等关系型数据库,需同时传 --data-source-schema |
DataSourceId / Schema / Catalog 规则
| 场景 | 必填参数 |
|---|
| MaxCompute_SQL / Shell / Python 等非 DB 类 | 仅 --project-id |
| Hive / OneService / Hologres / StarRocks 等 | 仅 --project-id(由项目计算源决定) |
| MySQL / Oracle / SQLServer / PostgreSQL 等 | --data-source-id + --data-source-schema |
| Presto 等 | --data-source-id + --data-source-catalog |
10. 结果获取与格式
获取结果命令
aliyun dataphin-public get-ad-hoc-task-result \
--dataphin-profile <p> --env $ENV \
--project-id $PROJECT_ID --tenant-id $TENANT_ID \
--task-id $TASK_ID --sub-task-id 0 \
--user-agent "$USER_AGENT" --format json
常见结果格式
MaxCompute_SQL / Hive 类:
[["_c0","_c1","_c2","_c3"],[1,2,3,4]]
- 第一行为列名(未命名列默认
_c0, _c1...)
- 第二行起为数据行
DATABASE_SQL(PostgreSQL):
COLUMN_TYPE:[{"name":"?column?","type":"int4"},...]
[["?column?","?column?","?column?","?column?"],[1,2,3,4]]
- 首行包含 COLUMN_TYPE 元数据
- 随后为
[headers, rows...]
结果延迟
get-ad-hoc-task-result 在任务刚结束时可能返回空 Result(或 ExecuteResult 不存在),因为输出数据可能尚未上传到结果服务。建议:
- 先通过
get-ad-hoc-task-log 确认 TaskStatus: SUCCESS
- 再调用
get-ad-hoc-task-result,必要时等待 3-10 秒
11. 常见报错
| 报错 | 原因 | 解决 |
|---|
unknown option '--script' | CLI 不存在 --script 参数 | 使用 --code |
Missing required argument: data-source-id | DATABASE_SQL 未传数据源 | 加 --data-source-id 和 --data-source-schema |
InvalidDataSource / 数据源不存在 | --data-source-id 错误或环境不匹配 | 用 list-data-source-with-config 确认 |
InvalidOperatorType | OperatorType 拼写错误或用了数值 | 使用字符串枚举,如 MaxCompute_SQL |
get-ad-hoc-task-result 返回空 | 任务尚未完成或结果未上传 | 先查日志确认 SUCCESS,再重试 |
SubTaskId not found | --sub-task-id 错误 | sub-task-id 从 0 开始 |
12. ✗ 不要做
- ✗ 用
--script 代替 --code
- ✗ DATABASE_SQL 只传
--data-source-id 不传 --data-source-schema
- ✗ 用数值枚举(如
5、998)代替字符串 OperatorType
- ✗
--sub-task-id 从 1 开始(正确从 0 开始)
- ✗ 任务一提交就立即取结果,不查日志确认状态
- ✗ 未带
--user-agent 调用 aliyun API 命令
- ✗ 硬编码真实 tenant-id / project-id / data-source-id
13. 相关命令
aliyun dataphin-public execute-ad-hoc-task — 提交即席查询
aliyun dataphin-public get-ad-hoc-task-result — 获取即席查询结果
aliyun dataphin-public get-ad-hoc-task-log — 获取即席查询日志
aliyun dataphin-public list-data-source-with-config — 查找可用的数据源
submit-batch-task(经套件入口路由加载) — 即席查询验证通过后转成持久化任务
name: execute-ad-hoc-task
description: |-
执行即席查询任务(临时跑 SQL / 建表 / 查元信息,不创建持久化任务)。 触发场景:执行 SQL / 即席查询 / 临时跑一段代码 / 建表语句 / 查数据源表 / execute-ad-hoc-task / DATABASE_SQL / MaxCompute_SQL。 OperatorType 为字符串枚举:MySQL/Oracle/PostgreSQL/SQLServer 统一用 DATABASE_SQL;MaxCompute 用 MaxCompute_SQL。 SQL 类需填 DataSourceId,MaxCompute_SQL 不需要。参数名是 --code 不是 --script。 触发词:执行 SQL、即席查询、临时跑代码、建表、execute-ad-hoc-task、DATABASE_SQL、MaxCompute_SQL、ad-hoc、查表结构。
即席查询任务 skill
适用场景
- 临时跑一段 SQL / 脚本验证数据或查元信息
- 不想建持久化任务,只想一次性执行
- 查询 MySQL、Oracle、PostgreSQL、SQLServer 等数据库:使用
--operator-type DATABASE_SQL,必须同时传 --data-source-id 和 --data-source-schema
命令 & 官方文档
顶层参数骨架
--tenant-id <int> 必填 | 租户 ID
--project-id <int> 必填 | 项目 ID(profile 已配置可省略)
--operator-type <string> 必填 | 任务类型(字符串枚举,见下表)
--code <string> 必填 | 任务脚本
--data-source-id <string> 数据库 SQL 类必填 | 数据源 ID
--data-source-catalog <string> 可选 | Presto 等需设置 Catalog 的数据源
--data-source-schema <string> 可选 | Oracle/MySQL 等需设置 Schema 的数据源
--param-list <JSON array> 可选 | 运行参数,${var} 形式注入 Code
OperatorType 枚举
execute-ad-hoc-task 使用字符串枚举(如 MaxCompute_SQL、DATABASE_SQL)。
MySQL / Oracle / PostgreSQL / SQLServer 等关系型数据库统一使用 DATABASE_SQL。
💡 术语:ODPS(Open Data Processing Service)是 MaxCompute 的旧名称,MaxCompute_SQL 对应旧称 ODPS_SQL,配置项、文档中仍可能出现 odps 字样。
| OperatorType(字符串) | Code 语言 | DataSourceId | 说明 |
|---|
MaxCompute_SQL | MaxCompute SQL | ✗ | 使用项目绑定的 MaxCompute 计算源 |
Hive_SQL | Hive SQL | ✗ | Hive 数据源 |
Hive_SQL_23X | Hive 2.3.x SQL | ✗ | |
HIVE_SQL_FUSION_INSIGHT_80X | FusionInsight 8.x SQL | ✗ | |
COMMON_HIVE_SQL | 通用 Hive SQL | ✗ | |
MaxCompute_MR | MaxCompute MapReduce | ✗ | |
SPARK_SQL_ON_MAX_COMPUTE | Spark SQL on MaxCompute | ✗ | |
SPARK_JAR_ON_MAX_COMPUTE | Spark JAR on MaxCompute | ✗ | |
SPARK_SQL_ON_HIVE | Spark SQL on Hive | ✗ | |
Spark_JAR_ON_HIVE | Spark JAR on Hive | ✗ | |
Shell | Shell 脚本 | ✗ | |
PAI_DESIGNER | PAI Designer | ✗ | |
DataX | DataX 配置 | ✗ | |
Merge | Merge 任务 | ✗ | |
Python | Python 2.7 | ✗ | |
Python37x | Python 3.7 | ✗ | |
Perl | Perl | ✗ | |
Python311x | Python 3.11 | ✗ | |
OneService_SQL | OneService SQL | ✗ | |
ONE_SERVICE_SQL_ADB_FOR_PG | ADB for PG SQL(AnalyticDB for PostgreSQL) | ✗ |
DataSourceId / Schema / Catalog 规则
| 场景 | 必填参数 |
|---|
| MaxCompute_SQL / Shell / Python 等非 DB 类 | 仅 --project-id |
| Hive / OneService / Hologres / StarRocks 等 | 仅 --project-id |
| MySQL / Oracle / SQLServer / PostgreSQL 等 | --data-source-id + --data-source-schema |
| Presto 等 | --data-source-id + --data-source-catalog |
按 OperatorType 的示例
MaxCompute_SQL
aliyun dataphin-public execute-ad-hoc-task \
--tenant-id <tenant-id> \
--project-id <project-id> \
--operator-type MaxCompute_SQL \
--code "SELECT COUNT(*) FROM my_table WHERE ds='${bizdate}'" \
--param-list '[{"Key":"bizdate","Value":"20260101"}]'
DATABASE_SQL(MySQL/Oracle/SQLServer/PostgreSQL 等)
aliyun dataphin-public execute-ad-hoc-task \
--tenant-id <tenant-id> \
--project-id <project-id> \
--operator-type DATABASE_SQL \
--data-source-id <mysql-datasource-id> \
--data-source-schema qbi_test \
--code "SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.columns WHERE table_schema='qbi_test' AND table_name='company_sales_record' ORDER BY ORDINAL_POSITION"
HOLOGRES_SQL
aliyun dataphin-public execute-ad-hoc-task \
--tenant-id <tenant-id> \
--project-id <project-id> \
--operator-type HOLOGRES_SQL \
--data-source-id <hologres-datasource-id> \
--code "SELECT current_timestamp"
Shell
aliyun dataphin-public execute-ad-hoc-task \
--tenant-id <tenant-id> \
--project-id <project-id> \
--operator-type Shell \
--code "echo 'Hello World'"
获取任务结果
aliyun dataphin-public get-ad-hoc-task-result \
--tenant-id <tenant-id> \
--project-id <project-id> \
--task-id <从返回的TaskId取> \
--sub-task-id 1
aliyun dataphin-public get-ad-hoc-task-log \
--tenant-id <tenant-id> \
--project-id <project-id> \
--task-id <TaskId> \
--sub-task-id 1 \
--offset 0
常见坑
- OperatorType 大小写敏感:必须用原始字符串枚举(如
MaxCompute_SQL、DATABASE_SQL),不能用数值(如 5、998),也不能用 kebab-case(如 max-compute-sql)——数值枚举仅 create-batch-task --task-type 使用
- 数据库 SQL 必须带 DataSourceId:
--data-source-id 为字符串类型(大整数 ID 避免精度丢失),写成 integer 可能被拒或尾数截断
- DATABASE_SQL 需额外传 --data-source-schema:MySQL/Oracle/SQLServer/PostgreSQL 等数据库 SQL 类型,仅传
--data-source-id 不够,必须同时传 --data-source-schema 指定库名/schema
- ParamList 变量不会自动转义:
${bizdate} 只会做字符串替换,SQL 里自己处理引号
- 即席查询结果过大:部分版本限制返回行数,超出会截断;大查询建议建正式任务
- sub-task-id 从 0 开始:
get-ad-hoc-task-result 的 --sub-task-id 从 0 开始
- 参数名是
--code 不是 --script:CLI 不存在 --script 参数,传 --script 会报 error: unknown option '--script'。正确参数名是 --code
- 多条 SQL 分号提交会被拆成并行子任务,执行顺序不保证([Agent 自主发现]):一次提交 N 条分号分隔的 SQL 返回
SubTaskCount: N 并行执行——有依赖顺序的语句(如 ADD COLUMN 与其后的 COMMENT ON COLUMN)可能乱序报错(column does not exist)。有依赖的 DDL 分批串行提交或逐条提交;失败子任务可单独补跑;逐子任务查 get-ad-hoc-task-log 确认状态(INIT/WAIT_RESOURCE/SUCCESS/FAILED),不能只看提交成功
--project-id 必须当顶层 flag 传,写进 JSON 不生效([Agent 自主发现]):OpenAPI 定义里 ProjectId 是 ExecuteCommand 对象的必填字段,但 CLI 插件把该对象整体扁平化了——根本不存在 --execute-command 这个 flag,子字段全变成顶层 flag(--code / --operator-type / --project-id / --param-list / --data-source-*)。写 --execute-command '{"ProjectId":...,"Code":...}' 会报 Error: --project-id is required(实测连踩 5 次)。推论:不要凭 api-meta 推断 CLI 入参形态,以 --help 输出的 flag 为准
- 不要默认拉
get-ad-hoc-task-log 全文(上下文开销)([Agent 自主发现]):实测一轮探查中 task-log 占了工具输出总量的 16%(单次可达 9k+ 字符),而取数只需 get-ad-hoc-task-result。默认路径:直接取 result;仅在结果为空/报错/需确认状态时才拉日志,且带 只取状态,看报错正文时再取 并 尾部
相关命令
- submit-batch-task.md — 即席查询验证通过后转成持久化任务
aliyun dataphin-public get-ad-hoc-task-result — 获取即席查询结果
aliyun dataphin-public get-ad-hoc-task-log — 获取即席查询日志
aliyun dataphin-public list-data-source-with-config — 找可用的 DataSourceId