mcpField
A
alibabacloud-odps-information-schema

alibabacloud-odps-information-schema

github.com/aliyun数据与数据库28196 次安装1 天前更新
代码仓库

关于 alibabacloud-odps-information-schema

面向 MaxCompute 元数据分析的技能,通过 INFORMATION_SCHEMA 视图查询存储、成本、权限、任务和治理信息。它强调租户级与项目级视图差异、查询约束及经过验证的字段和关联规则。

主要功能

  1. 01查询存储、成本与权限元数据
  2. 02分析任务及隧道历史
  3. 03区分租户级和项目级视图
  4. 04提供字段名与关联规则
  5. 05按查询类型路由参考资料

适用场景

  1. 01统计表存储占用与访问情况
  2. 02分析任务成本及失败状态
  3. 03审计表和列权限
  4. 04排查信息架构视图查询问题

MCP 相关

优先使用 MaxCompute MCP 工具执行元数据查询,并通过 execute_sql 配置命名空间提示;MCP 不可用或连接认证失败时可回退到 odpscmd。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-odps-information-schema

安装后在 Claude Code 中输入/alibabacloud-odps-information-schema确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
causal-templates.md
entities.md
joins.md
mcp-tools-reference.md
metrics.md
playbooks.md
ram-policies.md
terminology.md
TROUBLESHOOTING.md
verified-queries.md
views-reference.md
scripts/
odps_is_query.sh

详细介绍

ODPS 信息架构

此技能仅用于查询信息架构(IS)元数据。 如果用户询问的是 DDL/DML、列出表或一般 MaxCompute 用法(而非 IS 视图),请勿使用此技能——请改用 MCP 工具(list_tables、get_table_schema)或 odpscmd。

通过 INFORMATION_SCHEMA 视图查询 MaxCompute 元数据,以进行存储、成本、权限、任务和治理分析。

前提条件

强制要求:每个 IS 查询都必须设置 namespace 标记。 否则,所有查询都会失败并报错 "Table not found"。

  • MCP:在 execute_sql 中设置 hints={"odps.namespace.schema":"true"}
  • odpscmd:在每次查询前执行 SET odps.namespace.schema=true;
  • 无一例外。适用于所有 SYSTEM_CATALOG.INFORMATION_SCHEMA.* 查询。

IS 视图需要租户级权限。如果遇到访问错误,用户需要租户级角色——策略模板请参阅 references/ram-policies.md。

数据时效性:历史视图(TASKS_HISTORY、TUNNELS_HISTORY)延迟约 5 分钟,实时视图延迟约 3 小时。查询前一天的数据时,请在 06:00 后查询,以确保数据完整。

租户级与项目级 IS:MaxCompute 有两个 IS 级别。租户级(SYSTEM_CATALOG.INFORMATION_SCHEMA.*)是默认级别——它涵盖同一元数据中心下的所有项目,且推荐使用。项目级(Information_Schema.*)仅适用于单个项目,需要安装 install package Information_Schema.systables,且正在弃用(自 2024-03 起,新项目不再自动安装)。主要差异:(1)项目级视图较少(没有 CATALOGS、VOLUMES、FOREIGN_SERVERS、SCHEMAS、PARTITION_ACCESS_INFO、TABLE_ACCESS_INFO、QUOTA_USAGE;有租户级不具备的 SCHEMA_PRIVILEGES);(2)项目级 TASKS_HISTORY 有 task_schema 字段,而租户级没有;(3)项目级 table_catalog 始终为 odps,而租户级为实际项目名称。转换规则请参阅项目级 IS 适配。

MCP 配置请参阅 references/mcp-tools-reference.md。

执行渠道

当 mcp__maxcompute-catalog__* 工具可用时,优先使用 MCP。遇到连接或身份验证错误时,回退到 odpscmd。

渠道用途关键细节
MCP(租户级)DQL、元数据、搜索execute_sql + hints={"odps.namespace.schema":"true"};同步查询最多返回 1000 行;cost_sql 支持 IS 视图(已于 2026-04 验证)
MCP(项目级)DQL、元数据、搜索execute_sql + hints={}(不设置 namespace 标记);视图前缀:Information_Schema.*
odpscmd(租户级)DDL/DML、大结果集、MCP 不可用时必须添加前缀 SET odps.namespace.schema=true;
odpscmd(项目级)DDL/DML、大结果集、MCP 不可用时无需 namespace 标记;视图前缀:Information_Schema.*

