Skip to main content

A client for dbt's Semantic Layer

Project description

dbt Semantic Layer SDK for Python

🧪 This library is still experimental and it's not feature-complete yet.

A library for easily accessing dbt's Semantic Layer via Python.

Installation

To install the SDK, you'll need to specify optional dependencies depending on whether you want to use it synchronously (backed by requests) or via asyncio (backed by aiohttp).

# Sync installation
pip install "dbt-sl-sdk[sync]"

# Async installation
pip install "dbt-sl-sdk[sync]"

Usage

To run operations against the Semantic Layer APIs, just instantiate a SemanticLayerClient with your specific connection parameters (learn more):

from dbtsl import SemanticLayerClient

client = SemanticLayerClient(
    environment_id=123,
    auth_token="<your-semantic-layer-api-token>",
    host="semantic-layer.cloud.getdbt.com",
)

# query the first metric by `metric_time`
def main():
    with client.session():
        metrics = client.metrics()
        table = client.query(
            metrics=[metrics[0].name],
            group_by=["metric_time"],
        )
        print(table)

main()

Note that all method calls that will reach out to the APIs need to be within a client.session() context manager. By using a session, the client can connect to the APIs only once, and reuse the same connection between API calls.

asyncio

If you're using asyncio, import AsyncSemanticLayerClient from dbtsl.asyncio. The APIs of SemanticLayerClient and AsyncSemanticLayerClient are the same. The only difference is that the asyncio version has async methods which need to be awaited.

That same sync example can be converted into asyncio code like so:

import asyncio
from dbtsl.asyncio import AsyncSemanticLayerClient

client = AsyncSemanticLayerClient(
    environment_id=123,
    auth_token="<your-semantic-layer-api-token>",
    host="semantic-layer.cloud.getdbt.com",
)

async def main():
    async with client.session():
        metrics = await client.metrics()
        table = await client.query(
            metrics=[metrics[0].name],
            group_by=["metric_time"],
        )
        print(table)

asyncio.run(main())

Integrating with dataframe libraries

By design, the SDK returns all query data as pyarrow tables. If you wish to use the data with libraries like pandas or polars, you need to manually download them and convert the data into their format.

If you're using pandas:

# ... initialize client

arrow_table = client.query(...)
pandas_df = arrow_table.to_pandas()

If you're using polars:

import polars as pl

# ... initialize client

arrow_table = client.query(...)
polars_df = pl.from_arrow(arrow_table)

More examples

Check out our usage examples to learn more.

Disabling telemetry

By default, dbt the SDK sends some platform-related information to dbt Labs. If you'd like to opt out, do

from dbtsl.env import PLATFORM
PLATFORM.anonymous = True

# ... initialize client

Contributing

If you're interested in contributing to this project, check out our contribution guidelines.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dbt_sl_sdk-0.5.0.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

dbt_sl_sdk-0.5.0-py3-none-any.whl (37.1 kB view details)

Uploaded Python 3

File details

Details for the file dbt_sl_sdk-0.5.0.tar.gz.

File metadata

  • Download URL: dbt_sl_sdk-0.5.0.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for dbt_sl_sdk-0.5.0.tar.gz
Algorithm Hash digest
SHA256 6981ef2f8a026ddf142c1807655f9acff0fe45fe89b855125b0aae5a0b505805
MD5 3a68eadaa53bfd5dea0aa2b17cbc1421
BLAKE2b-256 ed9f27049054fd56d00e829dea1a1b3b1ed2af775029b91b1e441962c1c2da37

See more details on using hashes here.

File details

Details for the file dbt_sl_sdk-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: dbt_sl_sdk-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 37.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for dbt_sl_sdk-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 870e1fdaf0039cc6adbef7198e6b48d8217ecabe375627faaa71054cf5378e2d
MD5 ad2abb569f41204b49473c692b1b0544
BLAKE2b-256 52669cc69f8d77d847073652b5cf7de664432ea555a0623c62d331e7e27eb534

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page