dbt-codegen: dbt自动生成模板代码
dbt项目采用工程化思维,数据模型分层实现,支持描述模型文档和测试,非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件,这个过程非常容易出错且无聊。主要表现:
- 手工为dbt模型编写yaml文件,这过程可能会导致错误和拼写失误。
- 手工编写yaml文件非常耗时,特别是在包括很多模型的大型项目中。
- 当数据模型发生变化时,更新yaml文件可能是一件令人头痛的事情。
- 确保所有yaml文件看起来一致,并遵循相同的最佳实践具有挑战性。
dbt-codegen简介
dbt-lab提供了 dbt-codegen工具包,实现一组宏,用于dbt代码并在命令行中输出结果。Codegen旨在为dbt模型自动生成YAML文件,解决与手动创建文件的痛点挑战。Codegen是如何解决这些问题的:
-
Codegen自动化YAML文件创建的整个过程。它基于dbt模型生成YAML配置,减少了手动干预的需要。这大大节省了时间,并最大限度地减少了错误的风险。
-
通过自动生成YAML文件,Codegen确保了所有dbt模型的一致性和标准化。它遵循预定义的规则和模板,消除了配置差异的可能性。
-
Codegen具有高度可扩展性,允许你有效地管理许多dbt模型。随着数据转换需求的增长,Codegen适应规模,为处理众多模型和配置提供无缝解决方案。
实现过程如下:
Codegen通过分析dbt模型并提取相关信息以生成YAML文件,过程包括:
- Codegen分析dbt模型,提取列名、数据类型和关系等细节。然后基于分析结果生成YAML配置,包括模型、列和关系。
- Codegen应用预定义模板,确保标准化配置和一致性,最终输出是一组可以在dbt项目中使用的YAML文件配置信息。
完整功能列表:
- generate_source (source)
- generate_base_model (source)
- create_base_models (source)
- base_model_creation (source)
- generate_model_yaml (source)
- generate_model_import_ctes (source)
dbt-codegen实战
我们看到该包可用于为源和模型列表生成YAML,此外还可以用于为源的基本模型生成SQL。下面介绍几个常用的代码生成功能。读者可以在上文介绍的入门项目中测试。
安装
packages: - package: dbt-labs/dbt_utils version: 1.3.0 - package: dbt-labs/codegen version: 0.12.1
运行dbt deps安装包。安装成功后,包文件将被安装到dbt_packages目录下。
示例1: 生成schema.yml
在命令行运行,直接输出到控制台:
dbt run-operation generate_source --args 'schema_name: shop'# 多个参数
dbt run-operation generate_source --args '{"schema_name": "shop", "database_name": "raw", "table_names":["table_1", "table_2"]}'
也可以直接输出到文件:
dbt --quiet run-operation generate_source --args '{"table_names": ["orders"]}' > models/staging/jaffle_shop/_sources.yml
还可以编码方式执行,拷贝宏代码至DBT项目中, 因为是一次性任务,可以放置analysis 目录下, 然后编译代码:
{{ codegen.generate_source('raw_jaffle_shop') }}
# 包括多个参数
{{ codegen.generate_source(schema_name= 'jaffle_shop', database_name= 'raw') }}
生成结果大致如下:
version: 2sources:- name: shopdatabase: rawschema: shoptables:- name: customersdescription: ""- name: ordersdescription: ""- name: paymentsdescription: ""
示例2: 生成模型yaml文件
model_names(required): The model(s) you wish to generate YAML for.upstream_descriptions(optional, default=False): Whether you want to include descriptions for identical column names from upstream models and sources.include_data_types(optional, default=True): Whether you want to add data types to your model column definitions.
dbt run-operation generate_model_yaml --args '{"model_names": ["customers"]}'
生成结果:
version: 2models:- name: customersdescription: ""columns:- name: customer_iddata_type: integerdescription: ""- name: customer_namedata_type: textdescription: ""
当然也可以在analyse模型中编码方式生成:
{{ codegen.generate_model_yaml(model_names=['customers']
) }}
还可以使用辅助函数代码。Get_models并指定一个目录和/或前缀,以获得所有匹配模型的列表,这些模型将被传递到model_names列表中。
{% set models_to_generate = codegen.get_models(directory='marts', prefix='fct_') %}
{{ codegen.generate_model_yaml(model_names = models_to_generate
) }}
助手方法可以在源码中找到,请参考下面截图:

