旧版笔记本小组件:
警告
${param} 访问小组件值的语法格式在 Databricks Runtime 15.2 及更高版本中已被弃用。 请改用当前的 Databricks 小组件语法(:param)。
本页介绍如何对 Databricks Runtime 15.1 及更低版本上运行的笔记本小组件使用旧 ${param} 语法。 Databricks 建议 迁移到当前语法。
在 Databricks Runtime 15.1 及更低版本中使用控件值
本部分介绍如何将在 Databricks Runtime 15.1 及更低版本中,Databricks 小组件值传递到%sql 笔记本单元格。
- 创建控件以输入文本值。
Python
dbutils.widgets.text("database", "")
dbutils.widgets.text("table", "")
dbutils.widgets.text("filter_value", "100")
Scala
dbutils.widgets.text("database", "")
dbutils.widgets.text("table", "")
dbutils.widgets.text("filter_value", "100")
R
dbutils.widgets.text("database", "")
dbutils.widgets.text("table", "")
dbutils.widgets.text("filter_value", "100")
SQL
CREATE WIDGET TEXT database DEFAULT ""
CREATE WIDGET TEXT table DEFAULT ""
CREATE WIDGET TEXT filter_value DEFAULT "100"
使用
${param}语法传递控件的值。SELECT * FROM ${database}.${table} WHERE col == ${filter_value} LIMIT 100
注释
若要在$中转义字符,请使用\$。 例如,若要表达字符串 $1,000,请使用 "\$1,000"。
$字符不能用于转义SQL 标识符。
迁移到参数标记
下表显示了参数的常见用例、原始 Azure Databricks 小组件语法(在 Databricks Runtime 15.2 及更高版本中弃用),以及使用命名参数标记语法的等效语法(Databricks Runtime 15.2 及更高版本中受支持)。
| 参数用例 |
${param} 旧版小组件语法(从 Databricks Runtime 15.2 及更高版本开始弃用) |
:param 参数标记语法(从 Databricks Runtime 15.2 及更高版本开始支持) |
|---|---|---|
| 仅加载指定日期之前的数据 | WHERE date_field < '${date_param}'必须在日期参数和大括号周围加上引号。 |
WHERE date_field < :date_param |
| 仅加载小于指定数值的数据 | WHERE price < ${max_price} |
WHERE price < :max_price |
| 比较两个字符串 | WHERE region = ${region_param} |
WHERE region = :region_param |
| 指定查询中使用的表 | SELECT * FROM ${table_name} |
SELECT * FROM IDENTIFIER(:table)当用户输入此参数时,他们应使用完整的三级命名空间来标识表。 |
| 独立指定查询中使用的目录、架构和表 | SELECT * FROM ${catalog}.${schema}.${table} |
SELECT * FROM IDENTIFIER(:catalog \|\| '.' \|\| :schema \|\| '.' \|\| :table) |
| 在较长格式的字符串中将参数用作模板 | "(${area_code}) ${phone_number}"参数值自动串联为字符串。 |
format_string((%d) %d, :area_code, :phone_number)有关完整示例,请参阅 连接多个参数 。 |
| 创建间隔 | SELECT INTERVAL ${p} MINUTE |
SELECT CAST(:param as INTERVAL MINUTE) |
| 按可能值的列表进行筛选 | SELECT * from table WHERE value IN (${list_parameter}) |
SELECT * FROM samples.nyctaxi.trips WHERE array_contains(TRANSFORM(SPLIT(:list_parameter, ','), s -> TRIM(s)), dropoff_zip) |