Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
2021-11-29 14:26
796 查看
本文描述了
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 数据中台架构(Data Model 简介)
- Sentry 监控 - Snuba 数据中台本地开发环境配置实战
- Sentry 监控 - Discover 事件大数据查询分析引擎
- 架构小白到砖家-08-【数据存储问题】-JpaSpecificationExecutor解决单表动态查询
- Yahoo数据仓库架构简介
- SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL。
- mysql数据库note2:DQL数据查询语言
- 数据查询语言DQL
- Yahoo数据仓库架构简介
- 大数据架构简述(三):流处理、批处理、交互式查询
- oracle心得1--oracle简介@基本sql语句@条件查询@排序数据理论与案例
- 【7】mysql数据查询语言DQL(Data Query Language)②
- mysql之数据查询语言
- XQuery数据查询语言[1-1] (转载)
- springMVC+mybatis+dubbo实现SOA架构 以及数据查询
- MYSQL 数据查询语言 DQL
- 数据库MySQL-3-数据查询语言DQL、事务控制语言TCL
- SQL扩展之T-SQL中的数据查询语言之投影查询篇
- Hive简介、什么是Hive、为什么使用Hive、Hive的特点、Hive架构图、Hive基本组成、Hive与Hadoop的关系、Hive与传统数据库对比、Hive数据存储(来自学习资料)
- 面向对象的NHibernate数据查询语言-HQL