DBT Seed指定Schema异常:生成DEFAULT_SCHEMA_SEED_SCHEMA_NAME问题排查
问题解决办法
出现这个情况是因为dbt默认的generate_schema_name宏会把你配置的+schema值作为后缀,拼在目标schema(也就是你指定的DEFAULT_SCHEMA)后面,所以才生成了DEFAULT_SCHEMA_SEED_SCHEMA_NAME这种组合名。要解决这个问题,有两种可行方式:
方式一:自定义schema生成宏,覆盖默认拼接逻辑
在你的dbt项目的macros目录下新建一个文件(比如命名为custom_schema.sql),写入以下代码:
{% macro generate_schema_name(custom_schema_name, node) -%} {%- set default_schema = target.schema -%} {%- if custom_schema_name is none -%} {{ default_schema }} {%- else -%} {{ custom_schema_name | trim }} {%- endif -%} {%- endmacro %}
这个宏的逻辑很简单:如果配置了自定义schema(就是你设置的SEED_SCHEMA_NAME),就直接使用这个自定义名称,不再和默认schema拼接;如果没配置自定义schema,就沿用默认的target.schema。
方式二:检查配置缩进并确保权限
先确认你的dbt_project.yml配置缩进是否正确(YAML对缩进要求严格),正确的格式应该是:
seeds: PROJECT_NAME: +schema: SEED_SCHEMA_NAME
如果缩进没问题,那还是需要用方式一的宏来修改默认逻辑。另外要确保你的Snowflake角色拥有在目标数据库下创建SEED_SCHEMA_NAME这个schema的权限,否则会出现创建失败的情况。
内容的提问来源于stack exchange,提问作者Graleon3
相关产品推荐
相关产品推荐

