使用sqlfluff+pre-commit遇'dbt_utils'未定义Jinja变量错误求助
解决pre-commit + sqlfluff报错“Undefined jinja template variable: 'dbt_utils'”
方案一:使用sqlfluff的dbt模板器(推荐)
该方案让sqlfluff直接对接dbt项目环境,自动加载dbt_utils等依赖宏,无需手动定义。
确保pre-commit环境安装对应版本的sqlfluff-templater-dbt
修改pre-commit-config.yaml,在sqlfluff的hook中指定安装匹配版本的sqlfluff-templater-dbt(版本需与sqlfluff严格一致):repos: - repo: https://github.com/sqlfluff/sqlfluff rev: 3.2.0 # 替换为你使用的sqlfluff版本 hooks: - id: sqlfluff-fix additional_dependencies: ['sqlfluff-templater-dbt==3.2.0'] - id: sqlfluff-lint additional_dependencies: ['sqlfluff-templater-dbt==3.2.0']更新.sqlfluff配置文件
将模板器切换为dbt,并指定dbt项目路径:[sqlfluff] dialect = databricks templater = dbt exclude_rules = structure.column_order dbt_project_dir = ./dbt # 你的dbt项目根目录路径 [sqlfluff:templater:dbt] enable = true删除原有的
[sqlfluff:templater:jinja]相关配置。重新初始化pre-commit hooks
执行以下命令清理并重新安装hooks:pre-commit clean pre-commit install
方案二:在jinja模板器中手动定义dbt_utils宏
若不想切换模板器,可在sqlfluff配置中手动添加你用到的dbt_utils宏占位符:
[sqlfluff:templater:jinja:macros] # 保留已有的dbt基础宏 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_utils宏占位符 dbt_utils = {% macro generate_surrogate_key(cols) %}placeholder_hash{% endmacro %}
验证
执行命令测试修复效果:
pre-commit run --all-files
内容的提问来源于stack exchange,提问作者pauloutboy
相关产品推荐
相关产品推荐

