mcpField
S
spark-consumption-cli

spark-consumption-cli

github.com/microsoft数据与数据库1.3k147 次安装3 周前更新
代码仓库

关于 spark-consumption-cli

面向 Microsoft Fabric 数据工程的命令行技能,帮助执行 Lakehouse Livy 会话管理和 Spark 数据探索。它提供 Fabric REST API、身份验证、资源发现及数据访问流程,并强调复用会话和动态发现资源。

主要功能

  1. 01发现 Fabric 工作区与项目
  2. 02管理 Lakehouse Livy 会话
  3. 03执行 Spark 语句并读取结果
  4. 04探索表结构与跨 Lakehouse 数据
  5. 05通过 OneLake 和 SQL/TDS 访问数据
  6. 06处理分页、长时操作与限流

适用场景

  1. 01在 Lakehouse 中运行 PySpark 分析
  2. 02复用或清理交互式 Livy 会话
  3. 03发现工作区与 Lakehouse 项目
  4. 04探索表、模式及跨工作区数据

安装

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

$npx skills add https://github.com/microsoft/skills-for-fabric --skill spark-consumption-cli

安装后在 Claude Code 中输入/spark-consumption-cli确认已加载。

详细介绍

遥测 — 必须执行。 每次 api.fabric.microsoft.com 调用都必须携带 x-ms-fabric-skill: spark-consumption-cli(az rest:--headers "x-ms-fabric-skill=spark-consumption-cli"), 包括每次 LRO 轮询、fabric_lro 和重试。代码片段中省略了此项,但仍须添加。

检查更新 — 每个会话仅执行一次(必须) 首次在一个会话中使用此技能时,必须先运行 check-updates 技能,然后再继续。

  • GitHub Copilot CLI / VS Code:调用 check-updates 技能。
  • Claude Code / Cowork / Cursor / Windsurf / Codex:比较本地与远程的 package.json 版本。
  • 如果本会话中已执行过检查,则跳过。

重要说明

  1. 要通过工作区名称查找工作区详情(包括其 ID):列出所有工作区,然后使用 JMESPath 进行筛选。
  2. 要通过工作区 ID、项目类型和项目名称查找项目详情(包括其 ID):列出该工作区中该类型的所有项目,然后使用 JMESPath 进行筛选。

数据工程用量 — CLI 技能

目录

