You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dbt宏中设置变量时如何保留原始字符串?

在dbt宏中保留原始文本(实现类似Python原始字符串效果)

首先要明确:你用的|e过滤器是HTML转义过滤器,只负责处理<、>、&、"这类HTML特殊字符,对反斜杠的转义完全不起作用,这就是它没生效的原因。

要在dbt的Jinja2模板里实现类似Pythonr''原始字符串的效果,有两种靠谱的方式:

方法一:使用raw块包裹原始字符串

Jinja2的raw块会直接保留内部的所有文本,不做任何转义解析,适合需要完全原始内容的场景:

{% macro process(column_name) %}
    {% set my_dict = {} %}
    {% raw %}
        {% set key1 = "\\T" %}
        {% set key2 = "\\\\T" %}
    {% endraw %}
    {% do my_dict.update({key1: " ", key2: " "}) %}
    {% for key, value in my_dict.items() %}
        {{ log(key, True) }}
    {% endfor %}
    {{ return('') }}
{% endmacro %}

方法二:手动双重转义反斜杠

Jinja2会自动解析字符串里的转义字符(和Python类似),所以要得到1个实际的反斜杠,需要写2个反斜杠;要得到2个实际的反斜杠,就得写4个:

{% macro process(column_name) %}
    {% set my_dict = {"\\\\T": " ", "\\\\\\\\T": " "} %}
    {% for key, value in my_dict.items() %}
        {{ log(key, True) }}
    {% endfor %}
    {{ return('') }}
{% endmacro %}

两种方法运行后,日志都会输出你期望的\\T和\\\\T。

内容的提问来源于stack exchange,提问作者Calum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:55:22