重要
仅旧版 SQL 编辑器支持 Mustache 参数语法。 Databricks 建议对新查询使用 命名参数标记 。 如果将使用胡须语法的查询复制到笔记本、AI/BI 仪表板数据集编辑器或 Genie 空间中,则必须在运行查询之前将其转换为命名参数标记。
在旧版 SQL 编辑器中,用双大括号({{ }})包装的任何字符串都被视为查询参数。 结果窗格上方会出现一个控件,您可以在其中设置参数值。
添加 mustache 参数
- 按“”
Cmd + I。 参数插入游标位置,并显示 “添加参数 ”对话框。 - 输入 关键字,根据需要更改 标题,然后选择 类型。
- 单击“添加参数”。
- 在小组件中设置参数值。
- 单击“应用更改”。
- 单击“ 保存”。
或者,直接在查询中键入 {{ }} ,然后单击参数小组件中的齿轮图标进行配置。
若要使用不同的值重新运行查询,请更新小组件,然后单击“ 应用更改”。
编辑、删除和重新排序参数
编辑:单击参数小组件旁边的齿轮图标。 若要防止不拥有查询的用户更改参数值,请单击“ 仅显示结果”。
删除:从查询中删除参数标记。 将自动删除小组件。
重新排序:单击参数小组件并将其拖动到所需顺序。
小组件类型
以下小组件类型可用:
文本
采用字符串作为输入。 反斜杠、单引号和双引号会被自动转义。 Azure Databricks在值周围添加引号。
SELECT * FROM samples.tpch.customer WHERE c_name = {{ name_param }}
编号
采用数字作为输入。
SELECT * FROM users WHERE age = {{ number_param }}
日期和时间
参数化日期和时间戳值。 有三个选项可用:
| 类型 | 精准率 |
|---|---|
| 日期 | 天 |
| 日期和时间 | 分钟 |
| 日期和时间(以秒为单位) | 第二个 |
所有日期和时间值都作为字符串文本传递,必须在查询中用单引号包装:
SELECT * FROM usage_logs WHERE date = '{{ date_param }}'
选择 Range 选项时,Azure Databricks使用 .start 和 .end 后缀创建两个参数:
SELECT * FROM usage_logs
WHERE modified_time > '{{ date_range.start }}'
AND modified_time < '{{ date_range.end }}'
注释
日期范围小组件仅返回 DATE 类型列的正确结果。 对于时间戳列,请使用“日期和时间范围”控件。
动态日期值:日期小组件包括蓝色闪电图标。 单击它可选择动态值,例如today、yesterday、this week、last weeklast month或last year。 这些值会自动更新。
重要
动态日期值与计划查询不兼容。
下拉列表
将输入限制为预定义的静态列表。 支持单值和多值选择。
单个值:在查询中用单引号包装参数。
多值:在组件设置中启用“允许多个值”。 使用 Quote 选项控制值是用单引号、双引号还是无。 将你的
WHERE子句更新为使用IN:SELECT * FROM orders WHERE status IN ( {{ status_param }} )选中双引号后,查询解析为:
WHERE status IN ("value1", "value2", "value3")
下拉列表值是字符串。 若要使用日期或时间戳,请以数据源所需的格式输入它们。
基于查询的下拉列表
从保存的查询填充下拉列表选项。 行为类似于下拉列表,但选项是动态的。
- 在“设置”面板中的 类型 下,选择 基于查询的下拉列表。
- 单击 “查询 ”字段并选择保存的查询。
如果查询返回多个列,Azure Databricks使用第一列。 如果查询返回名为 name 和 value 的列,小组件显示 name 列,但在运行时将关联的 value 传递给查询。
例:
SELECT user_uuid AS 'value', username AS 'name' FROM users
| value | 名字 |
|---|---|
| 1001 | 约翰·史密斯 |
| 1002 | 简·多 |
| 1003 | Bobby 表 |
在运行时传递给数据库的值是 1001、1002 或 1003,而不是显示名称。
注释
如果源查询返回大量记录,则性能会下降。