在DBT Python模型中加载Snowflake Conda包时遇到报错求助
我太懂你这种头疼的感觉了——同样的代码在Snowsight手动选包就能跑,到DBT里执行dbt build就报错说没法创建带指定包的Python函数,这反差真的让人摸不着头脑。下面给你几个可以尝试的解决方向:
核对包名与Snowflake Anaconda频道的一致性
Snowflake的Anaconda频道里的包名偶尔会和PyPI上的有细微差别,比如你用的faiss-cpu,得确认它在Snowflake频道里的准确名称是不是这个。可以去Snowsight里看你手动选的包的完整名称,然后把dbt.config里的包名改成完全匹配的版本,别差一个字符。给包加上明确的版本号
有时候DBT默认拉取最新版,但Snowflake的Anaconda频道可能没同步最新版,或者最新版存在兼容性问题。你可以试试给每个包指定和Snowsight里能正常运行的相同版本,比如:dbt.config( packages = [ 'faiss-cpu==1.7.4', 'numpy==1.24.3', 'pandas==2.0.3', 'scikit-learn==1.2.2', ] )确认DBT所用角色的权限与频道访问权
你在Snowsight里能访问的Anaconda频道,DBT连接Snowflake用的角色是不是也有对应权限?可以去Snowflake里检查下角色的权限设置,确保这个角色能访问Anaconda的相关频道。另外有些场景需要给仓库指定默认的Conda频道,也可以排查下这部分配置。检查
dbt.config的位置与缩进
要确保dbt.config是写在model函数内部的,而且缩进完全正确。你现在的代码看起来位置是对的,但有时候缩进错误会导致配置不生效,不妨再仔细核对一遍格式。清理DBT缓存后重试
DBT有时候会缓存之前的包配置,你可以试试删掉项目里的target文件夹清理缓存,然后重新运行dbt build,说不定是缓存搞的鬼。
如果上面的方法都没用,还可以尝试逐个移除packages里的包,排查到底是哪个包导致的报错,这样能更快锁定问题根源。
备注:内容来源于stack exchange,提问作者UndeterminedPhenotype