总结
本文介绍dbt-codegen工具,它可以帮助我们快速生成dbt模型描述文件、生成源等代码。我们介绍多种生成方式,包括命令行和分析模型代码等,有想法的读者还可以考虑编写vscode插件实现。更多示例及详细文档,可以参照官方文档。
相关文章:
dbt-codegen: dbt自动生成模板代码
dbt项目采用工程化思维,数据模型分层实现,支持描述模型文档和测试,非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件,这个过程非常容易出错且无聊。主要表现: 手工为dbt模型编写yaml文件,这过…...
springboot057洗衣店订单管理系统(论文+源码)_kaic
基于springboot的洗衣店订单管理系统 摘要 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应洗衣店业务新的交流形式的网站。本文介绍了洗衣店订单管理系统的开发全过程。通过分析企业对于洗衣店订单管理系统的需求…...
南大通用(GBase 8s)数据库在 Spring Boot 中使用 Flyway
db-migration:Flyway、Liquibase 扩展支持达梦(DM)数据库、南大通用(GBase 8s)数据库,并支持 Flowable 工作流。 已支持 达梦数据库(DM 8)。默认支持 flowable 工作流。南大通用数…...
CMakeLists.txt 编写规则
目录 1. 注释 1.1 注释行 1.2 注释块 2. CMakeLists.txt的编写 2.1 同意目录下的源文件 2.2 SET指令 2.3 file和aux_source_directory 2.4 包含头文件 2.5 生成动态库和静态库 2.6 链接库文件 2.7 message指令 2.8 移除操作 2.9 find_library和find_package 3. 常…...
Javascript算法——二分查找
1.数组 1.1二分查找 1.搜索索引 开闭matters!!![left,right]与[left,right) /*** param {number[]} nums* param {number} target* return {number}*/ var search function(nums, target) {let left0;let rightnums.length-1;//[left,rig…...
node-sass/vendor/linux-x64-72 : Error: EACCES: permission denied, mkdir
npm i --unsafe-perm node-sassgithub解决问题...
uniapp-uniapp + vue3 + pinia 搭建uniapp模板
使用技术 ⚡️uni-app, Vue3, Vite, pnpm 📦 组件自动化引入 🍍 使用 Pinia 的状态管理 🎨 tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 😃 各种图标集为你所用 🔥 使用 新的 <script setup> …...
深度学习的一些数学基础
数学基础 万丈高楼平地起 怎么说呢,学的数二对于这些东西还是太陌生了,而且当时学的只会做题,不知道怎么使用/(ㄒoㄒ)/~~ 所以记下来一些不太清楚的前置知识点,主要来自《艾伯特深度学习》,书中内容很多,…...
自由学习记录(13)
服务端常见的“资源” 在服务端,常见的“资源”指的是服务端提供给客户端访问、使用、处理或操作的各种数据和功能。根据不同类型的服务和应用场景,服务端的资源种类可以非常广泛。以下是一些常见的服务端资源类型: 1. 文件和静态资源 网页…...
低代码可视化-uniapp海报可视化设计-代码生成
在uni-app中,海报生成器通常是通过集成特定的插件或组件来实现的,这些插件或组件提供了生成海报所需的功能和灵活性。我们采用了lime-painter海报组件。lime-painter是一款canvas海报组件,可以更轻松地生成海报。它支持通过JSON及Template的方…...
一次使用LD_DEBUG定位问题的经历
在实际工作中,当遇到段错误,我们会很容易的想到这是非法访问内存导致的,比如访问了已经释放的内存,访问数据越界,尝试写没有写权限的内存等。使用gdb进行调试,查看出异常的调用栈,往往可以定位到…...
数据库安全:如何进行数据库安全审计?
数据库安全:如何进行数据库安全审计? 数据库安全审计是保障数据库安全的重要手段之一,可以帮助企业及时发现潜在的安全风险并采取相应的措施。以下是进行数据库安全审计的步骤和方法: 一、确定审计目标 在进行数据库安全审计之前,首先需要确定审计的目标。这可能包括以…...
【Python】基础语法错误和异常
在Python中,语法错误和异常是两个常见的问题。下面对它们进行简要介绍。 1.语法错误 (Syntax Error) 语法错误是指代码的语法不符合Python的语言规则。当Python解释器读取程序代码时,如果发现语法不正确,就会抛出语法错误。这种错误通常在代…...
获取每个页面的元素,并写入json
获取每个页面的元素,并写入json 想法:如何去记住每个页面的元素,如何实现不同页面的导航,如何从主页面遍历每一个页面的每一个元素 1.创建数据结构存储 2.树状图正好是我们想要的结构体:创建树状图结构体 3.记录每个页…...
【ShuQiHere】深入解析数字电路中的锁存器与触发器
深入解析数字电路中的锁存器与触发器 🤖🔌 在数字电路设计中,**锁存器(Latch)和触发器(Flip-Flop)**是实现时序逻辑的基本元件。它们能够存储状态,是构建复杂数字系统的关键。本文将…...
【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】
【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】 1、前言2、先行了解(1)学习基础知识-了解jetson orin nx 设备(2)学习python&AI…...
数据轻松上云——Mbox边缘计算网关
随着工业4.0时代的到来,工厂数字化转型已成为提升生产效率、优化资源配置、增强企业竞争力的关键。我们凭借其先进的边缘计算网关与云平台技术,为工厂提供了高效、稳定的数据采集与上云解决方案。本文将为您介绍Mbox边缘计算网关如何配合明达云平台&…...
ifftshift函数
ifftshift 原理 将频域数据移回时域的函数。它通常与 fftshift 配合使用,后者用于将时域数据移动到频域中心。 而ifftshift所作的事正好相反,将频谱恢复到能量集中在两端(或四个角)上,接着就可以做逆傅里叶变换了 具…...
vue3 + ts + element-plus 二次封装 el-dialog
实现效果: 组件代码:注意 style 不能为 scoped <template><el-dialog class"my-dialog" v-model"isVisible" :show-close"false" :close-on-click-modal"false" :modal"false"modal-class&…...
MySQL9.0安装教程zip手动安装(Windows)
本章教程,主要介绍如何在Windows上安装MySQL9.0,通过zip方式进行手动安装。 一、下载MySQL压缩包 下载地址:https://downloads.mysql.com/archives/community/ 二、解压MySQL压缩包 将下载好的压缩包,进行解压缩,并且将…...
当翻译成本趋近于零:AI原生时代,软件工程如何重塑?
当翻译成本趋近于零,软件工程的瓶颈就从“如何写对代码”变成了“如何定义对的事”。 一、两条路线之争:代码约束还是提示约束? 当前AI智能体演进中,出现了一条清晰的分野:以Claude Code为代表的“代码硬约束”路线&am…...
新手必看|SRC平台漏洞挖掘全攻略(2026干货版):平台详解+规则必记+实操步骤
新手必看|SRC平台漏洞挖掘全攻略(2026 干货版):平台详解规则必记实操步骤 对于网络安全新手、计算机相关专业学生,以及想转型安全领域的从业者而言,SRC平台是合法练手、积累实战经验、衔接职场的核心载体。…...
纷析云开源财务软件:企业级财务管理完整解决方案指南
纷析云开源财务软件:企业级财务管理完整解决方案指南 【免费下载链接】纷析云财务软件 纷析云SAAS云财务软件开源版,包含账套、凭证字、科目、期初、币别、账簿、报表、凭证、结账等功能。 纷析云开源财务系统,餐饮行业财务软件、微服务架构财…...
.NET 11 预览版1:CoreCLR 在 WebAssembly 上的全面集成与性能突破
摘要随着.NET 11 Preview 1 的正式发布,.NET 生态系统迎来了一次具有分水岭意义的基础架构演进。本次发布的核心亮点在于.NET 的 CoreCLR 运行时现在已经能够原生运行在 WebAssembly (WASM) 平台上。这是一个重大的技术突破,标志着微软在跨平台战略上的全…...
智能媒体捕获:猫抓cat-catch的资源拦截与解析技术方案
智能媒体捕获:猫抓cat-catch的资源拦截与解析技术方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch作为一款开源浏览器扩展,通过深度网络请求分析与流媒体协议…...
从逐点更新到批量优化:深入解析分块LMS(BLMS)自适应滤波算法
1. 从逐点到分块:为什么需要BLMS算法? 第一次接触自适应滤波时,我和大多数人一样从经典的LMS算法开始。当时在做一个语音去噪的小项目,用LMS实现实时滤波后发现两个头疼的问题:电脑风扇狂转不止(计算负荷大…...
SpaceClaim流体域实战:从零到一构建仿真计算空间
1. 流体域基础概念与工程价值 第一次接触流体域这个概念时,我正对着电脑屏幕发愁——明明在物理世界里空气无处不在,为什么在仿真软件里非得画个"框"才能计算?这个看似简单的方盒子,后来成了我CFD生涯中最重要的"…...
Cataclysm: Dark Days Ahead - 在末日废土中生存的终极指南
Cataclysm: Dark Days Ahead - 在末日废土中生存的终极指南 【免费下载链接】Cataclysm-DDA Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world. 项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA 欢迎来到Cat…...
赋能工业智能化转型实战案例解析
随着“工业4.0”和智能制造的深入推进,工业生产现场正经历着从“自动化”向“智能化”的深刻转型。在这一进程中,传统的机器视觉(MV)虽在速度与精度上表现优异,但面对柔性制造、非结构化环境以及复杂多变的任务需求时&…...
10倍加速PDF转HTML:pdf2htmlEX终极优化指南
10倍加速PDF转HTML:pdf2htmlEX终极优化指南 【免费下载链接】pdf2htmlEX Convert PDF to HTML without losing text or format. 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2htmlEX pdf2htmlEX是一款能够将PDF文件转换为HTML格式的强大工具,…...
