来自官方的一些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 最 ...
随机推荐
- dubbo监控报错Error creating bean with name 'uriBrokerService'
在jdk1.8下面会出现此错误 解决方法: 1.更换服务器jdk版本.(会影响其他项目环境) 2.修改dubbo-admin tomcat默认jdk版本. 3.修改dubbo-admin项目依赖(de ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
- h1026 BFS(打印x与路径)
题意: Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- nyoj306 二分+DFS
走迷宫 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多非常爱玩,它常常偷偷跑出实验室,在某个游乐场玩之不疲.这天卡多又跑出来了,在SJ ...
- linux下常用的截图、录屏工具
录屏: 在linux下常用的录屏工具有5种,可以baidu或者google下喔,我选用的是recordMydesktop,使用非常方便,用时注意先把每秒桢数调高,否则效果必然很差. 在ubuntu下可 ...
- Java容器——Map接口
1.定义 Map用于保存存在映射关系<key, value>的数据.其中key值不能重复(使用equals()方法比较),value值可以重复. 2.常用实现类 HashMap:和Hash ...
- 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PHP:第四章——PHP数组查找,替换,过滤,判断相关函数
<pre> <?php //查找,替换,过滤,判断相关函数 header("Content-Type:text/html;charset=utf-8"); /*知 ...
- HDU 3697贪心
额...大意是你可以决定什么时候选课.然后呢.每五分钟只有一次机会选.每种课限制选课时间.问你能选到的课最多有多少. 感觉一点都不水.是自己太菜了吗? #include<stdio.h> ...
- Python正则表达式操作指南
摘要 本文是通过Python的 re 模块来使用正则表达式的一个入门教程,和库参考手册的对应章节相比,更为浅显易懂.循序渐进. 本文可以从 http://www.amk.ca/python/howto ...