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 之前一切都工作正常,所以这与它有关。感谢您的帮助!
我在使用 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
),它们可能可以配置为正确跳过这些类型的错误,同时仍然保留格式化模板代码的能力。