dbt 中模式测试的价值是什么?
What is the value of schema tests in dbt?
你什么时候想使用 dbt schema tests(unique
、not_null
、accepted_values
、&relationships
),什么时候可以使用 SQL 架构约束?
例如,这里有一些 SQL 模式约束可以替代每个 dbt 模式测试:
unique
: UNIQUE
constraint
not_null
: NOT NULL
constraint
accepted_values
: FOREIGN KEY
constraint 查找 table
relationships
: FOREIGN KEY
constraint 给另一个 table
您不能在视图或 CTE 上有上面列出的 table 约束。 dbt 的价值在于允许用户构建 SELECT
查询的 DAG,而不必担心 DDL 或配置。稍后可以将它们配置为 tables 而不是默认视图,并且无需更改语法。
dbt 测试比数据库约束更灵活。如果您尝试向非空目标插入空值,您的过程将失败,故事结束。使用 dbt 测试,您可以先执行,然后再测试,这可能很有趣。
更多示例:
- 您可以将测试分类为警告而不是错误
- 您可以定义错误阈值
- 您可以指定一个过滤器以仅将测试应用于值的子集
- 测试在不同环境中的行为可能不同(prod/dev 等)
- dbt 测试比数据库约束更容易修改
你什么时候想使用 dbt schema tests(unique
、not_null
、accepted_values
、&relationships
),什么时候可以使用 SQL 架构约束?
例如,这里有一些 SQL 模式约束可以替代每个 dbt 模式测试:
unique
:UNIQUE
constraintnot_null
:NOT NULL
constraintaccepted_values
:FOREIGN KEY
constraint 查找 tablerelationships
:FOREIGN KEY
constraint 给另一个 table
您不能在视图或 CTE 上有上面列出的 table 约束。 dbt 的价值在于允许用户构建 SELECT
查询的 DAG,而不必担心 DDL 或配置。稍后可以将它们配置为 tables 而不是默认视图,并且无需更改语法。
dbt 测试比数据库约束更灵活。如果您尝试向非空目标插入空值,您的过程将失败,故事结束。使用 dbt 测试,您可以先执行,然后再测试,这可能很有趣。
更多示例:
- 您可以将测试分类为警告而不是错误
- 您可以定义错误阈值
- 您可以指定一个过滤器以仅将测试应用于值的子集
- 测试在不同环境中的行为可能不同(prod/dev 等)
- dbt 测试比数据库约束更容易修改