使用 Astronomer Cosmos 运行 dbt Core 项目
1. 项目介绍
Astronomer Cosmos 是一个开源项目,旨在帮助用户将 dbt Core 项目作为 Apache Airflow DAGs 和 Task Groups 运行。通过几行代码,用户可以轻松地将 dbt 项目集成到 Airflow 中,从而利用 Airflow 的数据感知调度、任务重试和警报等功能。
主要功能
- Airflow 连接支持:使用 Airflow 连接而不是 dbt 配置文件来运行 dbt 项目。
- 虚拟环境支持:自动安装和运行 dbt 在虚拟环境中,避免依赖冲突。
- 即时测试:在模型完成后立即运行测试,以便尽早发现问题。
- 数据感知调度:利用 Airflow 的数据感知调度功能,确保模型在上游数据摄取完成后立即运行。
2. 项目快速启动
安装
首先,确保你已经安装了 Apache Airflow 和 dbt Core。然后,通过以下命令安装 Astronomer Cosmos:
pip install astronomer-cosmos
配置
在 Airflow 中配置连接信息,例如数据库连接。然后,创建一个 dbt 项目并配置其 profiles.yml
文件。
示例代码
以下是一个简单的示例,展示如何使用 Astronomer Cosmos 渲染一个 dbt 项目并生成 Airflow DAG:
import os
from datetime import datetime
from pathlib import Path
from cosmos import DbtDag, ProjectConfig, ProfileConfig
from cosmos.profiles import PostgresUserPasswordProfileMapping
DEFAULT_DBT_ROOT_PATH = Path(__file__).parent / "dbt"
DBT_ROOT_PATH = Path(os.getenv("DBT_ROOT_PATH", DEFAULT_DBT_ROOT_PATH))
profile_config = ProfileConfig(
profile_name="default",
target_name="dev",
profile_mapping=PostgresUserPasswordProfileMapping(
conn_id="airflow_db",
profile_args={"schema": "public"}
)
)
basic_cosmos_dag = DbtDag(
project_config=ProjectConfig(
DBT_ROOT_PATH / "jaffle_shop"
),
profile_config=profile_config,
operator_args={
"install_deps": True,
"full_refresh": True
},
schedule_interval="@daily",
start_date=datetime(2023, 1, 1),
catchup=False,
dag_id="basic_cosmos_dag",
default_args={"retries": 2}
)
3. 应用案例和最佳实践
应用案例
- 数据仓库自动化:通过将 dbt 项目集成到 Airflow 中,实现数据仓库的自动化管理和调度。
- 实时数据处理:利用 Airflow 的实时数据处理能力,确保 dbt 模型在数据到达后立即运行。
最佳实践
- 依赖管理:确保 dbt 和 Airflow 的依赖版本兼容,避免运行时错误。
- 任务重试:配置适当的任务重试策略,以应对临时性错误。
- 监控和警报:利用 Airflow 的监控和警报功能,及时发现和处理问题。
4. 典型生态项目
Apache Airflow
Astronomer Cosmos 的核心依赖项目,提供强大的任务调度和管理功能。
dbt Core
数据转换工具,用于构建和维护数据仓库。
PostgreSQL
常用的关系型数据库,支持 dbt 和 Airflow 的数据存储和处理需求。
通过这些项目的结合,用户可以构建一个高效、可靠的数据处理和分析平台。