You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake SQL UDF报错:dbt宏调用时出现意外'create'语法错误

问题原因及解决方法

核心问题

你把函数创建宏和函数调用的逻辑混在了一起。当你直接在SELECT语句里写{{ target.schema }}.multiply1(5,2)时,既没有先执行宏来创建函数,还可能错误地让宏的CREATE FUNCTION语句被渲染到了SELECT的上下文里,这直接导致了语法错误。

分步解决

1. 先执行宏创建数据库函数

dbt里这类DDL(数据定义语言)宏需要单独执行,不能嵌入到SELECT查询中。在终端运行以下命令:

dbt run-operation product_nums

这条命令会触发dbt执行你定义的product_nums宏,在target.schema指定的数据库schema中创建multiply1函数。

2. 修正函数语法(适配Snowflake)

如果执行宏时仍报错,检查Snowflake的函数创建语法:Snowflake推荐用$$作为字符串分隔符(避免单引号转义问题),同时添加or replace可以覆盖已存在的函数,避免重复创建报错。修改后的宏如下:

{% macro product_nums() %}
create or replace function {{ target.schema }}.multiply1 (a number, b number)
  returns number
  language sql
  as $$a * b$$;
{% endmacro %}

3. 正常调用函数

函数创建完成后,直接在SELECT查询中引用即可,不需要再关联宏:

SELECT {{ target.schema }}.multiply1(5,2)

关键注意点

  • DDL类宏(创建函数、表、视图等)要么通过dbt run-operation单独执行,要么放到on-run-start/on-run-end钩子中自动执行。
  • 函数是数据库中的持久化对象,创建完成后,后续查询直接引用即可,无需再依赖宏。

内容的提问来源于stack exchange,提问作者skyzine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:20:41