Snuba SDK用于生成SnQL查询。
项目描述
完整文档请见此处 文档.
状态
示例
Snuba SDK是一个允许程序化构建对Snuba请求的工具。一个请求由一个查询、查询的目标数据集、请求的AppID以及任何请求标志组成。查询对象是SnQL或MQL查询的代码表示,并具有与查询不同部分相对应的多个属性。
请求和查询可以直接创建
request = Request(
dataset = "discover",
app_id = "myappid",
tenant_ids = {"referrer": "my_referrer", "organization_id": 1234}
query = Query(
match=Entity("events"),
select=[
Column("title"),
Function("uniq", [Column("event_id")], "uniq_events"),
],
groupby=[Column("title")],
where=[
Condition(Column("timestamp"), Op.GT, datetime.datetime(2021, 1, 1)),
Condition(Column("project_id"), Op.IN, Function("tuple", [1, 2, 3])),
],
limit=Limit(10),
offset=Offset(0),
granularity=Granularity(3600),
),
flags = Flags(debug=True)
)
查询也可以逐步构建
query = (
Query("discover", Entity("events"))
.set_select(
[Column("title"), Function("uniq", [Column("event_id")], "uniq_events")]
)
.set_groupby([Column("title")])
.set_where(
[
Condition(Column("timestamp"), Op.GT, datetime.datetime.(2021, 1, 1)),
Condition(Column("project_id"), Op.IN, Function("tuple", [1, 2, 3])),
]
)
.set_limit(10)
.set_offset(0)
.set_granularity(3600)
)
一旦构建了请求,它就可以被转换成可以发送到Snuba的Snuba请求。
# Outputs a formatted Snuba request
request.serialize()
它还可以以更易读的格式打印。
# Outputs a formatted Snuba request
print(request.print())
这将输出
{
"dataset": "discover",
"app_id": "myappid",
"query": "MATCH (events) SELECT title, uniq(event_id) AS uniq_events BY title WHERE timestamp > toDateTime('2021-01-01T00:00:00.000000') AND project_id IN tuple(1, 2, 3) LIMIT 10 OFFSET 0 GRANULARITY 3600",
"debug": true
}
如果查询中的表达式无效(例如 Column(1)),则会抛出 InvalidExpressionError 异常。如果查询存在问题,则在调用 .validate() 或 .translate() 时会抛出 InvalidQueryError 异常。如果请求或标志存在问题,则会分别抛出 InvalidRequestError 或 InvalidFlagError。
MQL示例
MQL查询可以类似于SnQL查询的方式构建。然而,它们使用的是MetricsQuery对象而不是Query对象。在MetricsQuery中,query参数是一个Timeseries或Formula,这是一个Timeseries的数学公式。
传递给MetricsQuery的其他参数是关于如何运行查询的元数据,例如开始/结束时间戳、粒度、限制等。
MetricsQuery(
query=Formula(
ArithmeticOperator.DIVIDE.value,
[
Timeseries(
metric=Metric(
public_name="transaction.duration",
),
aggregate="sum",
),
1000,
],
),
start=NOW,
end=NOW + timedelta(days=14),
rollup=Rollup(interval=3600, totals=None, granularity=3600),
scope=MetricsScope(
org_ids=[1], project_ids=[11], use_case_id="transactions"
),
limit=Limit(100),
offset=Offset(5),
)
为SDK贡献力量
请参阅CONTRIBUTING.rst。
许可证
根据FSL-1.0-Apache-2.0许可,请参阅LICENSE.md。
项目详情
下载文件
下载适用于您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
此版本没有提供源代码分发文件。请参阅生成分发归档教程。
构建分发
snuba_sdk-3.0.40-py2.py3-none-any.whl (50.4 kB 查看哈希值)