如何获取Azure Data Factory中Databricks Notebook任务的run id并存入目标表
实现方案
首先可根据你需要存储的ID类型选择对应方案,也可组合使用同时存储多类ID:
方案1:从ADF传递内置系统变量到Databricks Notebook(适用需要ADF侧ID的场景)
无需修改Databricks侧运行配置,仅需配置参数传递即可:
- 第一步:在你的Databricks Notebook中提前声明接收参数,示例代码:
# 声明入参,参数名需和ADF侧配置保持一致 dbutils.widgets.text("adf_pipeline_run_id", "") dbutils.widgets.text("adf_activity_run_id", "") # 读取传入的参数值 adf_pipeline_id = dbutils.widgets.get("adf_pipeline_run_id") adf_activity_id = dbutils.widgets.get("adf_activity_run_id")
- 第二步:进入ADF对应Databricks Notebook活动的配置页,找到「参数」配置栏,新增两个参数:
- 参数1:名称填
adf_pipeline_run_id,值填写ADF系统变量@pipeline().RunId(对应整个管道的运行ID) - 参数2:名称填
adf_activity_run_id,值填写ADF系统变量@activity('你的Databricks活动名称').ActivityRunId(对应该Databricks活动在ADF侧的运行ID)
- 参数1:名称填
- 第三步:在Notebook的写入逻辑中,把读取到的ID作为新字段添加到待写入数据集,正常写入目标表即可。
方案2:Notebook内部直接获取Databricks作业运行ID(适用需要Databricks侧作业ID的场景)
不需要修改ADF配置,直接在Notebook内通过运行上下文获取即可,示例代码:
from pyspark.sql import SparkSession from pyspark.dbutils import DBUtils spark = SparkSession.builder.getOrCreate() dbutils = DBUtils(spark) # 读取当前Databricks作业实例的运行ID notebook_context = dbutils.notebook.entry_point.getDbutils().notebook().getContext() databricks_run_id = notebook_context.runId().get()
拿到ID后按业务需要作为新字段写入目标表即可。
内容的提问来源于stack exchange,提问作者Fraz
相关产品推荐
相关产品推荐

