snowflake-cloud-data-platform - 在 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 个字节的数组或元组类数据类型有关?但我正在努力通过文档确认这一点。
解决方案
它实际上在 SET 运算符的文档中有所说明:
使用说明
该命令支持在同一语句中设置多个变量。
如果命令执行复杂的表达式,它可能需要在会话中运行虚拟仓库。
表达式的数量必须与要初始化的变量的数量相匹配。
> 字符串或二进制变量的大小限制为 256 字节。
SQL 变量的标识符(即名称)限制为 256 个字符。
CURRENT 或 PUBLIC 等变量名称保留供 Snowflake 将来使用,不能使用。
但是,关于您的示例,它似乎也可以通过同一 SET 操作中的两个 SELECT 来完成 - 如下所示:
set (var1, var2) = (
(select ''),
(select 'IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII----------IIIIIIIIII')
);
推荐阅读
- machine-learning - How can I get predictions from these pretrained models?
- c# - 获取 PrintDialog 子级的对话框句柄
- swift - 如何在CoreData中与Swift覆盖合并时防止多对关系NSManagedObject重复?
- bash - Using sed with a regex to replace strings
- javascript - 根据用户输入从表中删除行
- php - 如何使用 php 创建 pgp 密钥?
- android - 在扩展 Handler 的类中,handleMessage 返回的字符串出现奇怪的损坏
- c# - 如何拦截 Android 设备音量增大/减小按钮以在 Xamarin Forms 应用程序中打开相机?
- python - Why is heap slower than sort for K Closest Points to Origin?
- javascript - How to handle props navigation inside of if condition using React Native