dbt seed 命令及应用示例

DBT-core是一个命令行工具,它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个强大特性是seed命令,它可以将CSV文件(称为"seed")加载到数据仓库中。本教程将带你完成使用dbt seed命令的过程。

在dbt中,seed是可以加载到数据仓库中的CSV文件。它们对于处理不经常更改的静态数据特别有用。例如,您可能有一个CSV文件,其中包含国家代码列表及其对应的国家名称。这些数据可以作为seed加载到仓库中,并在dbt模型中引用。

dbt seed 应用场景

代码映射

正如我们在前节描述的,我们可以使用seed将产品代码映射到产品名称。这可以扩展到任何需要将代码映射到更具描述性名称的场景。例如,你可以利用seed将错误代码映射到错误描述,或将缩写映射到它们的完整形式。

排除部分分析数据

假设有一些测试电子邮件地址或用户id列表,您希望将其从分析中排除。首先提供这些电子邮件地址或用户id创建一个seed,然后使用dbt seed命令将此数据加载到仓库中。在dbt模型中,您可以从分析中排除这些测试电子邮件地址或用户id。

载入少量数据集

如果您有不经常更改的小型参考数据集,那么通过seed加载到仓库中,可能比source表方式加载更有效。举例,你可能要在dbt模型中使用的关于汇率小数据集,直接保存在CSV文件中,利用seed命令加载效率更高。

数据验证

您可以使用seed来验证仓库中的数据。例如,您可能有seed数据,其中包含某个计算的预期结果。然后,您可以创建一个dbt测试,将仓库中的实际结果与种子中的预期结果进行比较。

机器学习模型测试

如果你是数据科学家或机器学习工程师,可以使用seed将测试数据加载到仓库中。然后,您可以使用这些测试数据来评估机器学习模型的性能。

dbt seed 示例实战

让我们创建一个用作种子的CSV文件。在本教程中,我们将使用一个简单的CSV文件,其中包含产品代码及其对应的产品名称。将以下数据保存在名为"product_codes.csv"的文件中:

复制代码
product_code,product_name
PRD01,Apple iPhone 13
PRD02,Samsung Galaxy S21
PRD03,Google Pixel 6

将该文件放在dbt项目的seed文件夹中。

载入数据仓库

通过下面命令,加载seed数据到数据仓库:

复制代码
$ dbt seed

该命令将把seeds目录中的所有CSV文件加载到数据仓库中。如果要加载特定的seed文件,可以使用--select标志,后跟seed文件名称(不带.csv扩展名)。例如:

复制代码
$ dbt seed --select product_codes

引用seed数据

一旦将seed数据加载到数据仓库中,就可以使用ref函数在dbt模型中引用它。例如,如果你有一个需要与product_codesseed连接的模型,你可以这样做:

sql 复制代码
select    
  orders.*,    
  product_codes.product_name
from {{ ref('orders') }} as orders
left join {{ ref('product_codes') }} as product_codes
     on orders.product_code = product_codes.product_code

配置测试

您可以在**dbt_project.yml**文件中配置seed。例如,您可以指定应该加载seed数据的目标schema。您还可以通过在YAML中声明属性增加文档描述和测试seed。下面示例是给seed增加描述信息,可以添加测试,在文档职工生成更多描述信息。详细配置可参考官方文档。

seeds/<filename>.yml

yaml 复制代码
version: 2

seeds:
  - name: <string>
    description: <markdown_string>
    docs:
      show: true | false
      node_color: <color_id> # Use name (such as node_color: purple) or hex code with quotes (such as node_color: "#cd7f32")
    config:
      <seed_config>: <config_value>
    tests:
      - <test>
      - ... # declare additional tests
    columns:
      - name: <column name>
        description: <markdown_string>
        meta: {<dictionary>}
        quote: true | false
        tags: [<string>]
        tests:
          - <test>
          - ... # declare additional tests

      - name: ... # declare properties of additional columns

  - name: ... # declare properties of additional seeds

总结

dbt seed命令是将静态数据加载到数据仓库中的强大工具。通过使用seed可以在dbt中保持转换逻辑,确保数据转换是一致的、版本控制的和代码可审查的。期待您的真诚反馈,更多内容请阅读数据分析工程专栏。

相关推荐
梦想画家6 天前
SQLMesh 用户定义变量详解:从全局到局部的全方位配置指南
数据工程·sqlmesh
梦想画家8 天前
SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
数据工程·sqlmesh
梦想画家14 天前
SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用
数据工程·sqlmesh
RestCloud16 天前
ETL数据集成产品选型需要关注哪些方面?
数据仓库·api·etl·数据处理·数据转换·数据集成工具·集成平台
梦想画家16 天前
MinIO:从入门到精通,解锁云原生存储的奥秘
minio·数据工程
梦想画家16 天前
从单体到分布式:深入解析Data Mesh架构及其应用场景与价值
数据治理·数据工程·data mesh
梦想画家18 天前
Scrapy进阶实践指南:从脚本运行到分布式爬取
分布式·scrapy·数据工程
梦想画家19 天前
InfluxDB 2.7 连续查询实战指南:Task 替代方案详解
influxdb·数据工程
梦想画家20 天前
SQLMesh 模型管理指南:从创建到验证的全流程解析
数据工程·sqlmesh
Light6023 天前
Spark在大数据ETL中的应用:数据清洗与转换实战
大数据·spark·etl·数据清洗·数据转换