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配置,也可以在对应目录下配置。
配置参考:
问题整理
- 是否可以用seed加载原始数据?
dbt对于大的csv文件加载性能不怎么样,还是需要考虑专门的工具加载到数据仓库中。种子比较适合码表、少量固定的信息之类的东西。
- 如果csv文件格式变了(新增、减少列),怎么处理?
可以执行:dbt seed --full-refresh
,这个操作会把历史表做掉,然后新建一个。(所以当csv变了,配置文件也要修改,或者就改csv文件)
- 只构建一个种子
命令: dbt seed --select xxxx
- 如何保留csv某列之前的0?
配置文件中对列进行类型声明(varchar),或者下游模型使用的时候加0.
- 如何执行种子下游模型?
dbt run -select country_codes+