本文介绍如何从任务中的代码访问参数值,包括 Databricks 笔记本、Python 脚本和 SQL 文件。
参数包括用户定义的参数、来自上游任务的值以及作业生成的元数据值。 请参阅参数化作业。
虽然详细信息因 任务类型而异,但有四种常用方法用于从源代码引用参数值:
在每种情况下,都引用参数的键来访问其值。 该键有时称为参数的名称。
在笔记本中的代码中使用 dbutils
任务中运行的笔记本代码可以使用 dbutils 库访问参数的值。 以下示例演示如何使用 Python 中的 dbutils
来获取传递到笔记本任务 year_param
任务参数的值。
# Retrieve a job-level parameter
year_value = dbutils.widgets.get("year_param")
# Use the value in your code
display(babynames.filter(babynames.Year == year_value))
按名称访问参数。 如果你有具有相同名称的任务参数和作业参数,则会提取作业参数。
上述代码在独立笔记本中运行时生成错误,而不是作为作业的一部分运行,因为参数不会发送到独立笔记本中。 可以使用以下代码为 year_param
参数设置默认值:
# Set a default (for when not running in a job)
dbutils.widgets.text("year_param", "2012", "Year Parameter")
# Retrieve a job-level parameter (will use default if it doesn't exist)
year_value = dbutils.widgets.get("year_param")
# Use the value in your code
display(babynames.filter(babynames.Year == year_value))
虽然这有助于在作业外部进行测试,但当任务或作业参数未正确设置时,它也有隐藏的缺点。
在 SQL 笔记本中使用命名参数
在笔记本任务中运行 SQL 时,可以使用 命名参数 语法来访问任务参数。 例如,若要访问名为 year_param
的任务参数,可以在查询中使用 :year_param
来获取其值:
SELECT *
FROM baby_names_prepared
WHERE Year_Of_Birth = :year_param
GROUP BY First_Name
以代码参数的形式访问
对于某些任务类型参数,将作为参数传递给代码。 以下任务类型具有向其传递的参数:
Python script
Python Wheel
JAR
Spark Submit
对于 dbt
任务,参数是通过在任务中调用 dbt 命令传递的。
配置任务时使用动态值引用
在 Azure Databricks UI 中配置任务时,请使用 动态值引用 语法来访问作业参数或其他动态值。 若要访问作业参数,请使用语法:{{job.parameters.<name>}}
。 例如,配置 Python wheel
任务时,可以设置参数的 键 和 值 输入来引用名为 year_param
的 Job 参数,例如 year
/ Year_{{job.parameters.year_param}}
。 除了在配置中提供对参数的访问权限外,动态值还可以访问有关作业或任务的其他数据,例如 {{job.id}}
。 可以在任务配置中单击 {} 以获取可能的动态值列表,并将其插入到配置中。
按任务类型排序的详细信息
你使用的哪一种方法取决于任务类型。
任务类型 | 配置中的访问 | 在代码中访问 |
---|---|---|
笔记本电脑 | 可以使用 Azure Databricks UI 中的动态值引用来配置笔记本(例如,引用任务参数值中的作业参数)。 当您手动运行任务时,可以使用使用不同设置的运行作业选项来覆盖或添加额外参数。 | 可以在笔记本中为 SQL 使用命名参数,也可以在代码中使用 dbutils.widgets 。 |
Python 脚本 | 任务中定义的参数作为参数传递给脚本。 可以在 参数 文本框中使用动态值引用。 | 参数可以读取为位置参数,也可以使用 Python 中的 argparse 模块进行分析。 |
Python wheel | 任务定义中定义的参数作为关键字参数传递给代码。 Python wheel 文件必须配置为接受关键字参数。 可以在参数的值中使用动态值引用。 | 作为脚本的关键字参数访问。 若要查看在 Python 滚轮文件中打包的 Python 脚本中读取参数的示例,请参阅 在 Azure Databricks 作业中使用 Python 滚轮文件。 |
SQL | 可以在任务配置中使用动态值引用。 | 使用命名参数访问参数值。 |
管道 | 管道不支持将参数传递给任务。 | 不支持。 |
仪表板 | 仪表板任务不支持将参数传递给任务。 | 不支持。 |
Power BI | Power BI 任务不支持将参数传递给任务。 | 不支持。 |
dbt | 配置任务时,可以使用动态值引用将参数作为 dbt 命令传递。 |
以 dbt 命令的形式访问。 |
罐 | 配置任务时,可以使用动态值引用将参数作为参数传递到 参数 文本框中。 | 形参作为 main 类的 main 方法的实参访问。 |
Spark 提交 | 配置任务时,可以使用动态值引用将参数作为参数传递到 参数 文本框中。 | 形参作为 main 类的 main 方法的实参访问。 |
运行作业 | 配置任务时,可以使用动态值引用创建一组 作业参数。 这些值可以包括动态值引用。 | 不適用。 |
If/else 条件 | 可以在配置任务时使用动态值引用,例如,在 条件中。 | 不適用。 |
对于每个 | 在为任务配置输入时,可以使用动态值引用。 嵌套任务接收一个输入作为每个嵌套任务迭代的任务参数。 | 嵌套任务根据任务类型来访问参数。 |