dbt compile 命令及应用

news/2024/12/23 6:08:51/

编写dbt模型和存储过程有较大差异,比如不建议update和insert,大多数代码是select语句。同时需要引用jinja函数、复杂逻辑以及宏,这些差异经常让开发者不确定生成的模型是否满足需求。本文介绍dbt compile命令可以在开发过程中随时查看编译后的SQL语句,帮助开发者及时发现模型问题。

应用场景

dbt模型概念让数据团队可以轻松实现版本控制和协作,但当一些SQL语句不完全符合dbt模型框架规范时,我们可以在analysis目录中编写模型代码。任何在目录的SQL文件,dbt仅编译但不执行。这样模型代码中{{ ref(...) }}会编译为对应数据仓库中的表或视图等对象。

举例,假设下面模型代码:

-- analyses/running_total_by_account.sqlwith journal_entries as (select *from {{ ref('quickbooks_adjusted_journal_entries') }}), accounts as (select *from {{ ref('quickbooks_accounts_transformed') }})selecttxn_date,account_id,adjusted_amount,description,account_name,sum(adjusted_amount) over (partition by account_id order by id rows unbounded preceding)
from journal_entries
order by account_id, id

要编译上面文件,可以执行命令;

dbt compile

然后我们可以在目录下看到编译后的文件: target/compiled/{project name}/analyses/running_total_by_account.sql. 可以在可视化工具中粘贴并执行,注意改命令不会在目标数据库中创建物化关系:running_total_by_account ,因为这些是分析不是模型。下面详细介绍dbt compile 命令。

dbt compile 命令详解

dbt compile 命令从下面目录中源模型文件生成可执行SQL文件:model, test, analysis ,生成的SQL文件在项目内 target/目录下。

dbt compile 应用场景:

  1. 检查编译输出文件,验证复杂jinja逻辑及宏
  2. 手动运行编译后的SQL,在调试或测试模型时,执行底层SELECT语句可以发现bug
  3. 编译analysis 目录下文件,但并不执行模型文件

注意事项:

  • dbt compile 命令不是 dbt run 或其他命令的先决条件,这些命令自己处理编译
  • dbt compile 命令需要数据平台连接,为了收集必要的信息(查询相关的数据库元数据),用于生成目标仓库的SQL代码
  • 如果你仅希望dbt读并验证项目代码,但不连接到数据仓库,使用 dbt parse 命令代替 ;dbt parse 解析验证dbt项目内容,如果项目包括Jinja或yaml语法错误,命令会失败

交互式编译

从dbt1.5开始,dbt compile 命令可以在命令行交互式执行,可以展示节点或任意dbt-sql查询编译后的代码:

  • – select 指定节点名称
  • – inline 指定任意dbt-sql查询

上面命令会在命令行打印编译后的SQL,同时在target/目录生成文件。举例:

dbt compile --select "stg_orders"                           
dbt compile --inline "select * from {{ ref('raw_orders') }}"

输出结果如下:

dbt compile --select "stg_orders"                           21:17:09  Running with dbt=1.7.5
21:17:09  Registered adapter: postgres=1.7.5
21:17:09  Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 401 macros, 0 groups, 0 semantic models
21:17:09  
21:17:09 Concurrency: 24 threads (target='dev')
21:17:09  
21:17:09  Compiled node 'stg_orders' is:
with source as (select * from "jaffle_shop"."main"."raw_orders"
),renamed as (selectid as order_id,user_id as customer_id,order_date,statusfrom source
)select * from renamed
dbt compile --inline "select * from {{ ref('raw_orders') }}"18:15:49  Running with dbt=1.7.5
18:15:50  Registered adapter: postgres=1.7.5
18:15:50  Found 5 models, 3 seeds, 20 tests, 0 sources, 0 exposures, 0 metrics, 401 macros, 0 groups, 0 semantic models
18:15:50  
18:15:50  Concurrency: 5 threads (target='postgres')
18:15:50  
18:15:50  Compiled inline node is:
select * from "jaffle_shop"."main"."raw_orders"

高级用法

dbt compile命令访问数据平台以获取与缓存相关的元数据,并实现内省查询。

可以使用--no-populate-cache标志来禁用初始缓存填充。如果需要元数据,则dbt在缓存中查询不到(缓冲丢失),需要dbt运行元数据查询。

也可以使用--no- introspection标志来禁用内省查询。如果模型的定义需要运行内省查询,但启用了此标志,则dbt将引发错误。

总结

本文介绍了dbt compile命令,包括应用场景、详细说明及注意事项。了解这些信息,有助于在项目中高效使用该命令。


http://www.ppmy.cn/news/1528744.html

相关文章

【毕业设计】基于 PHP 开发的社区交流系统

基于 PHP 开发的社区交流系统可以是一个论坛、博客平台或是问答网站等形式的在线平台,用于用户之间的互动交流。以下是一个简单的 PHP 社区交流系统的示例,包括用户注册、登录、发布帖子、回复帖子等功能。 技术栈 前端:HTML, CSS, JavaScr…

『功能项目』QFrameWorkBug修改器界面【65】

我们打开上一篇64QFrameWork道具栏物品生成的项目, 本章要做的事情是做一个道具bug调试面板,可以增加主角属性,可以增加道具的功能 首先创建一个空物体(钉子) 按住Alt键将空物体钉到左侧 重命名为Left 创建Button、Im…

基于Python实现一个浪漫烟花秀

为了实现一个类似烟花秀的效果,我们可以通过复杂的粒子系统来模拟烟花的升起、绽放和下落效果。以下是一个示例,旨在创建更为动态和逼真的烟花秀效果。 示例代码 这个代码示例将使用 matplotlib 和 numpy,并实现更丰富的视觉效果&#xff1…

Qt 常用数据类型

目录 Qt 常用数据类型1. 基础类型1. 1 基础数据类型详细说明 1.2 字符串和文本处理详细说明1.3 日期和时间详细说明 1.4 数学和几何详细说明 1.5 颜色和图形详细说明 1.6 数据结构详细说明 1.7 文件 IO 操作和 JSON 解析详细说明 1.8 本地化和国际化详细说明 1.9 网络编程和 UR…

小程序与APP的区别

目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…

【监控】【Nginx】使用 Prometheus + Grafana 监控 Nginx

目录 一、什么是 Prometheus 和 Grafana?二 、准备工作步骤 1:安装 Prometheus1. 下载并解压 Prometheus2. 编辑 Prometheus 配置(prometheus.yml)3. 启动 Prometheus 步骤 2:安装 Grafana1. 安装 Grafana2. 启动 Graf…

01-Mac OS系统如何下载安装Python解释器

目录 Mac安装Python的教程 mac下载并安装python解释器 如何下载和安装最新的python解释器 访问python.org(受国内网速的影响,访问速度会比较慢,不过也可以去我博客的资源下载) 打开历史发布版本页面 进入下载页 鼠标拖到页面…

Spring Boot文件上传/下载问题

在现代的 Web 应用程序中,文件上传和下载是非常常见的功能。Spring Boot 提供了非常简便和强大的解决方案来处理文件上传和下载。虽然基本功能很容易实现,但在实际项目中,文件大小限制、并发上传、文件类型验证、安全性等问题也常常需要重点考…