use/design dbt 关系测试的好方法
Good way to use/design dbt relation test
我想对模型进行 dbt 关系测试 m_0。
models:
- name: m_0
columns:
- name: customer_id
tests:
- relationships:
to: ref('m_1')
field: id
然后我有两个问题:
- 我在模式 s_a 下 运行 配置模型 m_0,如何处理 m_1 不存在的情况?不能保证 m_1 必须是 运行 在 m_0 之前。
- 如何保证关系测试结果不不稳定?由于 m_0 和 m_1 是独立安排的,一些最新的 id 可能不会从 m_1 中读取但已经在 m_0.
中
编写 dbt 关系测试有什么好的做法吗? m_0和m_1有什么要求吗?例如 m_1 应该是 m_0 的父 table?
测试是它自己的节点,它将在 m_0 和 m_1 的 DAG 下游。如果您 运行 像 dbt build
这样的命令,dbt 将在 运行 测试此关系之前首先构建 m_0 和 m_1。但是,您是对的,如果 运行 dbt test -s m_0
和 m_1 尚未构建,测试将失败。如果要避免这种失败,可以使用dbt test -s m_0 --indirect-selection=cautious
,关系测试不会运行。参见 the docs
您应该考虑向此测试添加一个 where:
配置,以限制在 m_0
中测试的记录。例如,where: created_at < current_timestamp - interval '1 day'
。这应该在 m_1 中留下“额外”的记录,但是这个测试只关心 m_1 中丢失的记录,所以它会通过
我想对模型进行 dbt 关系测试 m_0。
models:
- name: m_0
columns:
- name: customer_id
tests:
- relationships:
to: ref('m_1')
field: id
然后我有两个问题:
- 我在模式 s_a 下 运行 配置模型 m_0,如何处理 m_1 不存在的情况?不能保证 m_1 必须是 运行 在 m_0 之前。
- 如何保证关系测试结果不不稳定?由于 m_0 和 m_1 是独立安排的,一些最新的 id 可能不会从 m_1 中读取但已经在 m_0. 中
编写 dbt 关系测试有什么好的做法吗? m_0和m_1有什么要求吗?例如 m_1 应该是 m_0 的父 table?
测试是它自己的节点,它将在 m_0 和 m_1 的 DAG 下游。如果您 运行 像
dbt build
这样的命令,dbt 将在 运行 测试此关系之前首先构建 m_0 和 m_1。但是,您是对的,如果 运行dbt test -s m_0
和 m_1 尚未构建,测试将失败。如果要避免这种失败,可以使用dbt test -s m_0 --indirect-selection=cautious
,关系测试不会运行。参见 the docs您应该考虑向此测试添加一个
where:
配置,以限制在m_0
中测试的记录。例如,where: created_at < current_timestamp - interval '1 day'
。这应该在 m_1 中留下“额外”的记录,但是这个测试只关心 m_1 中丢失的记录,所以它会通过