DBT - 为最终业务模型创建暂存视图的最佳实践
DBT - best practices to create staging views for the final business model
我正在从事一项业务 model/view,其原始 SQL 定义包含对源 table 的非常复杂的查询。
我的问题是 - 我需要在源 table 上创建多个暂存模型,因为同一源上有不同的特定 select 查询(无法在源上的单一分期模型)。处理这种情况的最佳做法应该是什么。
一种方法是直接在源代码上创建所有不同的分期模型并在我的最终业务模型中使用它们。
第二种方法是在源上创建一个包含源中所有字段的暂存模型(在我的特定情况下不需要转换),然后使用此暂存模型创建所有其他中间暂存模型具体 sql 查询。
让我知道是否有其他更好的方法。
我很欣赏你的想法!我的回答真的是意见大于一切
我认为您应该遵循每个来源一个分期模型的做法。暂存模型仅用于翻译和轻微清洁。当源数据发生变化时,它们最有用。在这种情况下,您只需要更改暂存模型,而不必触及任何下游模型。
因此,针对您的相关来源的一种暂存模型,以及(显然)针对最终用户的一种最终 table。至于b/w里面有什么,随便你吧!您可以选择拥有:
- 您的 3
SELECT
是从您的暂存模型中选择的所有视图,以及从该视图中选择的最终模型。
- 只有一个 table 模型直接从分期模型构建,但您的 3
SELECT
是最终模型查询中的 CTE,或者,
- 您的 3
SELECT
都是从您的临时模型中选择的临时模型(如果您的数据库适配器支持它们),以及从这些模型中选择的最终模型。这是上述两种方法的综合。
还有很多方法可以对最终用户隐藏中间模型。
您只需要在以下方面对您和您的用户有意义:
- 可观察性(阅读和理解您已实现的逻辑的最简单方法是什么?)
- 性能(对您的最终用户和您的开发来说最快的)
- 长期维护(什么能让您灵活地随着项目的发展快速做出调整和改进?)
我正在从事一项业务 model/view,其原始 SQL 定义包含对源 table 的非常复杂的查询。
我的问题是 - 我需要在源 table 上创建多个暂存模型,因为同一源上有不同的特定 select 查询(无法在源上的单一分期模型)。处理这种情况的最佳做法应该是什么。
一种方法是直接在源代码上创建所有不同的分期模型并在我的最终业务模型中使用它们。
第二种方法是在源上创建一个包含源中所有字段的暂存模型(在我的特定情况下不需要转换),然后使用此暂存模型创建所有其他中间暂存模型具体 sql 查询。
让我知道是否有其他更好的方法。
我很欣赏你的想法!我的回答真的是意见大于一切
我认为您应该遵循每个来源一个分期模型的做法。暂存模型仅用于翻译和轻微清洁。当源数据发生变化时,它们最有用。在这种情况下,您只需要更改暂存模型,而不必触及任何下游模型。
因此,针对您的相关来源的一种暂存模型,以及(显然)针对最终用户的一种最终 table。至于b/w里面有什么,随便你吧!您可以选择拥有:
- 您的 3
SELECT
是从您的暂存模型中选择的所有视图,以及从该视图中选择的最终模型。 - 只有一个 table 模型直接从分期模型构建,但您的 3
SELECT
是最终模型查询中的 CTE,或者, - 您的 3
SELECT
都是从您的临时模型中选择的临时模型(如果您的数据库适配器支持它们),以及从这些模型中选择的最终模型。这是上述两种方法的综合。
还有很多方法可以对最终用户隐藏中间模型。
您只需要在以下方面对您和您的用户有意义:
- 可观察性(阅读和理解您已实现的逻辑的最简单方法是什么?)
- 性能(对您的最终用户和您的开发来说最快的)
- 长期维护(什么能让您灵活地随着项目的发展快速做出调整和改进?)