如何用PowerShell脚本获取Databricks作业动态RunID运行状态
Databricks作业动态RunID获取及Notebook执行状态判断方案
你原有脚本的问题在于调用Start-DatabricksJob时没有接收返回值——这个命令触发作业后会直接返回本次运行的动态RunID,不需要额外遍历作业历史匹配最新运行记录,具体实现逻辑如下:
核心实现步骤
1. 捕获作业触发时返回的动态Run信息
Start-DatabricksJob执行后会直接返回本次触发的运行实例对象,直接存入变量即可拿到动态RunID,不需要硬编码:
# 触发作业并接收返回的运行实例信息 $jobRun = Start-DatabricksJob -JobID "你的作业ID" $runId = $jobRun.run_id
2. 轮询等待作业运行结束
Databricks作业触发后是异步执行的,需要循环查询运行状态,直到作业退出待运行/运行中状态,避免提前查询拿不到最终结果:
# 定义轮询间隔,可根据作业实际运行时长调整,单位为秒 $pollIntervalSeconds = 15 do { Start-Sleep -Seconds $pollIntervalSeconds $currentRun = Get-DatabricksJobRun -RunID $runId $runState = $currentRun.state.life_cycle_state } while ($runState -in @("PENDING", "RUNNING", "TERMINATING"))
3. 获取Notebook最终执行结果
作业运行结束后,直接从状态对象中读取执行结果,同时可拉取Notebook输出做后续校验:
# 判断最终执行状态 if ($currentRun.state.result_state -eq "SUCCESS") { Write-Host "关联Notebook执行成功" # 拉取Notebook输出内容 $runOutput = Get-DatabricksJobRunOutput -RunID $runId Write-Host "Notebook输出:$($runOutput.notebook_output.result)" } else { Write-Host "关联Notebook执行失败,状态:$($currentRun.state.result_state)" Write-Host "失败原因:$($currentRun.state.state_message)" # 按需抛出异常终止脚本 exit 1 }
完整改造后脚本
# 安装依赖模块(已安装可注释该行) Install-Module -Name DatabricksPS -Scope CurrentUser -Force # 配置认证信息,生产环境建议改用环境变量读取,避免硬编码密钥 $accessToken = $env:DATABRICKS_TOKEN $apiUrl = "https://westeurope.azuredatabricks.net" Set-DatabricksEnvironment -AccessToken $accessToken -ApiRootUrl $apiUrl # 启动目标集群 Start-DatabricksCluster -ClusterID "1202-211320-brick1" # 触发作业并捕获动态Run信息 $jobRun = Start-DatabricksJob -JobID "替换为你的实际作业ID" $runId = $jobRun.run_id Write-Host "作业已触发,RunID:$runId" # 轮询等待作业执行完成 $pollIntervalSeconds = 15 do { Start-Sleep -Seconds $pollIntervalSeconds $currentRun = Get-DatabricksJobRun -RunID $runId $runState = $currentRun.state.life_cycle_state Write-Host "当前作业状态:$runState" } while ($runState -in @("PENDING", "RUNNING", "TERMINATING")) # 处理最终执行结果 if ($currentRun.state.result_state -eq "SUCCESS") { Write-Host "✅ Notebook执行成功" $runOutput = Get-DatabricksJobRunOutput -RunID $runId Write-Host "Notebook返回结果:`n$($runOutput.notebook_output.result)" } else { Write-Host "❌ Notebook执行失败" Write-Host "失败状态:$($currentRun.state.result_state)" Write-Host "错误信息:$($currentRun.state.state_message)" exit 1 }
注意事项
- 轮询间隔建议设置为10-30秒,间隔过短容易触发Databricks API的请求限流
- 脚本会自动等待作业配置的所有重试逻辑执行完成后再返回最终结果,不需要额外编写重试判断逻辑
- 生产环境不要将访问令牌硬编码在脚本中,建议通过系统环境变量、CI/CD密钥变量传入,避免凭证泄露
内容的提问来源于stack exchange,提问作者manjinder
相关产品推荐
相关产品推荐