15 个 MCP 工具及路由指南请参阅 references/mcp-tools-reference.md。

重要规则

  1. 始终设置命名空间标记——每个租户级 IS 查询都必须设置,无一例外。项目级 IS 查询不需要此标记
  2. 按 ds 过滤——TASKS_HISTORY / TUNNELS_HISTORY 按分区组织;始终添加 ds 过滤条件,以避免全表扫描
  3. 禁止使用 SELECT *——请使用明确的列名
  4. 不支持跨元数据中心查询——各区域相互独立
  5. 分区表的 last_access_time 为 NULL——使用 COALESCE(last_access_time, last_modified_time) 或检查 PARTITIONS 视图。另外:ALGO 作业或 Hologres 直接读取不会采集此字段;实际访问后最多延迟 24h
  6. status 值——TASKS_HISTORY:Terminated(正常)、Failed、Cancelled(罕见)。绝不能将 Terminated 计为失败
  7. operate_type 值——TUNNELS_HISTORY:UPLOADLOG、DOWNLOADLOG、DOWNLOADINSTANCELOG、STORAGEAPIREAD、STORAGEAPIWRITE
  8. 没有时间字段的视图——COLUMNS 没有时间列。TABLE_PRIVILEGES/COLUMN_PRIVILEGES 没有时间列,只有 expired。这些视图仅支持静态快照,不支持时间序列
  9. cost_cpu / cost_mem 为 DOUBLE 类型——单位:100×核×秒 / MB×秒。换算为 CU 小时:cost_cpu / 100 / 3600
  10. 时长——使用 DATEDIFF(end_time, start_time, 'ss')(秒)。不存在 duration_ms 列
  11. 不存在的字段陷阱——请参阅下方的关键列参考
  12. JOIN IS 视图需要 3 个字段作为键——连接任意两个 IS 视图时,ON 条件必须包含 table_catalog、table_schema 和 table_name。缺少其中任意一个都会导致多目录环境中的结果不正确

项目级 IS 适配

此技能中的所有 SQL 模板默认使用租户级语法(SYSTEM_CATALOG.INFORMATION_SCHEMA.* + 命名空间标记)。如果环境仅支持项目级 IS,请对生成的每条 SQL 应用以下机械转换:

转换项租户级(默认)项目级
视图前缀SYSTEM_CATALOG.INFORMATION_SCHEMA.Information_Schema.
命名空间标记(MCP)hints={"odps.namespace.schema":"true"}hints={}(移除标记)
命名空间标记(odpscmd)SET odps.namespace.schema=true;完全移除
范围元数据中心中的所有项目仅当前项目
不可用的视图—CATALOGS、VOLUMES、FOREIGN_SERVERS、SCHEMAS、PARTITION_ACCESS_INFO、TABLE_ACCESS_INFO、QUOTA_USAGE
此级别专属视图—SCHEMA_PRIVILEGES
TASKS_HISTORY 额外列—task_schema(项目名称;租户级不包含此列)
table_catalog 值实际项目名称固定为 odps

转换示例:

-- Tenant-level (default):
SET odps.namespace.schema=true;
SELECT table_name, data_length FROM SYSTEM_CATALOG.INFORMATION_SCHEMA.TABLES WHERE ...

-- Project-level (after transformation):
SELECT table_name, data_length FROM Information_Schema.tables WHERE ...

何时切换:如果租户级查询返回 Table not found(且已正确设置命名空间标记),或用户明确表示他们仅有项目级 IS,请将上述转换规则应用于之后的所有查询。

关键列名参考

概念正确错误
表大小data_lengthsize_bytes、size
任务实例inst_idtask_id
任务提交者owner_nametask_owner
任务项目task_catalog(租户级)project_name、task_schema(仅项目级 IS)
任务错误resulterror_message
任务时长DATEDIFF(end_time, start_time, 'ss')duration_ms
任务状态statustask_status
任务输入大小input_bytesscan_bytes、processed_bytes
表注释table_commentcomment
列注释column_commentcomment
权限被授予者user_name、user_idgrantee
权限时间expiredgrant_time
资源大小sizesize_bytes
Tunnel 会话session_idtunnel_id
Tunnel 数据大小data_sizesize_bytes
用户身份identity_provider—
时间戳类型DATETIMETIMESTAMP
表修改时间last_modified_timelast_ddl_time
cost_cpu 类型DOUBLEBIGINT

