用jaffle_shop模版快速上手dbt:从seed数据到生成第一个数据模型的完整流程
用jaffle_shop模版快速上手dbt从seed数据到生成第一个数据模型的完整流程当你第一次接触dbt时可能会被各种概念和配置搞得晕头转向。作为一个专注于数据转换的工具dbt确实需要一些时间来掌握。但好消息是dbt官方提供了一个绝佳的入门项目——jaffle_shop它能让你在30分钟内完成从零到第一个数据模型的全过程。jaffle_shop是dbt团队精心设计的教学项目模拟了一个虚构的在线商店的数据环境。它包含了完整的目录结构、示例数据和模型文件特别适合需要快速验证dbt价值的数据团队。通过这个项目你不仅能理解dbt的核心概念还能立即看到它在实际工作中的效果。1. 环境准备与项目初始化在开始之前确保你已经安装了Python 3.7-3.9版本不推荐使用3.10及以上版本可能存在兼容性问题。然后通过pip安装dbt-core和你所需的适配器pip install dbt-core pip install dbt-适配器名称 # 例如dbt-postgres、dbt-snowflake等jaffle_shop项目支持多种数据库适配器包括PostgreSQLSnowflakeBigQueryRedshift其他主流数据仓库获取项目非常简单只需执行git clone https://github.com/dbt-labs/jaffle_shop.git cd jaffle_shop项目目录结构清晰明了jaffle_shop/ ├── dbt_project.yml # 项目配置文件 ├── seeds/ # 种子数据目录 │ ├── raw_customers.csv │ ├── raw_orders.csv │ └── raw_payments.csv ├── models/ # 数据模型目录 │ ├── staging/ # 原始数据模型 │ ├── intermediate/ # 中间模型 │ └── marts/ # 业务模型 └── ... # 其他目录2. 配置profiles.yml连接数据库profiles.yml是dbt连接数据库的关键配置文件。对于jaffle_shop项目我们需要在用户目录下的.dbt/文件夹中创建或修改这个文件。jaffle_shop: # 必须与dbt_project.yml中的profile名称一致 target: dev outputs: dev: type: postgres # 根据你的数据库类型修改 host: localhost user: your_username password: your_password port: 5432 dbname: your_database schema: jaffle_shop threads: 4提示对于生产环境建议使用环境变量或加密方式存储敏感信息而不是直接写在配置文件中。验证配置是否正确dbt debug这个命令会检查dbt核心功能是否正常数据库连接是否成功配置文件是否正确依赖是否满足3. 加载种子数据与运行第一个模型jaffle_shop项目已经为我们准备好了三张基础表的数据raw_customers.csv- 客户基本信息raw_orders.csv- 订单记录raw_payments.csv- 支付信息使用seed命令将这些CSV文件加载到数据库中dbt seed这个命令会读取seeds目录下的CSV文件在数据库中创建对应的表将数据插入到这些表中接下来运行模型dbt run这个命令会执行models目录下的所有SQL文件按照依赖关系顺序构建数据模型。jaffle_shop项目已经预定义了完整的模型层次模型层级作用示例模型staging原始数据清洗stg_customers, stg_ordersintermediate数据转换与整合int_customer_ordersmarts业务分析模型dim_customers, fct_orders4. 解决常见环境配置问题在实际使用中你可能会遇到一些环境配置问题。以下是几个常见场景及解决方案问题1本地与服务器环境配置冲突当你在不同环境中使用dbt时可以通过以下方式管理配置差异使用不同的target环境# profiles.yml jaffle_shop: target: dev # 默认环境 outputs: dev: # 开发环境配置 prod: # 生产环境配置然后通过--target参数指定环境dbt run --target prod使用环境变量动态配置jaffle_shop: outputs: dev: type: postgres host: {{ env_var(DB_HOST) }} user: {{ env_var(DB_USER) }}问题2适配器版本冲突当dbt-core与适配器版本不匹配时可以指定版本安装pip install dbt-core1.1.0 dbt-postgres1.1.0版本兼容性对照表dbt-core版本适配器版本范围Python版本要求1.0.x1.0.x3.7-3.91.1.x1.1.x3.7-3.91.2.x1.2.x3.7-3.95. 深入理解jaffle_shop模型架构jaffle_shop项目的模型设计体现了dbt的最佳实践。让我们分析几个关键模型stg_customers.sql- 原始客户数据清洗with source as ( select * from {{ source(jaffle_shop, raw_customers) }} ), renamed as ( select id as customer_id, first_name, last_name from source ) select * from renamed这个模型展示了dbt的几个核心特性{{ source() }}函数引用种子数据清晰的CTE结构提高可读性字段重命名和选择int_customer_orders.sql- 客户订单聚合with customers as ( select * from {{ ref(stg_customers) }} ), orders as ( select * from {{ ref(stg_orders) }} ), customer_orders as ( select customer_id, min(order_date) as first_order_date, max(order_date) as most_recent_order_date, count(order_id) as number_of_orders from orders group by customer_id ) select customers.customer_id, customers.first_name, customers.last_name, customer_orders.first_order_date, customer_orders.most_recent_order_date, coalesce(customer_orders.number_of_orders, 0) as number_of_orders from customers left join customer_orders using (customer_id)这个中间模型展示了使用{{ ref() }}引用其他模型业务逻辑的实现数据聚合和关联6. 扩展jaffle_shop项目掌握了基础流程后你可以尝试扩展这个项目添加新的种子数据在seeds目录下添加CSV文件运行dbt seed加载数据创建新模型dbt run-operation generate_model --args {name: my_new_model}添加测试 在schema.yml中定义version: 2 models: - name: stg_customers columns: - name: customer_id tests: - unique - not_null然后运行dbt test文档生成dbt docs generate dbt docs serve7. 生产环境最佳实践当准备将jaffle_shop模式应用到实际项目时考虑以下建议项目结构优化models/ ├── staging/ │ ├── sources.yml │ ├── src_*.sql ├── intermediate/ ├── marts/ │ ├── finance/ │ ├── marketing/ ├── utils/配置管理使用环境变量管理敏感信息为不同环境创建profile配置利用dbt_project.yml管理全局变量性能优化技巧合理设置物化策略view/table/incremental使用增量模型处理大数据量优化模型依赖关系CI/CD集成# .github/workflows/dbt.yml jobs: run: steps: - run: dbt deps - run: dbt run --target prod - run: dbt test --target prod通过jaffle_shop项目我们不仅学会了dbt的基本操作更重要的是理解了如何构建一个可维护、可扩展的数据转换项目。这个模板的价值在于它提供了一个真实的工作流程而不仅仅是抽象的概念。在实际项目中你可以基于这个结构不断扩展构建适合自己业务需求的数据模型体系。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427696.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!