MaxCompute SQL 上线前体检

SKILL开发

原名 ODPS / MaxCompute SQL 调优

开发 未标注权限 许可证不明确
安装这个技能

对数仓 SQL 作业做上线前扫描量与合规检查,按规则定位到行,改写分区裁剪失效和方言写法,核对硬性约束,并给出报告与费用估算。

一句话选型结论

按资料字段整理

MaxCompute SQL 上线前体检是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_8e7614bd/odps-sql-optimizer
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_8e7614bd仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量12.1 KBSKILL.md 原文大小,越大说明说明书写得越细

能做什么

0 项能力
上游给出的能力概览与适用场景
SQL 上线前审查分区裁剪问题定位扫描量与费用估算

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
MaxCompute SQL 上线前体检当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

12.1 KB
模型实际读到的说明书原文,来自技能仓库

ODPS / MaxCompute SQL 调优

MaxCompute 按扫描量计费。最贵的一类事故不是「语句报错」,而是语句跑通了、账单炸了——
分区表没写分区过滤,或 WHERE SUBSTR(dt, 1, 6) = '202601' 把函数套在分区字段上,
分区裁剪直接失效,一次查询扫遍全部分区。这类写法不报错,只静悄悄地烧钱。

本工具对 .sql 做纯静态文本分析,交付四样东西:风险清单(78 条规则,其中 33 条是
「提交即报错」级官方硬约束,逐条带官方依据)、确定性改写后的可提交 SQL、扫描量与费用估算、
Markdown / CSV / 自包含 HTML 报告(含目录批量体检)。可选接入 EXPLAIN 做算子级实证。

执行原则

  1. 只读不连库。 只解析你给的文本:不连接 MaxCompute、不执行任何 SQL、不读表元数据;不要声称查过真实数据量、真实分区或真实执行计划。
  2. 版本先确认。 结论依赖 --odps-edition(默认 2.0);不要在没确认项目版本时下版本相关结论——OE32 / OE33 极易把合规的 2.0 写法误改成 1.0 写法。
  3. 能确定才改。 只对语义可确定推导的写法落盘(分区裁剪区间、白名单内方言函数、TOP→LIMIT);凡可能有第二种解释的一律只给建议,不擅自改动业务语义。
  4. 凭据只掩码。 疑似 AccessKey / 口令的说明行与语句片段一律掩码;不要在报告、日志或对话里回写明文,并提示轮换——原始脚本仍含明文。
  5. 不夸大证据。 静态结论只是「写法疑点」,只有显式提供 --explain 才有算子级实证;不要把「疑似」说成「已证实」,也不要把估算费用说成实际账单。

何时使用

CRITICAL: 只要用户提出「这条 MaxCompute / ODPS SQL 为什么这么贵、扫了多少数据 / 分区裁剪有没有失效、能不能改 / 账单超标是哪几条语句在扫全表」,就必须使用本 skill,即使看起来可以用别的方式解决。

  • 数仓作业上线前、日常调度脚本改完要提交前,先过一次体检。
  • 提交前想先排掉「提交即报错」:作业跑不起来往往不是业务逻辑错,而是触发了官方语法
    与使用限制(JOIN 无等值条件、CROSS JOIN、GROUP BY 用输出别名、HAVING 非布尔、
    窗口函数与同层聚合混用、DISTRIBUTE BY 次序颠倒…)——这一类由 OE41–OE73 覆盖。
  • 脚本里用了 WITH / 集合操作 / UDTF / 事务表 / SET 调参:想知道 CTE 会不会被重复计算、
    UDTF 该怎么写才不报错、UPDATE 能不能直接跑、调参写对了没有——
    对应 OE61–OE73 这一组。
  • 收到账单异常或「SQL 成本超标」告警,想定位是哪几条语句在扫全表。
  • 从 MySQL / Hive / Spark / SQL Server 迁到 MaxCompute,脚本里混着旧方言和旧语法。
  • 迁移或换项目:老项目 1.0 数据类型版本、新项目 2.0,想知道脚本能不能直接搬。
  • 想把问题改完:不想只看清单,希望直接拿到一份改好的 SQL 与一份能交出去的优化报告。
  • 手上有 EXPLAIN 输出:怀疑某条语句扫了全表、或想确认某个 JOIN 是不是退化成笛卡尔积,
    可以把计划一起喂进来做算子级实证(--explain),拿 Data size 说话而不是靠猜。
  • 做成本专项:想知道「把这几个写法改掉,一个月能省多少 GB」。
  • 做存量治理:手上一整个目录的 .sql,想按风险排出改造优先级。

