如何在Snowflake中集成使用lodash库?
关于Snowflake中使用lodash库的说明
结论先行:可以使用,但仅支持在Snowflake的JavaScript/TypeScript相关运行环境中引入,原生SQL、Python UDF/存储过程、Java/Scala UDF环境均不支持直接使用lodash
目前Snowflake没有官方内置的lodash集成,所有使用都需要自行引入依赖,以下是不同场景下的实操步骤:
场景1:JavaScript/TypeScript 编写的UDF、存储过程中使用
这是最常见的使用场景,Snowflake的JS运行环境不支持在线拉取npm依赖,需要通过两种方式引入lodash:
- 内联引入:将lodash的UMD格式压缩版源码(一般是
lodash.min.js的稳定版本,推荐4.17.21)直接粘贴到UDF/存储过程的代码块开头,后续代码可以直接通过全局_对象调用lodash方法
示例代码:
CREATE OR REPLACE PROCEDURE array_chunk_test(input ARRAY) RETURNS ARRAY LANGUAGE JAVASCRIPT AS $$ // 此处粘贴完整的lodash.min.js源码,省略源码内容避免过长 // var _ = (function() { /* 完整lodash实现 */ })() // 直接调用lodash方法 return _.chunk(INPUT, 2); $$;
- Stage引用引入:将本地的
lodash.min.js文件上传到Snowflake内部Stage,创建UDF/存储过程时通过IMPORTS参数声明依赖,Snowflake运行时会自动加载文件,不需要把全量源码塞进过程定义
示例代码:
-- 提前通过PUT命令将本地lodash.min.js上传到@UTIL_STAGE/js_lib/路径 CREATE OR REPLACE PROCEDURE array_shuffle_test(input ARRAY) RETURNS ARRAY LANGUAGE JAVASCRIPT IMPORTS = ('@UTIL_STAGE/js_lib/lodash.min.js') AS $$ // 依赖加载完成后全局可直接访问_对象 return _.shuffle(INPUT); $$;
场景2:Snowpark Node.js、Streamlit前端自定义组件中使用
这类场景的开发环境在本地,直接在项目目录执行npm install lodash安装依赖,代码中正常通过import _ from 'lodash'引入使用即可,部署到Snowflake时构建工具会自动把lodash打包进部署包,不需要额外配置。
注意事项
- 不要使用ES Module格式的lodash构建包,Snowflake的JS运行环境对ES Module兼容性差,会出现依赖加载失败的问题,必须用UMD格式的构建产物
- 普通SQL查询、Python/Java/Scala编写的UDF/存储过程无法使用JS版本的lodash,对应数据处理逻辑可以用对应语言的原生工具库实现等价能力
- 不建议引入全量lodash,如果只用到少数几个方法,可以单独引入对应方法的轻量实现,减少代码体积、提升存储过程/UDF的加载速度
内容的提问来源于stack exchange,提问作者Liya
相关产品推荐
相关产品推荐

