Skip to main content

qtrex

CI

PyPI version

Query template rendering and execution library written in Python.

The goal of qtrex is to provide a simple API that supports loading .sql files that can be templated with jinja, and provide extensible configuration options to either compile the files, and execute the rendered templates against various databases.

Getting Started

qtrex is installable at https://pypi.org/project/qtrex/ via pip using:

We currently only support bigquery, but plan on adding other DB support as optional dependencies.

pip install 'qtrex[bigquery]==0.0.5'

Examples

Here is a brief example usage of qtrex.

Assuming you have query templates in a directory on a local filesystem, using our test suite as an example:

|tests
    |--test_*.py
    |--testdata
        |--mytemplate.sql
        |--ingest
            |--another_file_ext.j2
            |--another_query.sql

Where ./tests/testdata/mytemplate.sql has the following contents:

SELECT SUM(x)
FROM UNNEST({{ params.test_array }}) AS x

and ./tests/testdata/ingest/another_query.sql has:

SELECT
    *
FROM
    `{{ params.my_project_id }}.{{ params.my_dataset }}.{{ params.my_table }}`

and lastly, ./tests/testdata/nested_params.sql has:

SELECT
    {{ params.test_dict_key.one }} + {{ params.test_dict_key.two }}

Next, we want to have our .yaml config (or extend qtrex.config.BaseConfig) to implement your own config mechanism.

Our ./tests/example.yaml will look like:

params:
  - key: test_string_key
    value: "string_value"
  - key: test_array_key
    value: [1, 2, 3]
  - key: test_dict_key
    value:
      one: 1
      two: 2
      three: 3

We can now run the following script (./tests/example.py) after changing into the ./tests directory

from qtrex.executor import BigQueryExecutor
from qtrex.store import Store
from qtrex.config import YAMLConfig


def main():
    with open("./example.yaml", "r") as f:
        cfg = YAMLConfig(f)

    store = Store.from_path(cfg, "./testdata")
    ex = BigQueryExecutor()
    for query_ref in store:
        print(f"{query_ref.name}: {query_ref.template}\n")
        res = ex.execute(query_ref, dry_run=True)
        print(f"results: {res}")


if __name__ == "__main__":
    main()

When we run this script:

cd ./tests
python example.py

we should see the following in stdout

mytemplate.sql: SELECT SUM(x)
FROM UNNEST([1, 2, 3]) AS x

results: QueryResult(query_ref=QueryRef(filename='./testdata\\mytemplate.sql', template='SELECT SUM(x)\nFROM UNNEST([1, 2, 3]) AS x', name='mytemplate.sql'), df=None, error=None)
nested_params.sql: SELECT
    1 + 2

results: QueryResult(query_ref=QueryRef(filename='./testdata\\nested_params.sql', template='SELECT\n    1 + 2', name='nested_params.sql'), df=None, error=None)

Metadata

Release files for qtrex 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for qtrex 0.1.0
File Size Uploaded
qtrex-0.1.0.tar.gz 28.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for qtrex 0.1.0
File Interpreter ABI Platform
qtrex-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 42.8 kB

Release files / qtrex-0.1.0.tar.gz

Download URL qtrex-0.1.0.tar.gz
Size 28.3 kB
Tags Source
SHA-256 checksum
How to use checksums
806fb0973344f067716c25b2018b289158396cdb14cbac7a5064d57508b8ffd8
BLAKE2b-256 checksum
How to use checksums
3f15280d692a8852bac3f485004afa537d8f837df18f3e7fc89665b3b2e530de
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.8

Release files / qtrex-0.1.0-py3-none-any.whl

Download URL qtrex-0.1.0-py3-none-any.whl
Size 14.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39fcba022f67c39f549eddf874f059554a3495bcd289760aeacae11e4b368ecf
BLAKE2b-256 checksum
How to use checksums
abad73a9f5446299663ecb1669d92e19716228ceb21b957c1c9b9cda5342f3ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.8

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page