Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
本文描述了 Snuba
查询语言 (SnQL
)。
系列
- 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本
- 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps
- Sentry For React 完整接入详解
- Sentry For Vue 完整接入详解
- Sentry-CLI 使用详解
- Sentry Web 性能监控 - Web Vitals
- Sentry Web 性能监控 - Metrics
- Sentry Web 性能监控 - Trends
- Sentry Web 前端监控 - 最佳实践(官方教程)
- Sentry 后端监控 - 最佳实践(官方教程)
- Sentry 监控 - Discover 大数据查询分析引擎
- Sentry 监控 - Dashboards 数据可视化大屏
- Sentry 监控 - Environments 区分不同部署环境的事件数据
- Sentry 监控 - Security Policy 安全策略报告
- Sentry 监控 - Search 搜索查询实战
- Sentry 监控 - Alerts 告警
- Sentry 监控 - Distributed Tracing 分布式跟踪
- Sentry 监控 - 面向全栈开发人员的分布式跟踪 101 系列教程(一)
- Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
- Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
- Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
- Sentry 官方 JavaScript SDK 简介与调试指南
- Sentry 监控 - Snuba 数据中台架构(编写和测试 Snuba 查询)
以下是 SnQL
的查询结构:
MATCH simple | join | subquery
SELECT [expressions] | [aggregations BY expressions]
ARRAY JOIN [column]
WHERE condition [[AND | OR] condition]*
HAVING condition [[AND | OR] condition]*
ORDER BY expressions ASC|DESC [, expressions ASC|DESC]*
LIMIT expression BY n
LIMIT n
OFFSET n
GRANULARITY n
TOTALS boolean
这些查询作为字符串发送到 /:dataset/snql
端点,编码为以下格式的 JSON body
:
{
"query": "<query>",
"dataset": "<dataset>",
"consistent": bool,
"turbo": bool,
"debug": bool,
}
数据集(dataset)
通过查询使用的 url
隐含。在 JSON
主体中,除了 query
之外的所有字段都是可选的。
MATCH
我们的数据模型由实体图表示。该子句标识了我们正在查询的子图(subgraphs)
的模式。目前支持三种类型的 MATCH
子句:
Simple:
MATCH (<entity> [SAMPLE n])
这相当于我们当前的所有查询。 这是从单个实体(事件、事务等)查询数据。可以通过将其与实体一起添加来向查询添加可选 sample
。
例如:MATCH (events)
Subquery:
MATCH { <query> }
花括号内可以是另一个完整的 SQL
查询。子查询的 SELECT/BY
子句中的任何内容都将使用指定的别名在外部查询中公开。
例如:
MATCH {
MATCH (transactions)
SELECT avg(duration) AS avg_d BY transaction
}
SELECT max(avg_d)
Join(连接):
MATCH (<alias>: <entity> [SAMPLE n]) -[<join>]-> (<alias>: <entity> [SAMPLE n])
一个 join
代表一个多节点子图(subgraph)
,是一个包含不同节点之间的多个关系的子图。目前支持节点之间的 1..n
、n..1
和 1..1
有向关系。
对于 JOIN
,每个实体都必须有一个别名,这是一个唯一的字符串。 抽样(Sampling)
也可以应用于 join
中的任何实体。<join>
是在 Snuba
中的 Entity
中指定的字符串,是一组 join
条件的简写。可以有多个 join
子句,用逗号分隔。
例如:
MATCH
(e: events) -[grouped]-> (g: groupedmessage),
(e: events) -[assigned]-> (a: groupassignee)
SELECT count() AS tot BY e.project_id, g.id
WHERE a.user_id = "somebody"
join
类型(left/inner
)和 join key
是数据模型的一部分,而不是查询的一部分。它们被硬编码在实体代码中。 这是因为没有实体可以安全地与底层数据库的分布式版本中的任何其他实体连接。
match
子句提供给 where
子句的元组(tuple)
看起来与传统 join
子句生成的元组完全一样:
[
{"e.project_id": 1, "g.id": 10}
{"e.project_id": 1, "g.id": 11}
{"e.project_id": 2, "g.id": 20}
...
]
SELECT .. BY
该子句指定应在输出中返回哪些结果。如果存在聚合(aggregation
),则 BY
子句中的所有内容都被视为分组 key
。 如果我们想要聚合整个结果集,则可以在没有 BY
子句的情况下进行聚合,但在这种情况下,SELECT
中只能包含聚合。即使有 BY
子句,空的 SELECT
子句也是无效的。
SELECT
子句中的表达式
可以是列
、算术
、函数
或三
者的任意组合。 如果查询是 join
,则每一列都必须有一个符合条件的别名,该别名与 MATCH
子句中的实体别名之一匹配。
WHERE
这是在聚合之前发生的查询的过滤器(如 SQL
中的 WHERE
)。
条件是 LHS OP RHS*
形式的中缀表达式,其中 LHS
和 RHS
是字面值
或表达式
。OP
指的是一个特定的运算符
来比较
两个值。 这些运算符是 =
、!=
、<
、<=
、>
、>=
、IN
、NOT IN
、LIKE
、NOT LIKE
、IS NULL
、IS NOT NULL
之一。请注意,当使用像 IS NULL
这样的运算符时,RHS
是可选的。
可以使用布尔关键字 AND
或 OR
组合条件。它们也可以使用 ()
进行分组。
HAVING
像 WHERE
子句一样工作,但它在 SELECT
子句中声明的聚合之后应用。 所以我们可以在这里对聚合函数的结果应用条件。
ORDER BY
指定对结果集进行排序的表达式。
LIMIT BY/LIMIT/OFFSET
不言自明,它们采用整数并在 Clickhouse
查询中设置相应的值。 如果查询未指定 limit
或 offset
,它们将分别默认为 1000
和 0
。
GRANULARITY
一个整数,表示对基于时间的结果进行分组的粒度。
TOTALS
如果设置为 True
,来自 Snuba
的响应将有一个 “totals”
key,其中包含所有选定行的总值。
SAMPLE
如果 MATCH
子句中的节点未提供采样率
,则可以在此处指定。 在这种情况下,Snuba
会将 sample right
分配给查询中的节点之一。sample
可以是介于 0
和 1
之间的浮点数,表示要采样的行的百分比。
或者它可以是一个大于 1
的整数,表示要采样的行数。
Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)的更多相关文章
- Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台架构(编写和测试 Snuba 查询)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台本地开发环境配置实战
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Sentry 监控 - Environments 区分不同部署环境的事件数据
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 【转】阿里架构总监一次讲透中台架构,13页PPT精华详解
转:https://blog.csdn.net/u011323949/article/details/99542576 本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛, ...
- Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
随机推荐
- CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
CVE-2017-11882分析总结 注: 这篇随笔记录了CVE-2017-11882漏洞分析的整个过程,并介绍了相关调试软件的使用 漏洞信息 CVE-2017-11882属于缓冲区溢出类型漏洞,产生 ...
- Netty 组件分析
EventLoop 事件循环对象 EventLoop 本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理 Channel 上源源不断的 io 事件. 它的继承关系比较 ...
- AIbee 笔试
CSS选择器 div+p 选择紧接在div元素之后的所有< p >元素 C++删除数组最后一个元素. 例如[1 2 3 4] 最后变为 [1 2 3] 用splice的删除,增加和替换 a ...
- jenkins的安装、配置使用
1.jenkins的使用 (1).需要先下载安装JDK 配置jdk的环境 变量JAVA_HOME的值是 jdk 的安装位置, 然后下载安装tomcat 安装好了之后,打开tomcat下的bin文件夹, ...
- JVM:类加载与字节码技术-2
JVM:类加载与字节码技术-2 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 这部分内容在上一篇笔记中: 类文件结构 字节码指令 编译期处理 类加载阶段 ...
- Java:ThreadLocal小记
Java:ThreadLocal小记 说明:这是看了 bilibili 上 黑马程序员 的课程 java基础教程由浅入深全面解析threadlocal 后做的笔记 内容 ThreadLocal 介绍 ...
- [对对子队]事后总结Beta
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 要做一个游戏,定义的很清楚,实现出来的效果贴近定义,对用户和场景有清晰描述 我们达到目标了么(原计划的功 ...
- 6月8日 Scrum Meeting
日期:2021年6月8日 会议主要内容概述: 确定6.9日下午两点到五点集中对接 初步确定主题配色和echarts默认图表颜色 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作 ...
- Noip模拟21(持续翻车)2021.7.20
读题总是读错是不是没救了... T1 Median 中位数:按顺序排列的一组数据中居于中间位置的数. 能用上的高亮符号都用上了... 当时忘了就离谱.... 理解什么是中位数(真是个憨憨)后就可以开始 ...
- mysql 导入sql文件
navicat 工具导入 1.连接数据库后,右键选择导入sql文件 2.选择sql文件,开始导入 4.过程图 5.结果图