跳转到主要内容

Snuba SDK用于生成SnQL查询。

项目描述

https://sentry-brand.storage.googleapis.com/sentry-wordmark-dark-280x84.png

完整文档请见此处 文档.

状态

https://img.shields.io/pypi/v/snuba-sdk.svg https://github.com/getsentry/snuba-sdk/workflows/tests/badge.svg https://img.shields.io/discord/621778831602221064

示例

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 异常。如果请求或标志存在问题,则会分别抛出 InvalidRequestErrorInvalidFlagError

MQL示例

MQL查询可以类似于SnQL查询的方式构建。然而,它们使用的是MetricsQuery对象而不是Query对象。在MetricsQuery中,query参数是一个TimeseriesFormula,这是一个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

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适用于您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

此版本没有提供源代码分发文件。请参阅生成分发归档教程

构建分发

snuba_sdk-3.0.40-py2.py3-none-any.whl (50.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面