python - 是否可以将动态值传递给 dbt 源新鲜度测试?
问题描述
我正在尝试根据基础源的“synced_at”列的中位数和标准差动态确定在 dbt sources.yml 中指定的新鲜度检查的警告和错误。
为此,我想我可能会尝试在 source.yml 文件的新鲜度块中传递一个宏,如下所示:
# sources.yml
...
tables:
- name: appointment_type
freshness:
error_after:
count: test_macro()
period: hour
...
在哪里:
{%- macro test_macro(this) -%}
{# /*
The idea is {{ this.table }} would parameterize a query,
going over the same column name for all sources, _fivetran_synced,
and spit out the calculated values I want. This makes me feel like
it needs to be a prehook, that somehow stores the value in a var,
and that is accessed in the source.yml, instead of calling it directly.
In this case a trivial integer is attempted to be returned, just as an example.
*/ #}
{{ return(24) }}
{%- endmacro -%}
但是,这会导致类型错误。大概宏根本没有被调用。用 jinja 引号括起来也会返回错误。
我很好奇目前是否可以通过任何方式将动态值传递给新鲜度检查?
解决方案
今天不可能从.yml
文件中调用宏,正是因为这个原因:dbt 需要能够在freshness
对数据库运行任何查询之前静态解析这些文件并验证内部对象(包括资源属性,如 source )。
我认为您可以通过重写宏来解决这个问题,而不是简单地返回一个与 Z-score 不同的时间戳,基于所有 Fivetran时间戳进行标准化。感觉很棘手,但有可能。collect_freshness
max(synced_at)
current_timestamp
max(synced_at)
同时,我会在这里轻轻地推回你更大的目标。我们认为来源新鲜度应该是规定性的。您可以告诉 Fivetran 您希望它多久同步一次数据,并添加freshness
块来测试这些期望。您可以像上面设想的那样运行临时查询,以确定这些期望是否合理。显然,有些表的更新不频繁或不可预测,但我发现覆盖或删除这些表的新鲜度期望比增加其帐户的显着复杂性更有用。
推荐阅读
- image - Vuejs图像加载找不到图像
- html5-history - URL 更改,但组件未使用 react 渲染 - 打字稿
- python - BeautifulSoup webscrape .asp 只搜索列表中的最后一个
- r - 在 R 中提取具有唯一 id 变量的一行
- c - 为什么结构指针有错误的值
- r - 在R中按组计算日期间隔,考虑到当日期重叠时只计算一次
- r - 如何避免在 shinyapps.io 服务器上发布源代码?
- regex - 找不到正则表达式模式来拉特定列
- spring - Couchbase 文档到期不适用于 spring-data-couchbase:.4.0.3.RELEASE
- laravel - Laravel Sanctum + Nuxt JS 我无法通过 CORS