关于 sqldw-consumption-cli
该技能通过 CLI 发现 Microsoft Fabric 资源,并借助 MCP 执行 SQL Endpoint 查询,面向数据使用者和 Agent,涵盖 T-SQL 消费及故障排查。
主要功能
- 01发现 Fabric 工作区和项目
- 02通过 MCP 工具执行 T-SQL
- 03探索架构和系统目录
- 04将查询结果导出为 CSV
- 05调查查询性能
适用场景
- 01按工作区和项目名称查找 SQL Endpoint
- 02对 Lakehouse SQL Endpoint 执行读取查询
- 03导出按日期筛选的查询结果
- 04检查活动或缓慢查询
MCP 相关
主要通过 `fabric-sqlendpoint-execute_query` MCP 工具执行 T-SQL,并使用 `az` CLI 进行身份验证和 Fabric REST 资源发现。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ microsoft/ skills-for-fabric --skill sqldw-consumption-cli安装后在 Claude Code 中输入/sqldw-consumption-cli确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/consumption-cli-quickref.mddiscovery-queries.mdscript-templates.md详细介绍
遥测 — 必须。 每次
api.fabric.microsoft.com调用都必须携带x-ms-fabric-skill: sqldw-consumption-cli(az rest:--headers "x-ms-fabric-skill=sqldw-consumption-cli"), 包括每次 LRO 轮询、fabric_lro和重试。代码片段中省略了此项,但仍须添加。
更新检查 — 每个会话检查一次(必须) 在会话中首次使用此技能时,必须先运行 check-updates 技能,再继续操作。
- GitHub Copilot CLI / VS Code:调用
check-updates技能。- Claude Code / Cowork / Cursor / Windsurf / Codex:比较本地与远程的 package.json 版本。
- 如果本会话前面已执行过检查,则跳过。
重要说明
- 要根据工作区名称查找工作区详细信息(包括其 ID):列出所有工作区,然后使用 JMESPath 进行筛选
- 要根据工作区 ID、项目类型和项目名称查找项目详细信息(包括其 ID):列出该工作区中该类型的所有项目,然后使用 JMESPath 进行筛选
SQL Endpoint 消耗 — CLI 技能
⚠️ SQL 执行覆盖规则: 对于 SQL 数据平面执行,此技能优先于 COMMON-CLI SQL/TDS 指南。请使用 MCP
fabric-sqlendpoint-execute_query(参见工具栈),除非明确使用旧版 CLI 回退方案。
目录
工具栈
| 工具 | 角色 | 安装 |
|---|---|---|
fabric-sqlendpoint-execute_query MCP 工具 | 主要工具:对 Fabric SQL Endpoint 执行 T-SQL 查询。返回 CSV 结果。身份验证由 MCP 协议处理。 | 无需安装 — 由服务端提供。需要注册 MCP 服务(见下文)。 |
az CLI | 身份验证(az login),通过 Fabric REST API 发现工作区/项目。 | 大多数开发环境中已预装 |
jq | 解析来自 az rest 的 JSON | 已预装或安装非常简单 |
重要 — MCP 与 sqlcmd: 此技能使用
fabric-sqlendpoint-execute_queryMCP 工具执行所有 T-SQL。执行查询时,请勿使用 COMMON-CLI SQL/TDS/sqlcmd 章节。这些参考内容仅适用于az rest控制平面模式。
Agent 预检 — 首次执行 SQL 操作前请确认:
- 确认工具列表中有
fabric-sqlendpoint-execute_query工具。此工具由fabric-sqlendpointMCP 服务提供,可通过安装 Fabric 技能插件(面向最终用户的方式)或使用此仓库的.mcp.json注册;其他 MCP 客户端也可以通过自己的配置注册此工具。- 如果没有找到匹配的工具,用户必须注册 Fabric SQL Endpoint MCP 服务。注册说明请参阅 mcp-setup/。
- 全局 URL:
https://api.fabric.microsoft.com/v1/mcp/dataPlane/sqlEndpoint- 项目作用域 URL:
https://api.fabric.microsoft.com/v1/mcp/dataPlane/workspaces/{workspaceId}/items/{itemId}/sqlEndpoint
MCP 工具签名
fabric-sqlendpoint-execute_query(workspaceId, itemId, query)
工具名称可能不同:
execute_query是逻辑操作。根据服务的注册方式,工具列表中显示的具体工具名称可能带有前缀(例如fabric-sqlendpoint-execute_query或sqlendpoint-global-execute_query)。请调用工具列表中显示的具体名称, 并始终传入workspaceId、itemId和query。
| 参数 | 类型 | 描述 |
|---|---|---|
workspaceId | string (UUID) | 包含目标项目的工作区 GUID |
itemId | string (UUID) | 要查询的 Fabric 项目 GUID。对于 Warehouse 或 Mirrored Database,请使用项目 ID。对于 Lakehouse,请使用其 SQL analytics endpoint ID(properties.sqlEndpointProperties.id)——而不是 Lakehouse 项目 ID。 |
query | string | T-SQL 查询文本(单个批次 — 不含 GO 分隔符或 sqlcmd 元命令) |
返回值: CSV 资源(RFC 4180),包含表格结果和元数据文本(“查询返回 N 行。”)。
批次说明: 单次调用中可以包含多个语句(例如
SET NOCOUNT ON; SELECT ...),但不能包含GO分隔符。只返回最后一个结果集。对于相互独立的读取查询,建议分别调用fabric-sqlendpoint-execute_query,以便更清晰地处理错误。
MCP 限制
| 限制 | 值 | 说明 |
|---|---|---|
| 最大行数 | 10,000 | 超出此数量的结果会被截断。请使用 TOP、筛选条件或聚合。 |
| 查询超时 | 300 秒 | 长时间运行的查询会因超时错误而失败。 |
| 速率限制 | 每个身份每分钟 20 个请求 | 超出限制时返回 HTTP 429。请等待一段时间后重试。 |
这些数值是观察到的默认值,并非有文档说明的约定——MCP 服务可能会更改它们。请将其视为参考,并根据实际的
429/ 超时 / 截断响应,或 Microsoft Learn(如果/当其发布相关说明时)确认当前行为,而不要依赖这些确切数值。
支持的项目类型
| 项目类型 | itemId 来源 | 读取查询 | DML(INSERT/UPDATE/DELETE) |
|---|---|---|---|
| Warehouse | GET /v1/workspaces/{wId}/warehouses → 项目 id | ✅ | ✅ |
| Lakehouse SQL Endpoint | GET /v1/workspaces/{wId}/lakehouses → properties.sqlEndpointProperties.id(不是 lakehouse 的 id) | ✅ | ❌(只读) |
| Mirrored Database | GET /v1/workspaces/{wId}/mirroredDatabases → 项目 id | ✅ | ❌(只读) |
连接
发现 workspaceId 和 itemId
你需要工作区 GUID 和项 GUID 才能调用 fabric-sqlendpoint-execute_query。通过 Fabric REST API 发现它们:
# 1. Find workspace ID by name (capture into WS_ID for the next calls)
WS_ID=$(az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces" \
--query "value[?displayName=='MyWorkspace'].id" --output tsv)
echo "Workspace ID: $WS_ID"
# 2. Find warehouse item ID by name
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/warehouses" \
--query "value[?displayName=='MyWarehouse'].id" --output tsv
# For a Lakehouse, pass its SQL analytics endpoint id — NOT the lakehouse item id
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/lakehouses" \
--query "value[?displayName=='MyLakehouse'].properties.sqlEndpointProperties.id" --output tsv
执行查询
获取 workspaceId 和 itemId 后,调用 MCP 工具:
fabric-sqlendpoint-execute_query(
workspaceId: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
itemId: "11111111-2222-3333-4444-555555555555",
query: "SELECT TOP 10 * FROM dbo.FactSales"
)
无需进行其他连接设置——身份验证由 MCP 协议透明处理。
Agent 式探索(“与我的数据对话”)
架构发现顺序
按顺序运行以下步骤,了解终结点中的内容。有关扩展的发现查询,请参阅 references/discovery-queries.md。
# 1. List schemas
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY schema_name")
# 2. List tables and views
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT table_schema, table_name, table_type FROM INFORMATION_SCHEMA.TABLES ORDER BY table_schema, table_name")
# 3. Columns for a table
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT column_name, data_type, character_maximum_length, is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='dbo' AND table_name='FactSales' ORDER BY ordinal_position")
# 4. Preview rows
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT TOP 5 * FROM dbo.FactSales")
# 5. Row counts
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT s.name AS [schema], t.name AS [table], SUM(p.rows) AS row_count FROM sys.tables t JOIN sys.schemas s ON t.schema_id=s.schema_id JOIN sys.partitions p ON t.object_id=p.object_id AND p.index_id IN (0,1) GROUP BY s.name, t.name ORDER BY row_count DESC")
# 6. Programmability objects (views, functions, procedures)
fabric-sqlendpoint-execute_query(workspaceId, itemId, "SELECT name, type_desc FROM sys.objects WHERE type IN ('V','FN','IF','P','TF') ORDER BY type_desc, name")
Agent 工作流
- 发现 → 运行步骤 1–3,了解可用的表和列。
- 抽样 → 对相关表执行
SELECT TOP 5。 - 编写 → 使用 SQLDW-CONSUMPTION-CORE.md 中的“支持的 T-SQL 功能范围”编写 T-SQL。
- 执行 → 调用
fabric-sqlendpoint-execute_query(workspaceId, itemId, query)。 - 迭代 → 根据结果进行优化。
- 呈现 → 显示结果或生成后续查询。
注意事项、规则与故障排除
完整的 T-SQL/平台注意事项请参阅:SQLDW-CONSUMPTION-CORE.md 中的“注意事项与故障排除参考”。
必须执行
- 确认
fabric-sqlendpoint-execute_queryMCP 工具可用——首次操作前检查工具列表。如果不可用,请指导用户注册 MCP 服务。 - 始终使用
TOP或WHERE筛选条件——MCP 工具最多返回 10,000 行。如果恰好返回 10,000 行,结果很可能已被截断。 - 对大型表先使用
COUNT(*)——在执行不受限制的 SELECT 查询前检查行数。 - 在多语句查询开头使用
SET NOCOUNT ON;——抑制行数消息。 - 使用
OPTION (LABEL = 'AGENTCLI_...')标记查询,以便通过 Query Insights 进行跟踪。 - 仅发送有效的 T-SQL——不要使用
GO批处理分隔符、:setvar或 sqlcmd 元命令。每次fabric-sqlendpoint-execute_query调用都是单个 T-SQL 批处理。 - 多批次操作使用多次工具调用——如果需要使用
GO分隔符,请拆分为多个独立的fabric-sqlendpoint-execute_query调用。
避免
sqlcmd——改用fabric-sqlendpoint-execute_queryMCP 工具。不要通过 shell 调用 sqlcmd 来执行查询。- 不受限制的
SELECT *——会触及 10,000 行上限。始终使用TOP N或WHERE筛选条件。 - 连续快速执行查询——每个身份的速率限制为 20 req/min。请间隔调用,或使用 JOIN/UNION ALL 合并查询。
- 对 Lakehouse/Mirrored DB 执行 DML——这些对象为只读。DML 仅适用于 Warehouse 项。
- 在查询文本中使用
GO分隔符——不受支持。每个批次请单独调用工具。 - MARS——不受支持。每个查询都独立运行。
- 硬编码项 ID——通过 REST API 发现(见“连接”部分)。
优先选择
- 使用
fabric-sqlendpoint-execute_queryMCP 工具,而不是任何 CLI 工具来执行 T-SQL。 - 在探索查询中使用
TOP N——避免触及行数限制。 - 将相关查询合并为带 JOIN 的单个 SELECT,以降低速率限制带来的影响。
- 使用
az rest执行 Fabric REST API 操作——例如发现工作区/项、管理容量。 - 优先使用聚合查询(
COUNT、SUM、AVG、GROUP BY),而不是扫描整个表。 - 搭配
TOP使用ORDER BY,以获得确定性结果。
故障排查
| 症状 | 原因 | 解决方法 |
|---|---|---|
| MCP 工具不可用 | 尚未注册 MCP 服务 | 在 MCP 客户端配置中注册 https://api.fabric.microsoft.com/v1/mcp/dataPlane/sqlEndpoint |
| HTTP 401 / 未授权 | 身份验证令牌已过期或无效 | 重新进行身份验证(取决于 MCP 客户端,可能需要刷新 az login) |
| HTTP 403 / 禁止访问 | 工作区/项的权限不足 | 确认用户在工作区/项中至少拥有查看者角色 |
| HTTP 404 / 未找到 | workspaceId/itemId 错误,或未启用该功能 | 通过 REST API 确认 ID;检查是否已为租户启用 MCP 功能 |
| HTTP 429 / 请求过多 | 超出速率限制(20 次请求/分钟) | 等待后重试,并采用退避策略;合并查询 |
| 查询超时(300s) | 查询过于复杂或数据量过大 | 简化查询、添加筛选条件、使用 TOP |
| 返回的行数恰好为 10,000 | 结果被截断 | 添加 TOP N 或 WHERE 筛选条件;使用 COUNT(*) 检查总数 |
| “Invalid workspaceId/itemId” | UUID 格式错误 | 确认 UUID 格式正确(8-4-4-4-12 位十六进制数字) |
| 响应中出现 SQL 错误 | T-SQL 语法错误或对象无效 | 修正 T-SQL;通过架构发现确认表名/列名 |
| 没有返回行,但数据存在 | RLS 筛选 | 检查 USER_NAME(),确认 RLS 策略 |
Invalid object name 'queryinsights...' | 新建的数据仓库尚未满 2 分钟 | 等待约 2 分钟 |