本文描述了 Snuba 查询语言 (SnQL)。

系列

以下是 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..nn..11..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* 形式的中缀表达式,其中 LHSRHS字面值表达式OP 指的是一个特定的运算符比较两个值。 这些运算符是 =!=<<=>>=INNOT INLIKENOT LIKEIS NULLIS NOT NULL 之一。请注意,当使用像 IS NULL 这样的运算符时,RHS 是可选的。

可以使用布尔关键字 ANDOR 组合条件。它们也可以使用 () 进行分组。

HAVING

WHERE 子句一样工作,但它在 SELECT 子句中声明的聚合之后应用。 所以我们可以在这里对聚合函数的结果应用条件。

ORDER BY

指定对结果集进行排序的表达式。

LIMIT BY/LIMIT/OFFSET

不言自明,它们采用整数并在 Clickhouse 查询中设置相应的值。 如果查询未指定 limitoffset,它们将分别默认为 10000

GRANULARITY

一个整数,表示对基于时间的结果进行分组的粒度。

TOTALS

如果设置为 True,来自 Snuba 的响应将有一个 “totals” key,其中包含所有选定行的总值。

SAMPLE

如果 MATCH 子句中的节点未提供采样率,则可以在此处指定。 在这种情况下,Snuba 会将 sample right 分配给查询中的节点之一。sample 可以是介于 01 之间的浮点数,表示要采样的行的百分比。

或者它可以是一个大于 1 的整数,表示要采样的行数。

Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)的更多相关文章

  1. Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  2. Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  3. Sentry 监控 - Snuba 数据中台架构(编写和测试 Snuba 查询)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  4. Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  5. Sentry 监控 - Snuba 数据中台本地开发环境配置实战

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  6. Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  7. Sentry 监控 - Environments 区分不同部署环境的事件数据

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  8. 【转】阿里架构总监一次讲透中台架构,13页PPT精华详解

    转:https://blog.csdn.net/u011323949/article/details/99542576 本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛, ...

  9. Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

随机推荐

  1. 【c++ Prime 学习笔记】第15章 面向对象程序设计

    15.1 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是:数据抽象.继承.动态绑定 使用数据抽象,可将类的接口与实现分离 使用继承,可定义相似的类 ...

  2. Shiro反序列化的检测与利用

    1. 前言 Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证.授权.密码套件和会话管理等功能. 2. 环境搭建 环境搭建vulhub 3. 如何发现 第一种情况 ...

  3. Scrum Meeting 0427

    零.说明 日期:2021-4-27 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分登录,注 ...

  4. rabbitmq生产者消息确认

    在使用 RabbitMQ 的时候,有时候当我们生产者发送一条消息到 RabbitMQ 服务器后,我们 生产者想知道消息是否到达了 RabbitMQ 服务器上.这个时候我们应该如何处理? 针对上述问题, ...

  5. Docker制作能够ssh连接的镜像

    本类文章只作为记录使用 命令操作: #拉取Centos 7 docker pull centos:7 #运行一个镜像 docker run -tdi --privileged centos:7 ini ...

  6. 热身训练1 Game

    http://acm.hdu.edu.cn/showproblem.php?pid=5242 简要题意: 一棵树有n个节点,每个节点x有一个权值wi,我们要从根节点出发(不可回头),去收集每个节点的权 ...

  7. 色彩滤镜矩阵(Color Filter Array)

    数码相机上的每个象素都带有一个光感应器,用以测量光线的明亮程度.由于光电二极管是只支持单颜色的装置,它不能区别不同波长的光线.因此,数码相机工程师在相机感应器的上部装上了一套镶嵌式的颜色滤镜,一个颜色 ...

  8. 常见SOC启动流程分析

    本文以s5pv210这款SOC为例,分析了其启动流程 在s5pv210的SOC内部,存在着一个内部的ROM和一个内部的RAM 这个内部的ROM叫做 IROM,它是norflash的一种.其不同于板子上 ...

  9. 常用Java API:大数类

    摘要 java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1, 对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错 ...

  10. jdk8下载与安装教程

     jdk8下载与安装教程下载有两种方式 一.网盘下载网盘下载链接 pan.baidu.com/s/1VQAwHS6WDjemDnKDnPIvww 提取码:f5tv二.官网下载如果想自己一步步研究亲自实 ...