创建基于 SQL 的可视化
- 选择一个要用于运行查询的 ClickHouse 连接。
- 也可以选择一个 Source —— 这样就能通过
$__filters宏将仪表板级过滤器应用到图表。 - 在编辑器中编写 SQL 查询,使用查询参数和宏与仪表板的时间范围及过滤器集成。
- 点击 play 按钮预览结果,然后点击 Save。
查询参数
{paramName:Type}。
可用参数
| 参数 | 类型 | 描述 |
|---|---|---|
{startDateMilliseconds:Int64} | Int64 | 仪表板日期范围的开始时间 (自纪元以来的毫秒数) |
{endDateMilliseconds:Int64} | Int64 | 仪表板日期范围的结束时间 (自纪元以来的毫秒数) |
{intervalSeconds:Int64} | Int64 | 时间分桶大小 (以秒为单位,基于粒度) |
{intervalMilliseconds:Int64} | Int64 | 时间分桶大小 (以毫秒为单位,基于粒度) |
| 参数 | 类型 | 描述 |
|---|---|---|
{startDateMilliseconds:Int64} | Int64 | 仪表板日期范围的开始时间 (自纪元以来的毫秒数) |
{endDateMilliseconds:Int64} | Int64 | 仪表板日期范围的结束时间 (自纪元以来的毫秒数) |
宏
$__ 开头,并会在查询发送到 ClickHouse 之前完成替换。
时间边界宏
| Macro | 展开为 | 列类型 |
|---|---|---|
$__fromTime | toDateTime(fromUnixTimestamp64Milli({startDateMilliseconds:Int64})) | DateTime |
$__toTime | toDateTime(fromUnixTimestamp64Milli({endDateMilliseconds:Int64})) | DateTime |
$__fromTime_ms | fromUnixTimestamp64Milli({startDateMilliseconds:Int64}) | DateTime64 |
$__toTime_ms | fromUnixTimestamp64Milli({endDateMilliseconds:Int64}) | DateTime64 |
$__interval_s | {intervalSeconds:Int64} | Int64 |
时间过滤宏
WHERE 子句片段,用于按仪表板的时间范围过滤某一列。
| Macro | Description |
|---|---|
$__timeFilter(column) | 按仪表板时间范围过滤 DateTime 列 |
$__timeFilter_ms(column) | 按仪表板时间范围过滤 DateTime64 (毫秒) 列 |
$__dateFilter(column) | 按仪表板时间范围过滤 Date 列 |
$__dateTimeFilter(dateCol, timeCol) | 使用单独的 Date 列和 DateTime 列进行过滤 |
$__dt(dateCol, timeCol) | $__dateTimeFilter 的别名 |
$__timeFilter(TimestampTime) 的展开示例:
时间间隔宏
SELECT 和 GROUP BY 子句。仅适用于 折线图 和 Stacked-bar 可视化。
| Macro | Description |
|---|---|
$__timeInterval(column) | 将 DateTime 列按 intervalSeconds 的时间间隔分组 |
$__timeInterval_ms(column) | 将 DateTime64 列按 intervalMilliseconds 的时间间隔分组 |
$__timeInterval(TimestampTime) 的展开示例:
仪表板过滤器宏
| Macro | Description |
|---|---|
$__filters | 替换为仪表板级过滤条件 (需要选择一个 Source) |
$__filters 会展开为对应的 SQL WHERE 条件。未选择 Source 或未应用任何过滤器时,它会展开为 (1=1),因此始终可以安全地将其包含在 WHERE 子句中。
查询结果的绘制方式
折线图和堆叠条形图
| 角色 | 列类型 | 说明 |
|---|---|---|
| 时间戳 | 第一个 Date 或 DateTime 列 | 用作 x 轴。 |
| 系列值 | 所有数值列 | 每个数值列都会绘制为单独的 series。这些通常是聚合值。 |
| 分组名称 | String、Map 或 Array 列 | 可选。分组值不同的行会绘制为单独的 series。 |
饼图
| 角色 | 列类型 | 描述 |
|---|---|---|
| 切片值 | 第一个数值列 | 决定每个切片的大小。 |
| 切片标签 | String、Map 或 Array 列 | 可选。每个唯一值都会成为一个切片标签。 |
数值图表
| 角色 | 列类型 | 描述 |
|---|---|---|
| 数值 | 第一个数值列 | 显示第一个数值列第一行的值。 |
表格图表
示例
需要系统表访问权限如果要在 play-clickstack.clickhouse.com 上运行以下示例,您需要指定
otel_v2.otel_logs 或 otel_v2.otel_traces。折线图 — 按服务划分的日志计数随时间变化
ts(DateTime) 用作 x 轴时间戳。count(numeric) 作为序列值进行绘制。ServiceName(string) 为每个服务生成一条单独的折线。
折线图 — 使用宏
堆叠条形图 — 按严重级别统计的错误数
表格图表 — 最慢的 10 个端点
饼图——按服务统计的请求分布
request_count(数值) 决定每个扇区的大小。ServiceName(字符串) 用于标注每个扇区。
数值图表——错误总数
total_errors。
注意事项
- 基于 SQL 的可视化会在启用
readonly模式的情况下执行——仅允许SELECT查询。 - 基于 SQL 的可视化必须且只能包含一条 SQL 查询,不支持多条查询。
- SQL 编辑器会为查询参数和宏提供自动补全建议。
- 必须先选择一个 source,才能将 仪表板 过滤器应用到基于 SQL 的可视化中。该 source 应与所查询的表一致,以确保过滤准确。