【问题标题】:Maximum JavaScript string size in Snowflake Stored ProceduresSnowflake 存储过程中的最大 JavaScript 字符串大小
【发布时间】:2019-12-11 23:19:02
【问题描述】:

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)并从表中传入 VARCHAR 数据,Snowflake 过程中是否存在大小限制,或者它会处理 16MB 的字符串变量吗?

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    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)
    

    【讨论】:

    • 谢谢汉斯!如果我和你一样了解 JavaScript,我可以自己回答这个问题,但这将有助于其他人参考。感谢您的 map 函数处理显示为未定义的 NULL 参数!
    • 我相信这实际上与 Snowflake 中 SQL VARCHAR 数据类型的 16MB 限制有关,而不是 JavaScript。未经测试,我确信 JavaScript 可以在过程/函数中处理 > 16MB 的文本。你找到了我的一些旧东西,也许吧?我永远无法理解为什么 SQL NULL 必须在存储过程 API 中映射为 undefined 而不是 null。
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2012-01-20
    • 2012-10-25
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多