Page 1 of 1

dbt-utils 包简介

Posted: Tue Dec 03, 2024 4:21 am
by urrifat77
在使用 dbt-utils 之前,必须熟悉 SQL 并了解 dbt(数据构建工具)基础知识。您应该已经初始化并配置了 dbt 项目。

如果您需要复习,您可以查看我们的dbt 课程简介和dbt 教程。

此外,dbt 核心和 dbt-utils 包之间需要有明确的版本一致性。建议检查 dbt 版本之间的兼容性,以防止冲突或弃用功能。

逐步安装
要开始将 dbt-utils 集成到您的数据堆栈中,首先 rcs 数据库 确保您的开发环境已正确设置。

步骤 1:安装 dbt
首先,确保你的环境中安装了 dbt。你可以通过 pip 安装 dbt:


pip install dbt
供电
第 2 步:将 dbt-utils 添加到你的 dbt 项目中
要安装 dbt-utils,请将以下内容添加到 dbt 项目根目录中的 packages.yml 文件中。



如果不存在,请在 dbt 项目根目录中创建此文件,并添加以下内容:


packages:
- package: dbt-labs/dbt_utils
version: "1.1.1" # Use the latest version compatible with your dbt version
供电
在此 yaml 文件中,您还将指定必要的软件包版本。确保使用与您安装的 dbt 版本兼容的最新版本。

步骤 3:安装软件包
修改后,安装只需一个简单的命令即可。

成功执行此命令将获取并安装 dbt-utils,为您增强功能做好准备。

在 dbt 项目目录中的终端中运行以下命令:


dbt deps
供电
此命令将安装 packages.yml 中列出的所有包。

dbt-utils 主要实用程序及其应用
dbt-utils 包提供了一套常见的辅助函数,可简化 dbt 项目内的 SQL 转换。

这些功能可帮助开发人员避免冗余并专注于其独特的业务逻辑。

以下是 dbt-utils 中的一些函数:

1. SQL 生成器
dbt-utils 中的 SQL 生成器对于创建模块化 SQL 代码很有用。

例如,deduplicate宏非常适合消除重复行,同时保持数据的顺序。可以从模型、表格甚至通用表表达式 (CTE) 中删除重复项。

2. 通用测试
通用测试用于验证表或视图中的数据。它们可以轻松定制以满足特定要求,并提供有关正在处理的数据质量的宝贵见解。

例如,expression_is_true宏检查某个表达式是否为真。这可以灵活地用于验证多种条件,例如:

柱长
特定基本代数运算的输出
3. Jinja 助手
Jinja 助手可用于创建动态 SQL 查询,这些查询可根据用户输入或变量数据轻松自定义。它们允许在 SQL 语句中使用条件逻辑和循环。

Jinja 模板用于定义和指定这些宏。

一个例子是pretty_time宏,它返回当前时间戳的字符串。

4. Web 宏
Web 宏与 Jinja 助手类似,但它们是专为基于 Web 的项目设计的。它们允许动态 HTML 生成和操作,从而更轻松地创建交互式和响应式网页。

一个有用的宏是get_url_path宏,它获取 URL 的页面路径。语法如下:


{{ dbt_utils.get_url_path(field='page_url') }}
供电
5. 自省宏
自省宏是可以访问和操作当前范围内数据的宏。这允许动态和高效的数据处理,从而减少对其他函数或代码的需求。

一个例子是get_column_values宏,它将查询结果作为对象返回。

Image

dbt utils 的实际用例
用例 1:简化复杂查询
示例场景:一家公司拥有包含客户信息、交易数据和产品数据的大型数据集。他们需要创建一份报告,显示上一季度每个产品类别的总销售额。

他们不需要编写复杂的 SQL 查询来连接多个表并计算每个类别的销售额,而是可以使用 dbt utils 轻松提取相关数据并在宏或模型中对其进行操作。

例如,他们可以用来get_filtered_columns_in_relation过滤掉与产品数据相关的必要列,然后使用 sum 宏来计算每个类别的总销售额。

这简化了流程并提高了效率,节省了时间并减少了错误。

代码实现:

要在模拟数据库中实现此解决方案,可以按照以下步骤操作:

使用get_filtered_columns_in_relation宏从产品数据中仅过滤必要的列。此宏将帮助您高效地选择相关列。


-- models/product_data_filtered.sql
with product_data as (