使用这些列的已验证查询示例,请参阅 references/verified-queries.md。

路由索引

SKILL.md 包含关键列名和命名空间规则。仅在需要时加载子文件:

  • **如果匹配多行,请加载所有匹配的文件。**例如,非英语术语的因果查询需要同时加载 terminology.md 和 playbooks+causal-templates。
  • 如果 SKILL.md 中的内联信息(下表)已足够,则不要加载额外文件。
  • 与 IS 视图无关? → 此技能不适用。请使用 MCP 工具(list_tables、get_table_schema、execute_sql)或 odpscmd 进行 DDL/DML/常规查询。
查询类型适用情况加载额外文件
不是 IS 查询DDL/DML、列出表、运行 SQL、常规 ODPS无 — 改用 MCP 工具或 odpscmd
单视图查询查询一个 IS 视图,不含 JOIN无 — 仅使用 SKILL.md
实时监控TASKS / QUOTA_USAGE无 — 仅使用 SKILL.md
2 个或更多 IS 视图 JOIN组合多个视图references/joins.md
命名指标/模板“注释覆盖率”“CU 趋势”“僵尸表检测”references/verified-queries.md + references/metrics.md
多步骤诊断“CU 为什么激增?”、根因分析references/playbooks.md + references/causal-templates.md
非英语同义词“cpu时间”“作业时长”“存储占用”或任何 CJK/本地化术语references/terminology.md(或使用下方的内联映射)
架构/字段查询“X 有哪些列?”references/views-reference.md
访问被拒绝错误无权访问 IS 视图references/ram-policies.md
故障排除找不到表、超时等references/TROUBLESHOOTING.md
反模式:以下情况不要加载额外文件
用户说看起来像实际上是加载
“存储压力,列出排名前 20 的表”诊断单视图仅使用 SKILL.md
“权限审计,谁对 X 有 SELECT 权限”操作手册单视图仅使用 SKILL.md
“按所有者归因成本”因果分析单视图仅使用 SKILL.md
内联连接条件(用于 2 个及以上视图的 JOIN)

连接 IS 视图时,JOIN 条件中必须包含 table_catalog、table_schema 和 table_name。常见的连接路径:

左侧右侧连接条件
TABLESCOLUMNSt.table_catalog = c.table_catalog AND t.table_schema = c.table_schema AND t.table_name = c.table_name
TABLESPARTITIONSt.table_catalog = p.table_catalog AND t.table_schema = p.table_schema AND t.table_name = p.table_name
TABLESTABLE_PRIVILEGESt.table_catalog = p.table_catalog AND t.table_schema = p.table_schema AND t.table_name = p.table_name
TABLESTABLE_ACCESS_INFOt.table_catalog = a.table_catalog AND t.table_schema = a.table_schema AND t.table_name = a.table_name
TABLESTABLE_LABELSt.table_catalog = l.table_catalog AND t.table_schema = l.table_schema AND t.table_name = l.table_name
USERSUSER_ROLESu.user_id = ur.user_id
COLUMNSCOLUMN_LABELSc.table_catalog = l.table_catalog AND c.table_schema = l.table_schema AND c.table_name = l.table_name AND c.column_name = l.column_name

所有 16 种连接路径请参阅 references/joins.md。下方内联列出了最常见的 7 种路径。

内联术语映射(常见非英语术语)
非英语术语英文对应词正确的列/来源常见错误
cpu时间 / CPU消耗CPU time / CPU consumptioncost_cpu (DOUBLE),÷100÷3600 = CU·小时cpu_time
作业时长 / 任务耗时Task duration / task elapsed timeDATEDIFF(end_time, start_time, 'ss')duration_ms
存储占用 / 表大小Storage usage / table sizedata_length (÷1073741824 = GB)size_bytes
僵尸表Zombie tableTABLES + TABLE_ACCESS_INFO—
排队时间Queue wait timeIS 视图中不可用—
CU时 / CU消耗CU-hours / CU consumptionSUM(cost_cpu) / 100.0 / 3600—
任务失败率Task failure rateTASKS_HISTORY 中 status='Failed' 的比例—

