dbt context 变量简单说明

dbt 的模型以及macro 中实际上是可以引用一个context 变量的,此变量没有在文档中有说明,但是官方一些macro 中使用了此变量

参考使用

dbt 的snapshots strategies 处理中基于配置的strategy 查找对应的macro

{% macro strategy_dispatch(name) -%}
{% set original_name = name %}
  {% if '.' in name %}
    {% set package_name, name = name.split(".", 1) %}
  {% else %}
    {% set package_name = none %}
  {% endif %}
 
  {% if package_name is none %}
    {% set package_context = context %}
  {% elif package_name in context %}
    {% set package_context = context[package_name] %}
  {% else %}
    {% set error_msg %}
        Could not find package '{{package_name}}', called with '{{original_name}}'
    {% endset %}
    {{ exceptions.raise_compiler_error(error_msg | trim) }}
  {% endif %}
 
  {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}
 
  {% if search_name not in package_context %}
    {% set error_msg %}
        The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'
    {% endset %}
    {{ exceptions.raise_compiler_error(error_msg | trim) }}
  {% endif %}
  {{ return(package_context[search_name]) }}
{%- endmacro %}

说明

dbt 部分实现上使用的方法不是很统一,比如对于物化增量处理上就相对统一,基于了包装的context 通过adapter 的get_incremental_strategy_macro 方法处理的,部分可能因为缺少功能,使用了其他hack 模式

参考资料

core/dbt/include/global_project/macros/materializations/snapshots/strategies.sql
core/dbt/include/global_project/macros/materializations/snapshots/snapshot.sql
core/dbt/adapters/base/impl.py
https://docs.getdbt.com/reference/dbt-jinja-functions/
https://docs.getdbt.com/docs/build/snapshots

posted on   荣锋亮  阅读(17)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-04-28 Linux kernel 模块开发&构建学习
2023-04-28 OpenMetadata 1.0 发布
2023-04-28 utm 试用
2023-04-28 utm 基于qemu 的mac 虚拟化管理工具
2022-04-28 minio 来自官方的一些学习资料-gateway 即将废弃
2022-04-28 hashids typescript lua 定义文件另外一种写法
2021-04-28 使用map 解决cube.js 默认title 显示的问题

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示