来自官方的一些dbt 最佳实践
限制对原始数据的依赖性
您的项目将取决于存储在数据库中的原始数据。我们建议制作所谓的“基本模型”,以最大限度地减少对原始数据表的依赖性。在此约定中,基本模型可以具有以下职责:
- 仅选择与当前分析相关的字段以限制复杂性。以后可以随时添加更多字段。
- 执行任何所需的类型转换。
- 执行字段别名以将字段名称合理化为项目中使用的标准格式。
- 充当给定原始数据表的唯一访问点。
在此约定中,所有后续数据模型都建立在基本模型之上而不是原始数据之上 - 仅允许基本模型从原始数据表中进行选择。这可以确保基本模型中的所有转换都将应用于此数据的所有使用,并且如果源数据表移动(或位于不同环境中的不同架构或表中),则可以在单一的地方。
有关基本模型的简单示例,请查看此Quickbooks基本模型。
首先构建视图
在构建新的dbt模型时,默认情况下将这些新模型实现为视图是很常见的。视图部署速度非常快,而且配置选项很少。由于模型行为由配置控制,因此您可以在项目需要发展时更新特定模型的配置,而无需修改模型代码。
要将项目配置为默认视图,您需要将以下内容放入dbt_project.yml
:
models:
[your-project-name]:
enabled: true
materialized: view
管理多个环境
dbt支持target
给定项目中的多个s ~/.dbt/profiles.yml
。用户可以配置默认值,target
并可以使用--target
传递给的标志覆盖此设置dbt run
。我们建议您将默认设置设置target
为开发环境,然后target
专门切换到生产环境以部署到生产环境。
使用target
管理多个环境,您可以灵活地根据自己的选择设置环境。通常,环境由同一数据库中的模式管理:所有测试模型都部署到调用的模式dbt_[username]
,生产模型部署到调用的模式analytics
。理想的设置将生产和测试数据库完全分开。无论哪种方式,我们强烈建议维护多个环境并使用管理部署target
。
源控制工作流程
我们认为所有dbt项目都应该通过源代码管理来管理。我们使用git进行所有源代码控制,并使用分支和拉取请求来保持主分支成为组织真实的唯一来源。
以交互方式使用dbt
当您的项目变得足够大时,dbt run
可能需要一段时间。dbt提供了三种主要方法来解决此问题,以便您可以快速部署对数据库的更改:
- 在开发过程中尽可能使用视图而不是表。视图通常比表更快地部署,并且在开发过程中,后续分析查询尽可能快地运行通常并不重要。以后可以轻松更改此设置,它不会对您的业务逻辑产生任何影响。
- 使用
dbt_project.yml
禁用你没有目前的工作项目的部分。如果给定项目中有多个模块,请关闭当前未处理的模块,以便不会对每个模块进行部署dbt run
。 - 将
--models
旗帜传递给dbt run
。此标志使dbt仅部署您指定的模型及其依赖项。如果您正在处理特定模型,这会在大型项目中的部署时间上产生非常显着的差异。
来自官方的一些dbt 最佳实践的更多相关文章
- 转载:Google 官方应用架构的最佳实践指南 赞👍
官方给的实践指南,很有实际的指导意义, 特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...
- Dockerfile 命令详解及最佳实践
Dockerfile 命令详解 FROM 指定基础镜像(必选) 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指 ...
- Sentry 后端监控 - 最佳实践(官方教程)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 来自Google资深工程师的API设计最佳实践
来自Google资深工程师Joshua Bloch的分享:API设计最佳实践 为什么API设计如此重要?API是一个公司最重要的资产. 为什么API的设计对程序员如此重要? API一旦发布,出于兼容性 ...
- 可伸缩性最佳实践:来自eBay的经验
看到一篇关于系统可伸缩性(可扩展)的文章,eBay的架构师Randy Shoup写的,原文出处没找到,就不写转载的地址了.根据自己的理解对文章有修改剪切的地方. 在eBay,可伸缩性是我们每天奋力抵抗 ...
- (转)可伸缩性最佳实践:来自eBay的经验
转自:http://www.infoq.com/cn/articles/ebay-scalability-best-practices 在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力.我们所做的 ...
- 给JavaScript初学者的24条最佳实践
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0 } .fluid-width-video-wrapp ...
- Java 日志管理最佳实践
转:http://blog.jobbole.com/51155/ 日志记录是应用程序运行中必不可少的一部分.具有良好格式和完备信息的日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源.对于开 ...
- PHP最佳实践(译)
原文: PHP Best Practices-A short, practical guide for common and confusing PHP tasks 译者:youngsterxyf 最 ...
随机推荐
- ubuntu svn二进制文件
1. 查找2:04时间的日志文件和position. Ps:这里假设我找到的是 mysql-bin.000065 位置开始为1356. 2 复制最近的几个日志文件,从mysql-bin.000065 ...
- mysql导出导入数据库表
1.下载数据库 mysqldump db_name -h 192.168.5.162 -uroot -p > /var/www/db_name.sql(这个可以自定义) 2,下载数据库中的某个 ...
- HDU-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- Oracle to_char()和to_date()函数的用法
to_char()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法 1.to_char()函数分析 1)SQL中不区分大小写,MM和mm被认为是相同的格式代码 先 ...
- elasticsearch term match multi_match区别
转自:http://www.cnblogs.com/yjf512/p/4897294.html match 最简单的一个match例子: 查询和"我的宝马多少马力"这个查询语句匹配 ...
- 我所理解的event loop
灵魂三问 JS为什么是单线程的 我们都知道,JS是单线程的语言,那为什么呢?我的理解是JS设计之初就是为了在浏览器端完成DOM操作和一些简单交互的,既然涉及到DOM操作如果是多线程就会带来复杂的同步问 ...
- hibernate一级缓存和二级缓存的区别
http://blog.csdn.net/defonds/article/details/2308972 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了 ...
- POJ 3259 Bellman_Ford算法
额.关键是读题.反正我是看了解题报告才知道意思的.给你n个点.m条路.双向的.耗费时间.w个虫洞.单向的.时间为负值.问你是否可以从某一点返回看到之前的自己.即为判断是不是有负环.用Bellman_F ...
- QRCodeHelper 二维码生成
QRCodeHelper 二维码生成 using System; using System.Drawing; using ThoughtWorks.QRCode.Codec; using System ...
- python3 scrapy 爬取腾讯招聘
安装scrapy不再赘述, 在控制台中输入scrapy startproject tencent 创建爬虫项目名字为 tencent 接着cd tencent 用pycharm打开tencent项目 ...