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

Snowflake中=>与@特殊语法的含义及适用场景咨询

问题

我具备丰富的SQL使用经验,但刚接触Snowflake。在学习函数相关内容时,遇到了=>语法,示例如下:

CREATE function  functions.public.area_of_circle (radius float)
Returns float as
$$
pi()*radius*radius
$$;

--call the function
select functions.public.area_of_circle(radius => 4);

在使用COPY命令处理阶段(Stage)中的数据时,遇到了在阶段名称前添加@的语法,示例如下:

copy into intl_db.public.INT_STDS_ORG_3166
from @util_db.public.aws_s3_bucket
files = ( 'ISO_Countries_UTF8_pipe.csv')
file_format = ( format_name='util_db.public.PIPE_DBLQUOTE_HEADER_CR');

我在SQL或Snowflake官方文档中未找到太多相关信息:对于@,曾在非Snowflake的论坛帖子中看到其可能用于连接外部数据库,但跨库查询时并不需要该符号,它似乎仅适用于阶段;而关于=>则完全未找到具体说明。现咨询:

  1. 这两个是否仅为Snowflake特定场景下的语法?
  2. 为何不采用标准SQL语法?
  3. 它们在其他SQL语言中是否有相关含义?

回答

关于=>语法

  • 这是Snowflake的命名参数调用语法,作用是在调用函数、存储过程或任务时,明确指定参数名称和对应的值,不用严格遵循参数定义的顺序。
  • 它属于Snowflake特有的语法实现,但部分其他数据库也有类似的命名参数机制:比如Oracle同样支持parameter_name => value的写法来调用存储过程/函数;PostgreSQL则用parameter_name := value的语法(不过更多用于赋值场景)。
  • 标准SQL并没有统一规定命名参数的调用语法,Snowflake选择这个写法是为了提升代码可读性,尤其是参数数量多、类型复杂的场景,能避免因参数顺序错误导致的逻辑问题。

关于@语法

  • 这是Snowflake专门用来引用阶段(Stage)对象的前缀,不管是内部阶段、外部云存储阶段(比如S3、GCS)还是表阶段,都必须通过@前缀来标识。
  • 这是Snowflake独有的语法,因为阶段是Snowflake为数据加载/卸载场景设计的特有对象,标准SQL中没有对应的对象类型,所以需要自定义前缀来区分它和表、视图、函数等常规数据库对象。
  • 在其他SQL语言中,@有不同用途:比如MySQL里@是用户会话变量的前缀;SQL Server里@用于标识局部变量,也可用于链接服务器的引用;PostgreSQL里@用于数组下标或特定函数的参数,但这些用法和Snowflake的阶段引用完全无关。

针对你的问题总结

  1. 两者都是Snowflake特定场景的语法:=>用于命名参数调用,@用于阶段引用;
  2. 不采用标准SQL的原因:标准SQL未覆盖命名参数调用的统一语法,且阶段是Snowflake特有对象,没有对应的标准定义,因此需要自定义语法来支持这些功能;
  3. 其他SQL语言有类似或相关但不同的用法:=>在Oracle有相似的命名参数写法,@在MySQL、SQL Server等中有其他变量/对象引用的用途,但和Snowflake的用法逻辑不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:17