BigQuery JavaScript UDF:解决h3-js库的import语句模块外使用错误
解决BigQuery中H3 JavaScript库的「Cannot use import statement outside module」错误
问题原因
你使用的h3core.js是ES模块格式,而BigQuery的JavaScript运行环境不支持ES模块的import语法,导致语法错误。
解决方案
方法一:使用预编译的UMD版本H3库
- 获取H3-JS的UMD预编译文件:从H3-JS的官方发布包中找到
h3-js.umd.js(或类似命名的UMD/IIFE格式文件),不要直接使用源码库lib目录下的ES模块文件。 - 将该UMD文件上传到你的GCP存储桶(替换原有的
h3core.js)。 - 修改BigQuery函数:UMD版本会将H3实例挂载到全局对象,因此调用时需要使用
H3.xxx的形式,示例查询修改为:
CREATE TEMP FUNCTION latLngToCell(lat FLOAT64, lng FLOAT64, res INT64) RETURNS STRING LANGUAGE js OPTIONS (library = 'gs://gcbucket/h3-js.umd.js') AS r""" return H3.latLngToCell(lat, lng, res); """; SELECT latLngToCell(37.38475, -122.34857, 7)
方法二:自行打包H3库为兼容格式
如果需要自定义打包:
- 下载H3-JS源码,使用Rollup、Webpack等构建工具,将其打包为UMD或IIFE格式,确保所有依赖被整合,并且暴露全局
H3对象。 - 将打包后的文件上传到GCS存储桶,再按上述方式调用。
注意事项
- 确保GCP存储桶的权限配置正确,BigQuery服务账号具备读取该文件的权限(可临时给文件添加
allUsers读取权限测试,后续再收紧权限)。 - 确认使用的H3版本包含你需要的
latLngToCell函数。
内容的提问来源于stack exchange,提问作者Chad Harrison
相关产品推荐
相关产品推荐

