查询参数
快速导航
使用参数,您可以在运行时将值替换到查询中,而无需编辑源。任何在双花括号 {{ }}
之间的字符串都将被视为参数。结果窗格上方将出现一个部件,以便您更改参数值。
在编辑模式下,您可以单击每个参数部件的齿轮图标来调整其设置。当您单击仅显示数据时,齿轮图标会消失,这样没有查询所有权的用户就无法更改参数行为。
从 UI 添加参数
您可以使用添加参数
按钮或相关的键盘快捷键,将参数插入到查询中并立即激活其设置面板。参数将插入到查询中文本插入符出现的位置。如果您发现参数插入到查询的错误部分,您可以选择整个参数(包括花括号!)并将其剪切/粘贴到任何必要的位置。
您可以将光标悬停在添加参数
按钮上方,以发现您操作系统上的快捷键。
参数设置
单击每个参数部件旁边的齿轮图标来编辑其设置
- 标题:默认情况下,参数标题将与查询文本中的关键字相同。如果您想给它一个更友好的名称,可以在这里更改它。
- 类型:每个参数都以文本类型开始。支持的类型有文本、数字、日期、日期和时间、日期和时间(带秒)以及下拉列表。
全局
复选框,该复选框会通知 Redash 您打算在仪表板的多个小部件中使用此参数。自版本 6 以来,全局
复选框已被下面描述的新仪表板上的参数映射功能所取代。
出于安全原因,Redash 用户必须拥有数据源的 完全访问 权限才能使用文本类型的查询参数。其他类型(如日期、日期范围、数字或下拉列表)对所有用户可用。
日期和日期范围参数
日期参数使用熟悉的日历选择界面,可以默认为当前日期和时间。您可以从三个精度级别中选择:日期、日期和时间以及带秒的日期和时间。
日期范围参数插入两个名为 .start
和 .end
的标记,表示您选择的日期范围的开始和结束。
SELECT a, b c
FROM table1
WHERE
relevant_date >= '{{ myDate.start }}'
AND table1.relevant_date <= '{{ myDate.end }}'
日期参数作为字符串传递到您的数据库。因此,您应该将它们用单引号 ('
) 或您的数据库用于声明字符串的任何字符括起来。虽然它们的行为类似于文本参数,但日期仍然可以安全地在嵌入和共享仪表板中使用。
日期范围参数使用组合小部件来简化范围选择。
快速日期和日期范围选项
当您向查询添加日期或日期范围参数时,选择小部件会显示一个蓝色闪电符号。单击该符号以查看“今天”或“昨天”之类的动态值。
也有动态日期范围选项。动态日期范围的完整列表是
- 本周
- 本月
- 今年
- 上周
- 上个月
- 去年
- 过去 7 天
- 过去 14 天
- 过去 30 天
- 过去 60 天
- 过去 90 天
- 过去 12 个月
下拉列表
如果要在运行查询时限制可能的参数值的范围,可以使用 Redash 的 下拉列表
参数类型。从参数设置面板中选择后,会出现一个文本框,您可以在其中输入允许的值,每个值用新行分隔。下拉列表在底层是 文本
参数,因此如果要在下拉列表中使用日期/日期时间,则应以数据源要求的格式输入它们。
基于查询的下拉列表
下拉列表也可以与现有查询的结果相关联。只需在设置面板的类型下单击 基于查询的下拉列表
。在从中加载下拉值的查询栏中搜索您的目标查询。如果您的目标查询返回大量记录,性能将会下降。
如果您的目标查询返回多个列,Redash 会使用第一列。如果您的目标查询返回 name
和 value
列,Redash 会使用 name
列填充参数选择小部件,但会使用相关的 value
执行查询。
例如,假设此查询
SELECT user_uuid as ‘value’, username as ‘name’ FROM users
返回此数据
值 | 名称 |
---|---|
1001 | John Smith |
1002 | Jane Doe |
1003 | Bobby Tables |
Redash 的下拉列表小部件将如下所示
但是,当 Redash 执行查询时,传递给数据库的值将是 1001、1002 或 1003。
序列化多选
下拉列表也可以序列化以允许多选。只需切换允许多个值选项,并选择是否用单引号或双引号包装参数。
在您的查询中,将您的 WHERE
子句更改为使用 IN
关键字。
SELECT ...
FROM ...
WHERE field IN ( {{ Multi Select Parameter }} )
参数多选小部件允许您将额外的值传递到数据库。
常见问题
我可以在单个查询中多次重用相同的参数吗?
当然!只需在花括号中使用相同的标识符。在这个例子中
SELECT {{org_id}}, count(0)
FROM queries
WHERE org_id = {{org_id}}
我们使用了两次 {{org_id}}
参数。
我可以在单个查询中使用多个参数吗?
当然,只需为每个参数使用唯一的名称。在这个例子中
SELECT count(0)
FROM queries
WHERE org_id = {{org_id}} AND created_at > '{{start_date}}'
我们使用了两个参数:{{org_id}}
和 {{start_date}}
。
我可以在嵌入式可视化和共享仪表板中使用参数吗?
可以,但有一个例外。如果查询使用文本类型的参数,则不能嵌入,因为文本参数不能防止 SQL 注入。所有其他类型的查询参数都可以安全地用于嵌入式可视化和仪表板中。
参数类型 | 可以安全嵌入吗? |
---|---|
文本 | 否 |
数字 | 是 |
下拉列表 | 是 |
基于查询的下拉列表 | 是 |
日期 | 是 |
日期和时间 | 是 |
带秒的日期和时间 | 是 |
日期范围 | 是 |
日期和时间范围 | 是 |
带秒的日期和时间范围 | 是 |
在 Redash 的版本 8 之前,不允许在嵌入式可视化中使用参数。在未来的版本中,将允许在公开共享的仪表板和可视化中使用所有类型的参数。我们的托管平台始终运行该应用程序的最新可用版本。
我可以通过 URL 更改参数值吗?
是的。每个参数都会出现在 URL 查询字符串中,并以 p_
作为前缀。例如,一个 id 为 1234
且包含以下查询文本的查询:
SELECT * FROM table WHERE field = {{param}}
其链接将如下所示:https://app.redash.io/<slug>/queries/1234?p_param=100
这对于在查询和仪表板之间进行链接非常有用。
仪表板上的参数映射
查询参数也可以在仪表板内进行强大的控制。您可以将不同小部件上的参数链接在一起,设置静态参数值,或者为每个小部件单独选择值。
在添加依赖于参数值的仪表板小部件时,您需要选择所需的参数映射。基础查询中的每个参数都会出现在参数列表中。
⋮
),然后单击编辑参数来访问参数映射界面。-
标题是参数的显示名称,将显示在仪表板上的值选择器旁边。它默认为参数关键字(请参阅下一个要点)。单击铅笔图标进行编辑。请注意,静态仪表板参数不会显示标题,因为值选择器被隐藏。如果选择
静态值
作为值源,则标题字段将变为灰色。 -
关键字是基础查询中此参数的字符串字面值。如果您的仪表板没有返回预期结果,这对于调试很有用。
-
默认值是 Redash 在未指定其他值时将使用的值。要从查询屏幕更改此值,请使用所需的参数值执行查询,然后单击保存按钮。
-
值源是您选择首选映射的位置。单击铅笔图标以打开映射器设置。
值源选项
-
新的仪表板参数: 仪表板参数允许您在仪表板上的一个位置设置参数值,并将其映射到多个可视化。使用此选项创建新的仪表板级别参数。
-
现有仪表板参数: 如果您已经设置了仪表板级别参数,请使用此选项将其映射到特定的查询参数。您将需要指定要映射的预先存在的仪表板参数。
-
小部件参数: 此选项将在仪表板小部件内显示值选择器。这对于未在小部件之间共享的一次性参数非常有用。
-
静态值: 选择此选项将允许您为此小部件选择静态值,而不管其他小部件上使用的值如何。静态映射的参数值不会在仪表板上的任何位置显示值选择器,这更加紧凑。当某些参数不经常更改时,这使您可以利用查询参数的灵活性,而不会使仪表板上的用户界面混乱。