扩展运算符¶
扩展运算符将表示列表的查询表达式扩展为列表中的单个值。目前,扩展运算符(**)是 Snowflake 支持的唯一扩展运算符。
扩展¶
扩展运算符将 数组 扩展为单个值的列表。此运算符适用于以下用例:
包含 IN 子句 的查询。
SQL 用户定义的 函数,它们使用实参来提供值数组。
Snowflake Scripting 存储过程,它们使用 BIND 变量来提供值数组。有关在 Snowflake Scripting 中使用绑定变量的更多信息,请参阅 在 SQL 语句中使用变量(绑定) 和 在 SQL 语句中使用实参(绑定)。
有关这些用例的更多信息,请参阅 Snowflake 推出 SQL 扩展运算符 (**) 博客文章。
语法¶
限制¶
输入必须是常量值的数组,可以是字面量值的数组,也可以是表示字面量值数组的绑定变量。
半结构化数组中的每个值都是 VARIANT 类型。VARIANT 值可以包含任何其他数据类型的值。对于存储在 VARIANT 值中的值,扩展运算符支持以下数据类型:
用 SQL 以外的语言编写的用户定义函数和存储过程不能使用扩展运算符。
使用扩展运算符扩展非常大的数组可能会降低性能。
示例¶
一些示例使用下表中的数据:
创建表并插入数据:
以下示例使用扩展运算符。
在 IN 子句中扩展字面量值的数组¶
在之前创建的 spread_demo 表上的查询中使用扩展运算符扩展数字的数组:
使用扩展运算符扩展字符串的数组:
在混合使用 INTEGER 值和扩展数组值的查询中使用 IN 子句:
在系统定义的函数调用中扩展字面量值的数组¶
在对 COALESCE 函数的调用中扩展字符串的数组:
在对 GREATEST 函数的调用中扩展数字的数组:
在 SQL 用户定义函数中使用带有绑定变量的扩展运算符¶
创建使用扩展运算符的 SQL 用户定义函数。该函数将数组作为实参,然后扩展数组值以查询之前创建的 spread_demo 表:
使用函数查询表:
在 Snowflake Scripting 存储过程中将扩展运算符与绑定变量一起使用¶
创建使用扩展运算符的 Snowflake Scripting 存储过程。存储过程将数组作为实参,然后扩展绑定变量中的数组值以查询之前创建的 spread_demo 表:
调用存储过程: