数据库中的多个模型来自单个DBT模型



我正在考虑从DBT中的一个模型发布数据库中的两个模型。一个模型将有过滤器,另一个将没有过滤器。你有没有用一些精灵创造过这样的模型?如果你能和我分享一些例子或资源,那将是非常有帮助的。我不会创建两个模型,因为它们是相同的模型,只是应用了过滤器作为差异。因此,我们的想法是保留一个sql文件,并将两个不同名称的模型发布到数据库中。

我期待着听到你的一些建议。

非常感谢!

简单的答案是,你不能用一个模型来实现这一点,但有很多好的替代方案。有关为什么不能从单个dbt模型生成多个资产的讨论,请参阅此问题。

在这种情况下,由于您只是应用了一个过滤器,我只需要创建两个模型,其中一个从另一个中进行选择。这是dbt的DAG的基本用例。

unfiltered.sql

select
-- your logic goes here
...

filtered.sql

select *
from {{ ref('unfiltered') }}
where
-- your filter goes here
...

如果这不起作用,并且模型共享很多逻辑,但不是全部,我会将公共位封装在宏中,然后在unfiltered.sqlfiltered.sql中调用宏(就像我链接的另一个答案中一样(。

非常感谢您提出这个想法
实际上,我还有另一个解决方案,很乐意与您分享。

  1. 创建不带过滤器的表

  2. 后挂钩克隆创建的表

  3. 从应用筛选器的克隆表中删除。

post_hook对实现这一目标有很大帮助
所以基本上post_hook是这样的:

{{ config(
materialized='table',
post_hook= [ "create or replace table table_filtered clone {{this}}",
"delete from table_filtered where 1=1 and filter=true" ]
) }}

通过克隆表,我们可以保留列和表级别的描述。

最新更新