我正在考虑从DBT中的一个模型发布数据库中的两个模型。一个模型将有过滤器,另一个将没有过滤器。你有没有用一些精灵创造过这样的模型?如果你能和我分享一些例子或资源,那将是非常有帮助的。我不会创建两个模型,因为它们是相同的模型,只是应用了过滤器作为差异。因此,我们的想法是保留一个sql文件,并将两个不同名称的模型发布到数据库中。
我期待着听到你的一些建议。
非常感谢!
简单的答案是,你不能用一个模型来实现这一点,但有很多好的替代方案。有关为什么不能从单个dbt模型生成多个资产的讨论,请参阅此问题。
在这种情况下,由于您只是应用了一个过滤器,我只需要创建两个模型,其中一个从另一个中进行选择。这是dbt的DAG的基本用例。
unfiltered.sql
select
-- your logic goes here
...
filtered.sql
select *
from {{ ref('unfiltered') }}
where
-- your filter goes here
...
如果这不起作用,并且模型共享很多逻辑,但不是全部,我会将公共位封装在宏中,然后在unfiltered.sql
和filtered.sql
中调用宏(就像我链接的另一个答案中一样(。
非常感谢您提出这个想法
实际上,我还有另一个解决方案,很乐意与您分享。
-
创建不带过滤器的表
-
后挂钩克隆创建的表
-
从应用筛选器的克隆表中删除。
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" ]
) }}
通过克隆表,我们可以保留列和表级别的描述。