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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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 显示的问题