【发布时间】:2022-07-30 07:25:17
【问题描述】:
我在 redshift 上使用 getdbt 进行数据分析操作。任何人都可以建议如何使用 --selector & --defer 和“dbt run”命令。 语法是什么? selectors.yml 文件有什么用? 请分享一些例子。
谢谢
【问题讨论】:
标签: analytics data-warehouse dbt
我在 redshift 上使用 getdbt 进行数据分析操作。任何人都可以建议如何使用 --selector & --defer 和“dbt run”命令。 语法是什么? selectors.yml 文件有什么用? 请分享一些例子。
谢谢
【问题讨论】:
标签: analytics data-warehouse dbt
我对@987654326@ 的解释是一种利用 dbt cli 处理模型的当前和未来状态定义版本的未构建或差异版本。
您可能希望在此处与之交互的示例:#2740 - Automating Non Regression Test
selectors 是一个相对较新的功能,我也没有看到太多的文档来支持它,但它实际上是一组逻辑标准(多个标签、多个目录等)的命名约定
我一般推荐这篇文章来了解典型 dbt 运行的构建路径生成:How we made dbt runs 30% faster
从那里,您可以想象在一个大型项目中,您拥有的每个原始 -> 分析就绪转换管道都有巨大的互连链。
我们以 Gitlab 的 open dbt project 为例。
Gitlab 目前不使用选择器,但它们确实使用了标签。
所以他们可以使用如下逻辑定义建立一个selectors.yml 文件:
selectors.yml
selectors:
- name: sales_funnel
definition:
tag: salesforce
tag: sales_funnel
- name: arr
description: builds all arr models to current state + all upstream dependencies (zoho, zuora subscriptions, etc.)
default: true
definition:
tag: zuora_revenue
tag: arr
- name: month_end_process
description: builds reporting models about customer segments based on subscription activity for latest closed month
definition:
- union:
- method: fqn
value: rpt_available_to_renew_month_end
greedy: eager # default: will include all tests that touch selected model
- method: fqn
value: rpt_possible_to_churn_month_end
greedy: eager
有效选择器定义的完整列表:https://docs.getdbt.com/reference/node-selection/yaml-selectors#default
让他们能够做的是在 cron 作业上、通过气流或其他一些编排器简单地执行:
dbt run --selector month_end_process --full-refresh
并且确信为该过程运行的模型的逻辑选择是 100% 准确复制的,而不是另一种更容易出错的方法,例如假设所有需要的模型都在一个目录中:
dbt run --models marts.finance.restricted_safe.reports --full-refresh
从架构上讲,您可能不需要选择器,直到您达到在一次运行中需要注意多层标签和/或多层用例目录的水平。
示例:模型功能的标签、来源的标签、双/分析师消费者的标签、materialization schedule 的标签等
【讨论】: