sqlfluff:未定义的 jinja 模板变量:'dbt_utils'

问题描述 投票:0回答:1

使用 sqlfluff 运行预提交会返回错误:

Sqlfluff 与 pre-commit-config.yaml 一起位于根文件夹中。我已尝试将其移至 /dbt 但错误仍然存在。

我尝试将 templater = jinja 更改为 templater = dbt ,它说:

但是 pip 安装 sqlfluff-templater-dbt 后,重新启动终端和 VS code,仍然出现同样的错误。

这是我使用 dbt_utils 的方式:

select
{{ dbt_utils.generate_surrogate_key([
        'date',          
        'start',
        'end'
    ])
}} as hash
from {{ source('bronze', 'test') }}

这是我的sqlfluff:

[sqlfluff]
dialect = databricks
templater = jinja
exclude_rules = structure.column_order

[sqlfluff:templater:jinja]
apply_dbt_builtins = true

[sqlfluff:templater:jinja:macros]
# Macros provided as builtins for dbt projects
dbt_ref = {% macro ref(model_ref) %}{{model_ref}}{% endmacro %}
dbt_source = {% macro source(source_name, table) %}{{source_name}}_{{table}}{% endmacro %}
dbt_config = {% macro config() %}{% for k in kwargs %}{% endfor %}{% endmacro %}
dbt_var = {% macro var(variable, default='') %}item{% endmacro %}
dbt_is_incremental = {% macro is_incremental() %}True{% endmacro %}

我有 dbt/dependency.yml (并且之前运行过 dbt deps):

packages:
  - package: dbt-labs/dbt_utils
    version: 1.1.1

此外,在我使用 dbt_utils 之前一切都工作正常,所以这与它有关。感谢您的帮助!

jinja2 databricks dbt pre-commit sqlfluff
1个回答
0
投票

我在使用 SQLFluff 的 DBT 项目中也遇到了同样的问题。

DBT代码:

{{ dbt_utils.generate_surrogate_key(['column1', 'column2']) }} 作为 列_sk,

SQLfluff 输出

长:11 |人数:8 | TMP|未定义的 jinja 模板变量:'dbt_utils'

在我的 .sqlfluff 文件中,我添加了以下内容:

忽略 = 模板化

解决了我的错误。

但是,我认识到可能有更好的方法来解决。 sqlfluff 配置页面引用了一些设置(例如,

[tool.sqlfluff.core] templater = "jinja"
[tool.sqlfluff.templater.jinja] apply_dbt_builtins = true
),它们可能可以配置为正确跳过这些类型的错误,同时仍然保留格式化模板代码的能力。

© www.soinside.com 2019 - 2024. All rights reserved.