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压缩包 将下载好的压缩包,进行解压缩,并且将…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
