创建基于 SQL 的可视化
- 选择一个要用于运行查询的 ClickHouse 连接。
- 也可以选择一个 Source —— 这样就能通过
$__filters宏将仪表板级过滤器应用到图表。 - 在编辑器中编写 SQL 查询,使用查询参数和宏与仪表板的时间范围、过滤器及变量集成。
- 点击 play 按钮预览结果,然后点击 Save。
查询参数
{paramName:Type}。
可用参数
表格、饼图和数值图表:
宏
$__ 开头,并会在查询发送到 ClickHouse 之前完成替换。
时间边界宏
时间过滤宏
WHERE 子句片段,用于按仪表板的时间范围过滤某一列。
$__timeFilter(TimestampTime) 的展开示例:
时间间隔宏
SELECT 和 GROUP BY 子句。仅适用于 折线图 和 Stacked-bar 可视化。
$__timeInterval(TimestampTime) 的展开示例:
仪表板过滤器宏
当在图表中选择了 Source 且仪表板过滤器已启用时,
$__filters 会展开为对应的 SQL WHERE 条件。未选择 Source 或未应用任何过滤器时,它会展开为 (1=1),因此始终可以安全地将其包含在 WHERE 子句中。
只有启用了 Broadcast filter condition 的过滤器才会由 $__filters 应用。作为变量公开的过滤器会被显式引用,如下所述。
仪表板变量宏
变量值也可直接插值为
$name 或 ${name},并可选择指定格式:${name:sqlstring} (默认) 、${name:csv} 或 ${name:regex}。在默认格式下,未选择任何值时,直接引用会呈现为 NULL;因此,凡是需要谓词的位置,建议优先使用上述宏。
查询结果的绘制方式
折线图和堆叠条形图
饼图
数值图表
表格图表
示例
需要系统表访问权限如果要在 play-clickstack.clickhouse.com 上运行以下示例,您需要指定
otel_v2.otel_logs 或 otel_v2.otel_traces。折线图 — 按服务划分的日志计数随时间变化
ts(DateTime) 用作 x 轴时间戳。count(numeric) 作为序列值进行绘制。ServiceName(string) 为每个服务生成一条单独的折线。
折线图 — 使用宏
折线图 — 使用仪表板变量
ServiceName 的 service 变量,以及一个基于 SeverityText 的 severity 变量,此查询会将图表范围限定为当前选定的服务,并排除选定的严重性级别。当变量未选择任何值时,两个宏都会展开为 1=1,因此在查看者选择值之前,图表不会应用过滤器。
堆叠条形图 — 按严重级别统计的错误数
表格图表 — 最慢的 10 个端点
饼图——按服务统计的请求分布
request_count(数值) 决定每个扇区的大小。ServiceName(字符串) 用于标注每个扇区。
数值图表——错误总数
total_errors。
注意事项
- 基于 SQL 的可视化会在启用
readonly模式的情况下执行——仅允许SELECT查询。 - 基于 SQL 的可视化必须且只能包含一条 SQL 查询,不支持多条查询。
- SQL 编辑器会为查询参数和宏提供自动补全建议。
- 必须先选择一个 source,才能将 仪表板 过滤器应用到基于 SQL 的可视化中。该 source 应与所查询的表一致,以确保过滤准确。
- 仪表板变量无需 source——其值来自仪表板的过滤器下拉列表,而非卡片自身的 source。
- 引用了仪表板变量的 SQL 卡片上的告警,会在所有变量均为空状态时进行评估,而不会使用仪表板中选定的值。