Python SDK
Python SDK для разработки программного обеспечения dbt-sl-sdk
(SDK) — это библиотека на Python, которая предоставляет вам легкий доступ к dbt Semantic Layer с помощью Python. Она позволяет разработчикам взаимодействовать с API dbt Semantic Layer и запрашивать метрики и измерения в последующих инструментах.
Установка
Для установки Python SDK вам нужно указать дополнительные зависимости в зависимости от того, хотите ли вы использовать его синхронно, с поддержкой requests, или асинхронно (asyncio с поддержкой aiohttp).
Python SDK поддерживает версии Python с долгосрочной поддержкой (LTS), такие как 3.9, 3.10, 3.11 и 3.12. Когда Python прекращает поддержку версии, Python SDK также прекращает поддержку этой версии. Если вы используете неподдерживаемую версию, вы можете столкнуться с проблемами совместимости и не получите обновления или исправления безопасности от SDK.
- Синхронная установка
- Асинхронная установка
Синхронная установка означает, что ваша программа ждет завершения каждой задачи перед переходом к следующей.
Это проще, легче для понимания и подходит для небольших задач или когда вашей программе не нужно обрабатывать много задач одновременно.
pip install "dbt-sl-sdk[sync]"
Если вы используете асинхронные фреймворки, такие как FastAPI или Strawberry, установка синхронной версии SDK заблокирует ваш цикл событий и может значительно замедлить вашу программу. В этом случае мы настоятел ьно рекомендуем использовать асинхронную установку.
Асинхронная установка означает, что ваша программа может начать задачу и затем перейти к другим задачам, ожидая завершения первой. Это позволяет обрабатывать множество задач одновременно без ожидания, делая выполнение быстрее и эффективнее для больших задач или когда нужно управлять несколькими задачами одновременно.
Для получения более подробной информации обратитесь к asyncio.
pip install "dbt-sl-sdk[sync]"
Поскольку Python ADBC драйвер еще не поддерживает asyncio нативно, dbt-sl-sdk
использует ThreadPoolExecutor
для выполнения query
и list dimension-values
(всех операций, выполняемых с ADBC). Поэтому вы можете увидеть появление нескольких потоков Python.
Если вы используете асинхронные фреймворки, такие как FastAPI или Strawberry, установка синхронной версии Python SDK заблокирует ваш цикл событий и может значительно замедлить вашу программу. В этом случае мы настоятельно рекомендуем использовать асинхронную установку.
Использование
Чтобы выполнять операции с API Semantic Layer, создайте экземпляр SemanticLayerClient
с вашими параметрами подключения к API:
from dbtsl import SemanticLayerClient
client = SemanticLayerClient(
environment_id=123,
auth_token="<your-semantic-layer-api-token>",
host="semantic-layer.cloud.getdbt.com",
)
# запрос первой метрики по `metric_time`
def main():
with client.session():
metrics = client.metrics()
table = client.query(
metrics=[metrics[0].name],
group_by=["metric_time"],
)
print(table)
main()
Примечание: Все вызовы методов, обращающихся к API, должны находиться в контексте client.session()
. Это позволяет клиенту установить соединение с API только один раз и повторно использовать то же соединение между вызовами API.
Мы рекомендуем создавать сессию на уровне всего приложения и повторно использовать ту же сессию в течение всего приложения для оптимальной производительности. Создание сессии для каждого запроса не рекомендуется и неэффективно.
Использование asyncio
Если вы используете asyncio, импортируйте AsyncSemanticLayerClient
из dbtsl.asyncio
. API SemanticLayerClient
и AsyncSemanticLayerClient
идентичны, но асинхронная версия имеет асинхронные методы, которые нужно await
.
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())