Snuba SDK for generating SnQL queries.
Project description
snuba-sdk - SDK for generating SnQL queries for Snuba
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
- Sample support in Entity
- Subscriptable support (measurements[fcp.first])
- Curried function calls
- unary conditions
- Complex boolean conditions (AND/OR)
- Join support
- Have the Entity object take a set of columns
- Syntactic sugar
Contributing to the SDK
Please refer to CONTRIBUTING.md.
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
File details
Details for the file snuba_sdk-0.0.3-py2.py3-none-any.whl
.
File metadata
- Download URL: snuba_sdk-0.0.3-py2.py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee9d9214f0d1cd4a8206da32931cafde194917c6b3032595c4e1d2be698dded9 |
|
MD5 | 61a28a7d3cf91e9ecf27a1f64c32ae84 |
|
BLAKE2b-256 | 9c5e9419e1313292b1a1eb204ed365fcacfcc034767f32993de6d18dd7855be9 |