0

0

dbt 宏指南 - 目的、优点和用法

聖光之護

聖光之護

发布时间:2024-10-19 08:03:01

|

1238人浏览过

|

来源于dev.to

转载

dbt 宏指南 - 目的、优点和用法

  • 阿帕奇冰山 101
  • apache 冰山实践介绍
  • 免费 apache iceberg 速成课程
  • apache iceberg 的免费副本:权威指南

使用 dbt 时,您可以使用的最强大的功能之一是。宏允许您编写可在整个 dbt 项目中使用的可重用代码,帮助您优化开发、减少冗余并标准化常见模式。在这篇文章中,我们将探讨 dbt 宏的用途、它们如何帮助您简化数据转换工作流程以及如何有效地使用它们。

什么是 dbt 宏?

在较高的层面上,dbt 宏 是用 jinja(一种集成到 dbt 的模板语言)编写的可重用代码片段。宏的作用类似于函数,您可以在 dbt 项目中的各个位置(例如模型、测试,甚至其他宏)调用它们。它们允许您简化重复性任务并向 sql 转换添加逻辑。

您可以将宏视为dry(不要重复自己)您的 dbt 代码的一种方式,这在大型项目中特别有用,因为在许多模型中重复类似的 sql 模式。

dbt 宏如何帮助您

以下是在项目中使用 dbt 宏的一些主要好处:

1. 减少冗余

在许多数据转换工作流程中,您可能会发现自己在多个模型中编写相同的 sql 逻辑。例如,过滤掉无效记录或应用特定转换。通过宏,您可以将此逻辑抽象为可重用的函数,并在需要时调用它们,从而减少代码重复。

2. 标准化sql逻辑

宏有助于确保通用逻辑(例如数据验证或自定义联接)在整个项目中一致应用。这种标准化减少了错误的可能性,并确保您的转换在不同模型中遵循相同的规则。

3. 简化复杂逻辑

通过使用宏,您可以将复杂的逻辑分解为可管理、可重用的组件。这简化了您的 sql 模型,使其更易于阅读、维护和调试。

4. 动态生成sql

宏允许您编写基于变量、配置设置或输入来适应不同用例的 sql。这种动态生成 sql 可以帮助您处理各种边缘情况和环境,而无需手动更改代码。

5. 跨模型重用

定义宏后,它可以在多个模型中使用,确保对宏的任何更新都反映在整个项目中。这促进了更轻松的维护和更快的更新。

如何编写和使用 dbt 宏

定义宏

宏通常在 dbt 项目的 macros/ 目录下的 .sql 文件中定义。以下是计算列平均值的简单宏示例:

-- macros/calculate_average.sql

{% macro calculate_average(column_name) %}
    avg({{ column_name }})
{% endmacro %}

在此示例中,宏calculate_average接受列名作为参数,并返回应用于该列的avg() sql函数。

在模型中使用宏

定义宏后,您可以使用以下语法在任何模型中调用它:

-- models/my_model.sql

select
    {{ calculate_average('price') }} as avg_price,
    category
from
    {{ ref('products') }}
group by
    category

这里,我们在 select 语句中使用calculate_average 宏来计算 products 表中的平均价格,而不需要手动重复逻辑。

医院网站系统
医院网站系统

HTML医院网站系统基于PHP+MYSQL开发,在文章内容网站的基础上,预设了医院概况、新闻动态、环境设备、名医荟萃、专科介绍、就医指南、专家门诊值班表、网上挂号、医疗保健知识、在线咨询等医院网站常用的栏目和测试数据,采用适合医院网站的专用模版,增强了系统的针对性和易用性。系统具有文章、图文、下载、社区、表单、用户等基本系统模块和一系列网站辅助功能,用户也可根据自身特点任意创建和修改栏目,适合创建

下载

将宏与变量一起使用

宏还可以与变量组合以增加更多灵活性。例如,让我们定义一个基于变量动态构建 where 子句的宏:

-- macros/filter_by_status.sql

{% macro filter_by_status(status) %}
    where status = '{{ status }}'
{% endmacro %}

您现在可以使用此宏根据变量过滤数据,如下所示:

-- models/orders.sql

select *
from {{ ref('orders') }}
{{ filter_by_status(var('order_status', 'completed')) }}

在这种情况下,filter_by_status 动态添加一个 where 子句,通过 order_status 过滤结果,如果没有提供,则默认为已完成。

复杂宏:动态表连接
下面是一个更高级的宏示例,它根据传递给它的参数创建动态连接:

-- macros/join_tables.sql

{% macro join_tables(left_table, right_table, join_key) %}
    select
        left.*,
        right.*
    from
        {{ ref(left_table) }} as left
    inner join
        {{ ref(right_table) }} as right
    on
        left.{{ join_key }} = right.{{ join_key }}
{% endmacro %}

该宏采用两个表名和一个连接键,然后在表之间动态创建 inner join:

-- models/joined_data.sql

{{ join_tables('customers', 'orders', 'customer_id') }}

当您调用此宏时,它会生成完整的 sql,用于在 customer_id 键上连接客户和订单表。

使用 dbt 宏的最佳实践

  • 保持宏的焦点:每个宏都应该执行一个单一的、定义明确的任务。避免将太多逻辑塞进单个宏中;相反,将其分解为更小的、可重复使用的组件。

  • 使用清晰的命名约定:确保宏名称具有描述性,以便在模型中使用时其用途清晰。这使得代码更容易理解和维护。

  • 处理边缘情况:始终考虑宏中可能的边缘情况(例如空值或意外输入),以确保它们在不同场景下可靠地执行。

  • 在测试中利用宏:您还可以在 dbt 测试中使用宏来创建可重用的测试逻辑,确保项目验证步骤的一致性。

  • 记录您的宏:向您的宏添加注释和文档以解释其目的、参数和用法。当多个团队成员为同一个项目做出贡献时,这尤其有用。

结论

dbt 宏是一个强大的工具,可以帮助您在数据转换项目中编写更清晰、更易于维护且可重用的代码。通过抽象复杂逻辑、标准化重复模式以及动态生成 sql,宏显着降低了 dbt 工作流程的复杂性并提高了可靠性。

无论您是 dbt 新手还是经验丰富的用户,学习有效编写和使用宏都可以将您的数据工程能力提升到一个新的水平。从简单的可重用代码片段开始,随着时间的推移,融入更高级的逻辑,以充分释放宏在 dbt 项目中的潜力。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

681

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

416

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.2万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号