任务参考备注
Fabric 拓扑与关键概念COMMON-CORE.md § Fabric 拓扑与关键概念
环境 URLCOMMON-CORE.md § 环境 URL
身份验证与令牌获取COMMON-CORE.md § 身份验证与令牌获取audience 错误会导致 401;遇到任何身份验证问题前请先阅读
核心控制平面 REST APICOMMON-CORE.md § 核心控制平面 REST API
分页COMMON-CORE.md § 分页
长时间运行的操作(LRO)COMMON-CORE.md § 长时间运行的操作(LRO)
速率限制与节流COMMON-CORE.md § 速率限制与节流
OneLake 数据访问COMMON-CORE.md § OneLake 数据访问需要 storage.azure.com 令牌,而非 Fabric 令牌
作业执行COMMON-CORE.md § 作业执行
容量管理COMMON-CORE.md § 容量管理
常见问题与故障排查COMMON-CORE.md § 常见问题与故障排查
最佳实践COMMON-CORE.md § 最佳实践
工具选择依据COMMON-CLI.md § 工具选择依据
在 Fabric 中查找工作区和项目COMMON-CLI.md § 在 Fabric 中查找工作区和项目必须 — 先阅读链接内容 [用于按名称查找工作区 ID,或按名称、项目类型和工作区 ID 查找项目 ID]
身份验证方法COMMON-CLI.md § 身份验证方法az login 流程和令牌获取
通过 az rest 访问 Fabric 控制平面 APICOMMON-CLI.md § 通过 az rest 访问 Fabric 控制平面 API始终传入 --resource https://api.fabric.microsoft.com,否则 az rest 会失败
分页模式COMMON-CLI.md § 分页模式
长时间运行的操作(LRO)模式COMMON-CLI.md § 长时间运行的操作(LRO)模式
通过 curl 访问 OneLake 数据COMMON-CLI.md § 通过 curl 访问 OneLake 数据使用 curl,而非 az rest(令牌 audience 不同)
SQL / TDS 数据平面访问COMMON-CLI.md § SQL / TDS 数据平面访问使用 sqlcmd(Go)进行连接、查询和 CSV 导出
作业执行(CLI)COMMON-CLI.md § 作业执行
OneLake 快捷方式COMMON-CLI.md § OneLake 快捷方式
容量管理(CLI)COMMON-CLI.md § 容量管理
组合操作方法COMMON-CLI.md § 组合操作方法
常见问题与故障排查(CLI 专属)COMMON-CLI.md § 常见问题与故障排查(CLI 专属)az rest audience、Shell 转义、令牌过期
快速参考:az rest 模板COMMON-CLI.md § 快速参考:az rest 模板
快速参考:令牌 audience / CLI 工具矩阵COMMON-CLI.md § 快速参考:令牌 audience ↔ CLI 工具矩阵各服务对应的 --resource 和工具
与 SPARK-AUTHORING-CORE.md 的关系SPARK-CONSUMPTION-CORE.md § 与 SPARK-AUTHORING-CORE.md 的关系
数据工程消费能力矩阵SPARK-CONSUMPTION-CORE.md § 数据工程消费能力矩阵
OneLake 表 API(启用架构的 Lakehouse)SPARK-CONSUMPTION-CORE.md § OneLake 表 API(启用架构的 Lakehouse)兼容 Unity Catalog 的元数据;需要 storage.azure.com 令牌
Lakehouse Livy 会话管理SPARK-CONSUMPTION-CORE.md § Livy 会话管理Lakehouse Livy API:会话创建、状态、生命周期和终止
交互式数据探索SPARK-CONSUMPTION-CORE.md § 交互式数据探索语句执行、输出获取、数据发现
PySpark 分析模式SPARK-CONSUMPTION-CORE.md § PySpark 分析模式跨 Lakehouse 三段式命名、性能优化
必须/优先/避免SKILL.md § 必须/优先/避免必须执行 / 避免 / 优先选择检查清单
快速入门SKILL.md § 快速入门特定于 CLI 的 Lakehouse Livy 会话设置和数据探索
Fabric 关键模式SKILL.md § Fabric 关键模式Spark 模式快速参考表
会话清理SKILL.md § 会话清理通过 CLI 清理闲置的 Lakehouse Livy 会话

必须/优先/避免

必须执行
  • 创建新会话前,检查是否有现有的空闲会话
  • 使用动态工作区/湖仓发现方式
  • 遵循 COMMON-CLI.md 中的 API 模式
优先采用
  • 简单湖仓查询使用 sqldw-consumption-cli — 对湖仓 Delta 表进行行数统计、SELECT、架构探索、筛选和聚合时,应通过 sqlcmd 使用 SQL Endpoint,而不是 Spark。仅当用户明确要求使用 PySpark、DataFrames 或 Spark 专属功能时,才使用此技能。
  • 对 Delta 表使用 SQL Endpoint
  • 对非结构化/JSON 数据或复杂 Python 分析使用 Livy
  • 优先复用会话,而不是创建新会话
避免
  • 硬编码工作区 ID
  • 创建不必要的会话
  • 不带 LIMIT 获取大量结果
  • 混淆 Lakehouse Livy 会话与 Notebook Spark 会话 — 此技能涵盖 Lakehouse Livy 会话(/lakehouses/{lhId}/livyapi/.../sessions 下的公共 Livy API)。运行 Notebook 时通过 Jobs API(RunNotebook)在内部创建 Notebook Spark 会话,且不通过 Livy API 管理。如需将 Notebook 作为作业运行,请参阅 SPARK-AUTHORING-CORE.md § Notebook Execution & Job Management
  • 编写或生成 Notebook 单元格 — 要求编写 %%sql、%%configure、PySpark Notebook 单元格代码、部署 Notebook 或执行 Notebook 的提示词,都属于 spark-authoring-cli,即使单元格会查询数据也是如此。