所有 59 个术语请参阅 references/terminology.md。

错误恢复

错误信号根本原因解决方法
IS 视图中出现 Table not found缺少命名空间标志添加 SET odps.namespace.schema=true; / hints={"odps.namespace.schema":"true"}。使用 Q30 冒烟测试进行验证
IS 视图中出现 Access denied / Permission denied缺少租户级角色使用 check_access(include_grants=true) 验证访问权限。用户需要租户级角色——加载 references/ram-policies.md 中的策略模板
SYSTEM_CATALOG.INFORMATION_SCHEMA.* 中出现 Table not found(命名空间标志已正确设置)环境仅支持项目级 IS将 项目级 IS 适配转换规则应用于所有后续查询:将前缀改为 Information_Schema.*,移除命名空间标志
出现 Information_Schema not found / Package not installed此项目未安装项目级 IS用户必须以项目所有者或 Super_Administrator 身份运行 install package Information_Schema.systables。安装后,使用 Information_Schema.view_name 查询(无需命名空间标志)。注意:项目级 IS 正在弃用——建议优先使用租户级 IS
新项目中出现 Object 'Information_Schema' not found新项目(自 2024-03 起)不会自动安装项目级 IS切换到租户级 IS(SYSTEM_CATALOG.INFORMATION_SCHEMA.*)或手动安装包
TASKS_HISTORY 查询缓慢或开销较大没有 ds 过滤条件添加 WHERE ds >= TO_CHAR(DATEADD(GETDATE(), -14, 'dd'), 'yyyymmdd')
MCP 恰好返回 1000 行同步限制导致截断使用 async=true 重新运行,或添加更严格的 WHERE/LIMIT 条件
出现 Column not found使用了不存在的列查看上方的关键列参考——常见情况:size_bytes→data_length、task_status→status
TUNNELS_HISTORY 同步超时(>30s)Tunnel 记录量远大于 TASKS_HISTORY使用 async=true + get_instance,或将 ds 范围缩短至 1 天
异步超时(>30s)扫描量较大先使用 cost_sql;添加 ds 过滤条件;拆分查询
IS 视图没有显示近期数据历史视图约有 5 分钟延迟06:00 后查询前一天的数据
odpscmd 查询挂起结果集较大或进行了全表扫描使用 odps_is_query.sh -t <seconds> 设置超时时间(默认 300s);添加 ds 过滤条件
已设置命名空间标志,但仍出现 Table not found其他原因(项目错误、拼写错误、架构问题)加载 references/TROUBLESHOOTING.md,查看 T1–T7 场景

核心视图

视图用途关键列
TABLES表元数据table_name, owner_name, data_length, table_type, lifecycle, last_modified_time
COLUMNS列元数据column_name, data_type, column_comment, is_partition_key
PARTITIONS分区元数据partition_name, data_length, create_time, last_modified_time
TASKS正在运行的作业(实时,延迟数秒)inst_id, task_name, owner_name, status, cpu_usage (core×100), mem_usage (MB)
TASKS_HISTORY查询历史inst_id, task_name, owner_name, status, task_type, start_time, end_time, result, cost_cpu, input_bytes, ds
TUNNELS_HISTORYTunnel 历史session_id, object_name, operate_type, data_size, owner_name, ds
TABLE_PRIVILEGES表权限table_name, user_name, privilege_type, expired
TABLE_ACCESS_INFO ⚠️表访问统计table_name, access_count, access_bytes, last_access_time
QUOTA_USAGE订阅配额监控name, cpu_elastic_quota_max, cpu_elastic_quota_used, mem_elastic_quota_max, mem_elastic_quota_used
USERS项目用户user_name, user_id, identity_provider
USER_ROLES用户-角色映射user_name, role_name, user_role_catalog
CATALOGS ⚠️项目列表catalog_name, status, owner_name, region

如需查看全部 31 个视图的完整字段定义,请参阅 references/views-reference.md。标记为 ⚠️ 的视图仅限租户级(项目级 IS 中不可用)。

其他资源

官方文档

评论

支持 Markdown