首页 > 解决方案 > 在 Snowflake 中,为什么同时分配两个变量时,变量有 256 字节的限制?

问题描述

我正在使用 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 个字节的数组或元组类数据类型有关?但我正在努力通过文档确认这一点。

标签: snowflake-cloud-data-platform

解决方案


它实际上在 SET 运算符的文档中有所说明:

使用说明

该命令支持在同一语句中设置多个变量。

如果命令执行复杂的表达式,它可能需要在会话中运行虚拟仓库。

表达式的数量必须与要初始化的变量的数量相匹配。

> 字符串或二进制变量的大小限制为 256 字节。

SQL 变量的标识符(即名称)限制为 256 个字符。

CURRENT 或 PUBLIC 等变量名称保留供 Snowflake 将来使用,不能使用。

但是,关于您的示例,它似乎也可以通过同一 SET 操作中的两个 SELECT 来完成 - 如下所示:

set (var1, var2) = (
  (select ''),
  (select 'IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII')
);

推荐阅读