怎么用

# 体检(只看问题清单)
python3 scripts/odps_sql_optimizer.py 作业.sql

# 改完:套用确定性改写,落盘一份可直接提交的 SQL
python3 scripts/odps_sql_optimizer.py 作业.sql --rewrite --out 作业_odps.sql

# 出报告 + 方案:生成 Markdown 报告,终端同时打印分优先级改造步骤
python3 scripts/odps_sql_optimizer.py 作业.sql --report 体检报告.md --plan

# 带表元信息,估算扫描量与费用
python3 scripts/odps_sql_optimizer.py 作业.sql --meta 表元信息.json

# 存量治理:整个目录批量体检,出一份合并报告
python3 scripts/odps_sql_optimizer.py --dir 数仓作业目录/ --report 全量体检.md

# 上线前只盯「提交即报错」与全表扫描的高危项
python3 scripts/odps_sql_optimizer.py 作业.sql --min-severity 高

# 档位预设:quick 只看高危 / standard 看高+中 / strict 全部(默认)
python3 scripts/odps_sql_optimizer.py 作业.sql --profile quick

# 有 EXPLAIN 输出时叠加算子级实证;不提供则结果与此前完全一致
python3 scripts/odps_sql_optimizer.py 作业.sql --explain 计划.txt --report 体检报告.md

# 丢给工单 / 看板:导出 CSV,或生成一份自包含 HTML 报告(可直接发出去)
python3 scripts/odps_sql_optimizer.py 作业.sql --format csv > 问题清单.csv
python3 scripts/odps_sql_optimizer.py 作业.sql --html 体检报告.html

# 查规则表:全部 78 条规则码、严重度、官方依据与核对日期
python3 scripts/odps_sql_optimizer.py --list-rules

# 冒烟:跑内置演示样例
python3 scripts/odps_sql_optimizer.py --sample

退出码:0 = 未发现问题;1 = 发现问题或存在改写项;2 = 输入/参数错误。

全部命令行参数(含 --rules / --ignore / --min-severity / --profile 过滤与 --list-rules)见 08 §1。

按需读取(先查 00,再只读命中章节)

> 读法:先读 00-路由索引 定位到「文件号 + 章节 + 行号区间」,
> 再用 read_file(offset, limit) 只读命中的那一章节;禁止整文件读取任何 reference,
> 也不要一次把 01~10 全读进来。规则码、严重度、官方依据与核对日期以脚本 --list-rules 为准,
> 不要凭记忆复述。

当前任务 读哪里
不确定读哪个 / 要查章节行号 00
版本基线:OE20/OE21/OE25/OE32/OE33 怎么解释 01 §1
OE1–OE40 的含义、严重度与官方依据 02 §1–§4
OE41–OE60「提交即报错」与去噪约定 03 §1–§2
OE61–OE73 集合操作 / CTE / UDTF / 事务表 / SET 04 §1–§2
有 EXPLAIN 输出,做 XP1–XP5 算子级实证 05 §1–§3
哪些能自动改、哪些必须人工 06 §1–§3
扫描量费用估算 / 参数建议与改造步骤 07 §1–§2
命令行参数与过滤 08 §1–§2
输出示例、报告与输入切分 09 §1–§4
误报边界、凭据处置、排错 10 §1–§3

高频规则摘要

完整 78 条以 --list-rules 为准(含严重度、官方依据与依据核对日期)。最常命中的几条:

