运行dbt snapshot提示unknown tag 'snapshot'错误如何解决
报错根因
从报错信息里的Compilation Error in model test_snapshot就能判断,dbt完全没把你的文件识别为快照,而是当成普通模型在解析,自然不认识{% snapshot %}这个快照专属的Jinja标签,具体触发原因:
- 执行命令拼写错误:你运行的是
dbt snpashot,正确的快照执行命令是dbt snapshot,snapshot单词里的n和p顺序写反后,dbt不会触发快照专属的解析逻辑。 - 快照路径配置不匹配:如果项目根目录下
dbt_project.yml里的snapshot-paths配置,没有包含你存放快照文件的snapshots目录,dbt就不会把这个目录下的SQL文件归为快照类资源,只会按普通模型规则解析。
等你解决上面两个核心问题,代码里还有一处拼写错误会触发后续报错:{{ ref('modle_in_sample_folder') }}里的模型名拼错了,和你实际存的上游模型名model_in_sample_folder对不上。
修复步骤
- 先改执行命令,把拼错的
dbt snpashot换成正确的dbt snapshot再执行。 - 检查
dbt_project.yml里的snapshot-paths配置,确保它包含你存放快照的目录,默认的正确配置如下:
snapshot-paths: ["snapshots"]
注意不要把快照文件放到models、intermediate这类存放普通模型的目录下,必须放在snapshot-paths指定的目录里,dbt才会按快照规则解析文件。
3. 修正快照SQL里ref()的参数,把拼错的modle_in_sample_folder改成和上游模型一致的model_in_sample_folder,避免后续报“引用模型不存在”的错误。
以上配置修正完成后,重新执行dbt snapshot就能正常运行快照逻辑了。
内容的提问来源于stack exchange,提问作者Cade Justad-Sandberg
相关产品推荐
相关产品推荐

