A client for dbt's Semantic Layer
Project description
dbt Semantic Layer SDK for Python
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[async]"
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 await
ed.
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
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 Distribution
Built Distribution
File details
Details for the file dbt_sl_sdk-0.6.0.tar.gz
.
File metadata
- Download URL: dbt_sl_sdk-0.6.0.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 79ce79250ed508e9f45cb134fcc32c46928d3c62afee923c878c46599ebf00b4 |
|
MD5 | 08f664c3e1c8ee3176d3390e38b26991 |
|
BLAKE2b-256 | 2fdc9e16cb92f66d657a04fd0ddda16a3bf408355aca1eee3beb1df95f4572dc |
File details
Details for the file dbt_sl_sdk-0.6.0-py3-none-any.whl
.
File metadata
- Download URL: dbt_sl_sdk-0.6.0-py3-none-any.whl
- Upload date:
- Size: 39.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d3a3a83565b7f2f361cb73da48fa24dc3d337d1f0bd401c76a047ae371c7b8df |
|
MD5 | 52a72b3d5b4ffbfd1be3c84448f2ea6f |
|
BLAKE2b-256 | 3e683b6277f18ee729735207af203e83a496f7c322dc907df9def89a8faf5e0d |