Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: Sentry 监控 - 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 的整数,表示要采样的行数。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
10天前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
|
3月前
|
消息中间件 SQL 监控
Serverless 应用的监控与调试问题之BMQ的架构是怎么支持流批一体的
Serverless 应用的监控与调试问题之BMQ的架构是怎么支持流批一体的
|
7天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
8天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
1月前
|
Kubernetes 调度 算法框架/工具
NVIDIA Triton系列02-功能与架构简介
本文介绍了NVIDIA Triton推理服务器的功能与架构,强调其不仅适用于大型服务类应用,还能广泛应用于各类推理场景。Triton支持多种模型格式、查询类型和部署方式,具备高效的模型管理和优化能力,确保高性能和系统稳定性。文章详细解析了Triton的主从架构,包括模型仓库、客户端应用、通信协议和推理服务器的核心功能模块。
58 1
NVIDIA Triton系列02-功能与架构简介
|
27天前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
28天前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
1月前
|
负载均衡 Go API
探索Go语言在微服务架构中的应用与优势
在这篇技术性文章中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构时的独特优势。文章将通过对比分析Go语言与其他主流编程语言,展示Go在并发处理、性能优化、以及开发效率上的优势。同时,我们将通过一个实际的微服务案例,详细说明如何利用Go语言构建高效、可扩展的微服务系统。
|
1月前
|
安全 Go 云计算
探索Go语言在微服务架构中的应用与优势
在本文中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构中的独特优势。文章将分析Go语言的并发模型、简洁的语法以及高效的编译速度,以及这些特性如何使其成为微服务架构的理想选择。我们将通过一个简单的微服务示例,展示Go语言在实际开发中的表现,并讨论其在性能和可维护性方面的优势。
|
1月前
|
存储 分布式计算 Hadoop
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
50 2