规则码 一句话 严重度
OE1 / OE2 / OE40 分区表没过滤 / 分区列被函数包裹 / 用 LIKE 前缀——裁剪失效,按全表计费 高
OE52 分区过滤写在 ON 子句:主表仍全表扫描,语句能跑通、账单照付 高
OE41 / OE53 JOIN 无等值条件 / 显式 CROSS JOIN——提交即报 ODPS-0130071 高
OE3 / OE39 INSERT OVERWRITE 未指定分区 / 目标表同时是源表——可能一次覆盖全部分区 高
OE4 / OE5 SELECT * 全列扫描 / ORDER BY 无 LIMIT 全局单点排序 中
OE14 疑似硬编码 AccessKey / 口令(说明与片段均掩码,并提示轮换) 中
OE37 NOT IN (子查询):子查询含 NULL 时静默返回空结果 中

常见错误 vs 正确做法

常见错误做法 正确做法
没给 --meta 就说「这条 SQL 扫了 500 GB」 只说「写法上分区裁剪失效」,补一句「给 --meta 才能估算扫描量」
不问版本就判 OE32,让 2.0 项目去改数据类型 先确认 --odps-edition;2.0 下 OE32 不触发
把 OE25(GROUPING SETS)说成「语法不支持」 说是开销提示:2020-02 起支持,早期文档的「不支持」表述已过时
把自动改写产物直接当交付提交 只保证按确定规则替换;必须人工复核 + 回归后再提交
报告里回填疑似凭据的原文 一律掩码并提示轮换;报告已掩码但原始脚本仍含明文
没给 --explain 却输出 XP* 结论 XP1–XP5 只在显式提供 --explain 时参与,不给计划就不提
把估算费用说成实际账单 明说是量级估算,实际以官方计费页为准

输出与交付

  • 终端文本按 高 / 中 / 低 分级,逐条给行号、语句片段、建议与官方依据;另有 --json / --format csv / --html 三种可机读与可分发的形态。
  • --rewrite --out 落盘改写后的 SQL,文件头注释写明「未自动替换的项及原因」;--report 出 Markdown 报告,--dir 出目录批量体检汇总。
  • 交付时必须说清:命中条数与分级、哪些已自动改写、哪些必须人工确认、本次版本基线,以及未纳入估算的表;不要把估算费用说成实际账单。
  • 需要人工组织或补充时,用交付物模板 assets/体检报告模板.md:复制后填充,不适用项写「不适用」,不要留空。

能力边界与红线

  • 纯静态文本分析:不连库、不执行 SQL、不评估真实数据分布与倾斜;规则基于文本模式,存在少量误报与漏报(逐条说明见 10 §1)。
  • 版本基线是「声明值」而非探测值:不填 --odps-edition 时按 2.0 判断,1.0 专属问题(OE32)不会被报出。
  • --explain 只按文本解析你给的执行计划;不是 EXPLAIN 输出会明确跳过,不硬解析出误报。
  • 凭据红线:疑似凭据一律掩码输出,不回写明文;报告已掩码但原始脚本仍含明文,须提示轮换。
  • 自动改写产物必须人工复核后再提交——工具只保证按确定规则替换,不判断业务意图是否正确。

免责声明

本技能给出的是写法层面的风险提示与量级估算,不是最终结论,也不构成费用承诺:
扫描量与费用是按你提供的表元信息推算的量级值,不是实际账单,实际口径与折扣以官方计费页为准;
版本相关结论取决于你填写的 --odps-edition,不是对线上项目的探测结果;
自动改写产物必须经人工复核与回归验证后再提交——因未复核直接提交造成的数据覆盖、结果异常或费用损失,不由本工具承担。

依赖

Python 3.12+ 标准库,无第三方包;只读输入文件,无网络请求,无 subprocess / eval / exec。

常见问题

5 问
答案由本站依据条目字段整理
MaxCompute SQL 上线前体检怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_8e7614bd/odps-sql-optimizer。安装方式为未标注。装完刷新技能列表或重开客户端。

MaxCompute SQL 上线前体检支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

MaxCompute SQL 上线前体检权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

MaxCompute SQL 上线前体检收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

MaxCompute SQL 上线前体检用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。