快速开始

环境设置

应用 COMMON-CORE.md 中的环境检测模式,以设置:

  • $FABRIC_API_BASE 和 $FABRIC_RESOURCE_SCOPE
  • 用于 Livy 操作的 $FABRIC_API_URL 和 $LIVY_API_PATH

身份验证:使用 COMMON-CLI.md 中「环境检测和 API 配置」部分的令牌获取方式

工作区和项发现

首选:使用 COMMON-CLI.md 中的项发现模式(在 Fabric 中查找内容),按名称查找工作区和项。

备用方式(工作区已知时):

# List workspaces
az rest --method get --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces" --query "value[].{name:displayName, id:id}" --output table
read -p "Workspace ID: " workspaceId

# List lakehouses in workspace
az rest --method get --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/items?type=Lakehouse" --query "value[].{name:displayName, id:id}" --output table  
read -p "Lakehouse ID: " lakehouseId
Lakehouse Livy 会话管理

Fabric 中的两种 Spark 会话 — 此技能管理通过公共 Livy API 端点(/lakehouses/{lhId}/livyapi/.../sessions)创建的 Lakehouse Livy 会话。这些会话供远程客户端进行临时交互式操作。Notebook Spark 会话是另一种机制 — 运行 Fabric Notebook 时(通过门户或 Jobs API RunNotebook)在内部创建,并通过 Notebook 生命周期管理,而不是通过 Livy API 管理。

# Check for existing idle Lakehouse Livy session (avoid resource waste)
sessionId=$(az rest --method get --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions" --query "sessions[?state=='idle'][0].id" --output tsv)

# Create if none available - FORCE STARTER POOL USAGE
if [[ -z "$sessionId" ]]; then
    cat > /tmp/body.json << 'EOF'
{
    "name":"analysis",
    "driverMemory":"56g",
    "driverCores":8,
    "executorMemory":"56g",
    "executorCores":8,
    "conf": {
        "spark.dynamicAllocation.enabled": "true",
        "spark.fabric.pool.name": "Starter Pool"
    }
}
EOF
    sessionId=$(az rest --method post --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions" --body @/tmp/body.json --query "id" --output tsv)
    
    echo "⏳ Waiting for starter pool session to be ready..." 
    # With starter pools, this should be 3-5 seconds
    timeout=30  # Reduced from 90s since starter pools are fast
    while [ $timeout -gt 0 ]; do
        state=$(az rest --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions/$sessionId" --query "state" --output tsv)
        if [[ "$state" == "idle" ]]; then
            echo "✅ Session ready in starter pool!"
            break
        fi
        echo "   Session state: $state (${timeout}s remaining)"
        sleep 3
        timeout=$((timeout - 3))
    done
fi
数据探索(Fabric 专属模式)
# Execute statement (LLM knows Python/Spark syntax)
cat > /tmp/body.json << 'EOF'
{
  "code": "spark.sql(\"SHOW TABLES\").show(); df = spark.table(\"your_table\"); df.describe().show()",
  "kind": "pyspark"
}
EOF
az rest --method post --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions/$sessionId/statements" --body @/tmp/body.json

关键 Fabric 模式

模式代码用例
表发现spark.sql("SHOW TABLES")列出可用表
跨湖仓spark.sql("SELECT * FROM other_workspace.table")跨工作区查询
Delta 功能df.history()、df.readVersion(1)时间旅行、版本管理
架构演进df.printSchema()了解结构

Lakehouse Livy 会话清理

# Clean up idle Lakehouse Livy sessions (optional)
az rest --method get --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions" --query "sessions[?state=='idle'].id" --output tsv | xargs -I {} az rest --method delete --resource "$FABRIC_RESOURCE_SCOPE" --url "$FABRIC_API_URL/workspaces/$workspaceId/lakehouses/$lakehouseId/$LIVY_API_PATH/sessions/{}"

重点:此技能提供 Fabric 专属的 REST API 模式。大模型已了解 Python/Spark 语法 — 我们专注于 Fabric 集成、会话管理和 API 端点。

评论

支持 Markdown