Snowflake 存储过程中的最大 JavaScript 字符串大小
Maximum JavaScript string size in Snowflake Stored Procedures
Snowflake 文档说 VARCHAR 列限制为 16 MB 未压缩
https://docs.snowflake.net/manuals/sql-reference/data-types-text.html#data-types-for-text-strings
VARCHAR holds unicode characters. The maximum length is 16 MB (uncompressed). The maximum number of Unicode characters that can be stored in a VARCHAR column depends on whether the characters are singlebyte or multibyte:
Singlebyte
16,777,216
Multibyte
Between 8,388,608 (2 bytes per character) and 4,194,304 (4 bytes per character)
If a length is not specified, the default is the maximum length.
Snowflake 文档说 VARCHAR 数据会自动转换为 JavaScript 字符串数据类型。
https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#sql-and-javascript-data-type-mapping
问题:
如果我调用 Snowflake 过程(或 JavaScript UDF)并从 table 传入 VARCHAR 数据,Snowflake 过程是否有大小限制,或者它会处理 16MB 的字符串变量?
JavaScript 最多可处理 16MB:
CREATE OR REPLACE FUNCTION MaxParam("STRING" VARCHAR)
RETURNS STRING LANGUAGE JAVASCRIPT STRICT IMMUTABLE AS
'return STRING;';
CREATE TABLE T AS SELECT LPAD('111', 16777216, '0') STR;
SELECT MaxParam(STR) FROM T;
=> 0000000000000000000000000000000000000...
SELECT MaxParam(LPAD('111', 16777217, '0'));
=> String '(padded string)' is too long and would be truncated
(Error message is from LPAD, not JS)
Snowflake 文档说 VARCHAR 列限制为 16 MB 未压缩 https://docs.snowflake.net/manuals/sql-reference/data-types-text.html#data-types-for-text-strings
VARCHAR holds unicode characters. The maximum length is 16 MB (uncompressed). The maximum number of Unicode characters that can be stored in a VARCHAR column depends on whether the characters are singlebyte or multibyte:
Singlebyte
16,777,216
Multibyte
Between 8,388,608 (2 bytes per character) and 4,194,304 (4 bytes per character)
If a length is not specified, the default is the maximum length.
Snowflake 文档说 VARCHAR 数据会自动转换为 JavaScript 字符串数据类型。
https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#sql-and-javascript-data-type-mapping
问题: 如果我调用 Snowflake 过程(或 JavaScript UDF)并从 table 传入 VARCHAR 数据,Snowflake 过程是否有大小限制,或者它会处理 16MB 的字符串变量?
JavaScript 最多可处理 16MB:
CREATE OR REPLACE FUNCTION MaxParam("STRING" VARCHAR)
RETURNS STRING LANGUAGE JAVASCRIPT STRICT IMMUTABLE AS
'return STRING;';
CREATE TABLE T AS SELECT LPAD('111', 16777216, '0') STR;
SELECT MaxParam(STR) FROM T;
=> 0000000000000000000000000000000000000...
SELECT MaxParam(LPAD('111', 16777217, '0'));
=> String '(padded string)' is too long and would be truncated
(Error message is from LPAD, not JS)