如何在dbt Jinja宏中传递列除以数值的参数?
解决Jinja宏中列运算参数的错误问题
错误原因很明确:你把列名rate用单引号包裹后,Jinja会将其识别为普通字符串,而非数据库列的引用,所以执行/1200时就会触发「字符串与整数无法做除法」的错误。
针对这个问题,有两种正确的处理方式,取决于你的pmt宏的设计逻辑:
如果宏
pmt是直接生成SQL语句,需要让数据库执行列运算:
把整个SQL运算表达式作为字符串参数传递,这样宏渲染后会让数据库去计算列除以数值的结果:{{ pmt('rate / 1200', 'nper', 'pv', 'fv') }}如果宏
pmt是在Jinja层面处理数值运算(比如你传入的是Jinja变量而非数据库列):
去掉列名的单引号,确保rate是一个数值类型的Jinja变量,此时Jinja可以直接执行除法:{{ pmt(rate/1200, nper, pv, fv) }}
核心要区分Jinja层面的运算和SQL层面的运算:前者是在dbt渲染模型时计算,后者是在数据库执行SQL时计算,根据你的宏功能选择对应的写法即可。
内容的提问来源于stack exchange,提问作者skyzine
相关产品推荐
相关产品推荐

