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

[[437050]]

以下是 SnQL 的查询结构:

  1. MATCH simple | join | subquery 
  2.  
  3. SELECT [expressions] | [aggregations BY expressions] 
  4.  
  5. ARRAY JOIN [column
  6.  
  7. WHERE condition [[AND | OR] condition]* 
  8.  
  9. HAVING condition [[AND | OR] condition]* 
  10.  
  11. ORDER BY expressions ASC|DESC [, expressions ASC|DESC]* 
  12.  
  13. LIMIT expression BY n 
  14.  
  15. LIMIT n 
  16.  
  17. OFFSET n 
  18.  
  19. GRANULARITY n 
  20.  
  21. TOTALS boolean 

这些查询作为字符串发送到 /:dataset/snql 端点,编码为以下格式的 JSON body:

  1.     "query""<query>"
  2.     "dataset""<dataset>"
  3.     "consistent": bool, 
  4.     "turbo": bool, 
  5.     "debug": bool, 

数据集(dataset)通过查询使用的 url 隐含。在 JSON 主体中,除了 query 之外的所有字段都是可选的。

MATCH

我们的数据模型由实体图表示。该子句标识了我们正在查询的子图(subgraphs)的模式。目前支持三种类型的 MATCH 子句:

Simple:

  1. MATCH (<entity> [SAMPLE n]) 

这相当于我们当前的所有查询。这是从单个实体(事件、事务等)查询数据。可以通过将其与实体一起添加来向查询添加可选 sample。

例如:MATCH (events)

Subquery:

  1. MATCH { <query> } 

花括号内可以是另一个完整的 SQL 查询。子查询的 SELECT/BY 子句中的任何内容都将使用指定的别名在外部查询中公开。

例如:

  1. MATCH { 
  2.     MATCH (transactions) 
  3.     SELECT avg(duration) AS avg_d BY transaction 
  4. SELECT max(avg_d) 

Join(连接):

  1. MATCH (<alias>: <entity> [SAMPLE n]) -[<join>]-> (<alias>: <entity> [SAMPLE n]) 

一个 join 代表一个多节点子图(subgraph),是一个包含不同节点之间的多个关系的子图。目前支持节点之间的 1..n、n..1 和 1..1 有向关系。

对于 JOIN,每个实体都必须有一个别名,这是一个唯一的字符串。 抽样(Sampling)也可以应用于 join 中的任何实体。 是在 Snuba 中的 Entity 中指定的字符串,是一组 join 条件的简写。可以有多个 join 子句,用逗号分隔。

例如:

  1. MATCH 
  2.  
  3. (e: events) -[grouped]-> (g: groupedmessage), 
  4.  
  5. (e: events) -[assigned]-> (a: groupassignee) 
  6.  
  7. SELECT count() AS tot BY e.project_id, g.id 
  8.  
  9. WHERE a.user_id = "somebody" 

join 类型(left/inner)和 join key 是数据模型的一部分,而不是查询的一部分。它们被硬编码在实体代码中。这是因为没有实体可以安全地与底层数据库的分布式版本中的任何其他实体连接。

match 子句提供给 where 子句的元组(tuple)看起来与传统 join 子句生成的元组完全一样:

  1.  
  2. {"e.project_id": 1, "g.id": 10} 
  3.  
  4. {"e.project_id": 1, "g.id": 11} 
  5.  
  6. {"e.project_id": 2, "g.id": 20} 
  7.  
  8. ... 
  9.  

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 的整数,表示要采样的行数。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/135439.html<

(0)
运维的头像运维
上一篇2025-03-01 15:06
下一篇 2025-03-01 15:07

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注