实例化视图与使用dbt的表

问题描述

我只是加入dbt,并且已经阅读了教程文档,我想知道将转换具体化为视图还是表之间是否有区别?我正在使用SNowflake作为数据仓库。有一些文档here展示了表和实例化视图之间的差异,但是如果我使用dbt定期更新表,它们或多或少会变成一回事?

谢谢!

解决方法

据我所知,

dbt不支持实例化视图,但是正如Felipe所评论的那样,有一个open issue to discuss it。如果有可能在Snowflake上使用物化视图,那是对的,它们有点成为同一件事。即使您没有运行dbt,物化视图也会更新。正如Drew在票证中所提到的那样,在大多数情况下,有很多警告使使用带有dbt的表更为可取:“没有窗口函数,没有联合,有限的聚合,无法查询视图等”。>

也就是说,dbt确实支持视图和表。

即使在使用dbt时,视图和表之间仍然存在差异。一个表将始终需要由dbt刷新才能更新。视图将始终是其引用的基础表的最新信息。

例如,假设您有一个名为fct_orders的dbt模型,该模型引用了一个由Fivetran / Stitch加载的名为shopify.order的表。如果您的模型以视图的形式实现,它将始终返回Shopify表中的最新数据。如果将其具体化为表格,并且自上次运行dbt以来新数据已到达Shopify表中,则该模型将为“过时”。

也就是说,将其具体化为表的好处在于,由于不必每次都进行SQL“转换”,因此它将运行得更快。

我经常看到的建议是这样的:

  • 如果使用视图对您的最终用户不太慢,请使用视图。
  • 如果视图对于最终用户来说太慢了,请使用表格。
  • 如果使用dbt构建表太慢,请在dbt中使用增量模型。