在 Snowflake 中,为啥当你同时分配两个变量时,变量有 256 字节的限制?
Posted
技术标签:
【中文标题】在 Snowflake 中,为啥当你同时分配两个变量时,变量有 256 字节的限制?【英文标题】:In Snowflake, why, when you assign two variables at the same time, is there a 256 byte limit on the variables?在 Snowflake 中,为什么当你同时分配两个变量时,变量有 256 字节的限制? 【发布时间】:2020-02-05 02:36:44 【问题描述】:我正在使用 Snowflake,试图同时将两个变量设置为具有两个字段的结果集,但它并没有像我想象的那样工作。这是一个例子:
当我运行这个时:
set (var1, var2) = (select 'IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII','');
我收到以下错误:
Assignment to 'VAR1' not done because value exceeds size limit for variables. Its size is 280; the limit is 256 (internal storage size in bytes).
但是,这可以正常工作(相同数量的字符):
set (var1) = (select 'IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII');
似乎在分配两个变量时,其中一个字段的字符串长度只能是256字节。当使用 4 字节字符时,我上面的 70 个字符的字符串是 280 个字符,突破了 256 个限制。
我认为这可能与变量集合的存储方式如何以不支持超过 256 个字节的数组或元组类数据类型有关?但我正在努力通过文档确认这一点。
【问题讨论】:
有趣的是,如果您将 select 从作业中取出,它会起作用: set (var1, var2) = ('IIIIIIIIII----------IIIIIIIIII------ ----IIIIIIIIII---------IIIIIIIII',''); 是的,这真的很有趣!我没有注意到这一点。不幸的是,我实际上试图解决的问题需要一个返回两个值的 select 语句。 :( 【参考方案1】:它实际上在 SET 运算符的文档中有所说明:
使用说明
该命令支持在 同样的说法。
如果命令执行复杂的表达式,它可能需要一个 在会话中运行虚拟仓库。
表达式的数量必须与变量的数量相匹配 初始化。
>字符串或二进制变量的大小限制为256字节。
SQL 变量的标识符(即名称)限制为 256 字符。
CURRENT 或 PUBLIC 等变量名保留供将来使用 由 Snowflake 提供,无法使用。
但是,就您的示例而言,它似乎也可以通过同一 SET 操作中的两个 SELECT 来完成 - 如下所示:
set (var1, var2) = (
(select ''),
(select 'IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII')
);
【讨论】:
以上是关于在 Snowflake 中,为啥当你同时分配两个变量时,变量有 256 字节的限制?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Snowflake 中这两个相似的查询具有非常不同的性能?
在 Snowflake SQL 中同时满足两个条件时从 Select 中删除记录
当我将一个字典分配给另一个变量时,为啥 Python 会同时更新两个字典? [复制]