我正在 DBT 中设置测试(我使用 1.4 版本),并且我需要它仅在 UTC 格式的特定时间 (05:00) 之后运行。为此,我使用 schema.yml 中的启用属性以及基于 now() 函数的条件逻辑。这个想法是测试只会在 UTC 时间凌晨 05:00 之后激活。
我当前的配置如下:
version: 2
models:
- name: my_first_model
tests:
- my_first_model_test:
name: my_first_model_test
config:
enabled: "{{ 'true' if (now()..hour >= 5) else 'false' }}"
我的问题是:DBT 中没有启用的逻辑有效吗?启用是否接受像这样的 Jinja 表达式? 如果无效,根据时间在 DBT 中调节测试执行的最佳方法是什么?
您可以创建一个返回布尔值的宏并从 yml 文件调用该宏。
version: 2
models:
- name: my_first_model
tests:
- my_first_model_test:
name: my_first_model_test
config:
enabled: "{{ is_after_5am_utc() }}"
宏观
{% macro is_after_5am_utc() %}
{% set current_time = execution_time %}
{% set execution_hour = current_time.hour %}
{% if execution_hour >= 5 %}
{% do return(true) %}
{% else %}
{% do return(false) %}
{% endif %}
{% endmacro %}
我已经使用了 execution_time 而不是现在,因为 Jinja 可能不支持它。你可以尝试一下并检查。