dbt-seeds

dbt seeds

Add Seeds to your DAG

  • seeds其实是项目下seeds目录中文件,(例子里基本都是csv文件),通过dbt seed命令可以去调用数据(其实就是上传到数据库里)。
  • seeds可以在下游模型中被引用(ref函数)
  • 由于这些 CSV 文件位于您的 dbt 存储库中,因此它们受版本控制且代码可审查。
  • 种子最适合不经常更改的静态数据。

一些用例:

  • 国家代码到国家名称的映射列表
  • 要从分析中排除的测试电子邮件列表
  • 员工帐户 ID 列表

dbt 种子的不良用例:

  • 加载已导出为 CSV 的原始数据
  • 包含敏感信息的任何类型的生产数据。例如个人身份信息 (PII) 和密码。

使用案例

在seeds目录下创建csv文件。
csv样例文件内容:

country_code,country_name
US,United States
CA,Canada
GB,United Kingdom

创建配置文件:seed_schema.yml

version: 2
seeds:
  - name: country_code
    config:
      column_types:
        country_code: varchar(40)
        country_name: varchar(40)

执行命令: dbt seed,成功后,在数据库里其实可以看到这个表。(表名就是文件名)

使用:

select * from {{ ref('country_codes') }}

关于seed的配置

可以在dbt_project.yml配置,也可以在对应目录下配置。

配置参考:

问题整理

  1. 是否可以用seed加载原始数据?

dbt对于大的csv文件加载性能不怎么样,还是需要考虑专门的工具加载到数据仓库中。种子比较适合码表、少量固定的信息之类的东西。

  1. 如果csv文件格式变了(新增、减少列),怎么处理?

可以执行:dbt seed --full-refresh,这个操作会把历史表做掉,然后新建一个。(所以当csv变了,配置文件也要修改,或者就改csv文件)

  1. 只构建一个种子

命令: dbt seed --select xxxx

  1. 如何保留csv某列之前的0?

配置文件中对列进行类型声明(varchar),或者下游模型使用的时候加0.

  1. 如何执行种子下游模型?

dbt run -select country_codes+

posted @ 2023-06-11 18:58  人人从众  阅读(153)  评论(0编辑  收藏  举报