我刚接触DBT,正面临着一个设计挑战。问题是我有20多个数据集成。每个集成都将数据输入一个Postgres DB。Postgres DB有几个表,例如integration_1_assets
、integration_2_assets
。这些表都用于资产,但具有不同的数据集(不同的列名等)。
现在,我想创建一个DBT项目,为每个集成选择数据,然后将这些数据转换为一个最终的dim_assets
表。在最终插入到dim_assets之前,它们可能是一个或多个数据转换。业务要求我们以不同的方式为每个集成运行转换,即integration_1应具有独立于其他集成的转换管道。
我应该为每个集成管道创建一个DBT项目,还是可以使用一个?
1条答案
按热度按时间gab6jxml1#
如果您有一个包含许多表的postgres数据库(每个集成一个表),那么我认为您应该有一个DBT项目。
这些文档描述了如何在profiles.yml中设置postgres连接
您可能需要如下配置一些信号源(我们将其命名为
sources.yml
):在best practices for project structure之后,我建议您创建一组“暂存”模型,直接从源模型读取并执行基本的清理/转换:
...然后通过一系列中间步骤,将多个暂存模型组合成单个
dim_assets
模型。项目布局将如下所示
这里的中间/最终模型(或者你喜欢怎么称呼它们)将引用早期的模型,使用
{{ ref('stg_assets_1') }}
等等。其他YAML文件是模型文件,允许您记录(和测试)每个子目录中定义的模型。
诸如物化策略之类的东西可以在顶层
dbt_project.yml
中定义(例如,中间模型可以是短暂的或视图,而最终的dim_assets
模型可以物化为表)。