如何在Synapse/ADF中通过名称获取DeltaLiveTables的pipeline_id?
在Synapse/ADF中通过DLT管道名称获取pipeline_id的实现方案
可用活动类型及实现方式
1. Web 活动(推荐,无需额外资源)
直接调用Databricks的DLT管道REST API,通过管道名称过滤得到pipeline_id:
- API端点:
GET https://<databricks-workspace-url>/api/2.0/pipelines - 配置步骤:
- 在Synapse/ADF中新建Web活动,设置请求方法为
GET - 填入上述API端点,替换
<databricks-workspace-url>为你的Databricks工作区URL - 请求头中添加认证信息(如Bearer Token,可通过Azure AD服务主体获取)
- 活动执行后,通过动态内容解析返回的JSON结果,提取目标管道的ID:
@first(filter(activity('Web_Get_DLT_Pipelines').output.pipelines, equals(item().name, '<你的DLT管道名称>'))).pipeline_id
- 在Synapse/ADF中新建Web活动,设置请求方法为
2. PowerShell 活动(Synapse专属)
利用Synapse的PowerShell活动执行类似你现有Shell脚本的逻辑:
- 编写PowerShell脚本调用Databricks API,根据管道名称查询ID:
# 配置参数 $databricksUrl = "<databricks-workspace-url>" $token = "<你的Databricks认证Token>" $targetPipelineName = "<你的DLT管道名称>" # 调用API获取所有管道 $headers = @{Authorization = "Bearer $token"} $response = Invoke-RestMethod -Uri "$databricksUrl/api/2.0/pipelines" -Method Get -Headers $headers # 过滤目标管道并提取ID $targetPipeline = $response.pipelines | Where-Object { $_.name -eq $targetPipelineName } if ($targetPipeline) { Write-Output $targetPipeline.pipeline_id } else { Write-Error "未找到名称为$targetPipelineName的DLT管道" } - 将脚本填入Synapse的PowerShell活动中,执行后可通过活动输出获取
pipeline_id。
3. Azure Function 活动(适合复杂逻辑扩展)
如果需要更灵活的处理(如缓存、多环境适配),可以编写Azure Function调用Databricks API,接收管道名称参数并返回对应的pipeline_id,再在Synapse/ADF中通过Azure Function活动调用该函数。
与原有Shell脚本的逻辑对齐
你的原有Shell脚本通过判断管道是否存在来创建或更新,在Synapse中可结合上述活动结果,通过条件分支活动实现相同逻辑:
- 先用Web/PowerShell活动查询管道是否存在(获取
pipeline_id) - 若返回空值,调用创建管道的Web活动(对应脚本中的Post请求)
- 若返回有效
pipeline_id,调用更新管道的Web活动(对应脚本中的Put请求,URL拼接pipeline_id)
内容的提问来源于stack exchange,提问作者Nithish
相关产品推荐
相关产品推荐

