Snuba SDK for generating SnQL queries.
Project description
See here for the full documentation.
Status
Examples
Snuba SDK is a tool that allows SnQL queries (the language that Snuba uses) to be built programatically. A SnQL query is represented by a Query object, and has a number of attributes corresponding to different parts of the query.
Queries can be created directly:
query = Query(
dataset="discover",
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),
)
Queries can also be built incrementally:
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)
Once the query is built, it can be translated into a SnQL query that can be sent to Snuba or a human readable query.
# Outputs a formatted SnQL query
print(query.print())
This outputs:
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
If an expression in the query is invalid (e.g. Column(1)) then an InvalidExpression exception will be thrown. If there is a problem with a query, it will throw an InvalidQuery exception when .validate() or .translate() is called.
TODO List
Join support
Have the Entity object take a set of columns
Syntactic sugar
Contributing to the SDK
Please refer to CONTRIBUTING.rst.
License
Licensed under MIT, see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for snuba_sdk-0.0.9-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9b3a10109ecd44db16f5166c0f95c42a208dde55baa60a9bd6e61f31cc22701 |
|
MD5 | bcf0123d2d5d2fc5dfe78d8213887ad5 |
|
BLAKE2b-256 | 672026e688e910c909c812c079634a616f89b26c0df18c66cba55ec8c4c0a495 |