macOS Monterey下ZetaSQL BQ Library无法使用求助
问题:ZetaSQL在macOS Monterey下启动失败(Unsupported os.arch)
我有一个使用BigQuery Parser ZetaSQL的SpringBoot应用,pom依赖配置如下:
<dependency> <groupId>com.google.zetasql</groupId> <artifactId>zetasql-jni-channel</artifactId> <version>2022.08.1</version> </dependency>
测试类中提取表名的代码:
public static void main(String[] args) { String Querystr = "SELECT * FROM `test.test.test` LIMIT 1000;"; List<List<String>> tables = Analyzer.extractTableNamesFromStatement(Querystr); }
运行时出现如下错误:
com.google.zetasql.ClientChannelProvider: Provider com.google.zetasql.JniChannelProvider could not be instantiated at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:582) at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:804) at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:722) at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395) at com.google.zetasql.ClientChannelProvider.loadChannel(ClientChannelProvider.java:31) at com.google.zetasql.Client.getStub(Client.java:29) at com.google.zetasql.LanguageOptions.getDefaultFeatures(LanguageOptions.java:58) at com.google.zetasql.LanguageOptions.<init>(LanguageOptions.java:66) at com.google.zetasql.AnalyzerOptions.<init>(AnalyzerOptions.java:56) at com.google.zetasql.Analyzer.extractTableNamesFromStatement(Analyzer.java:162) at com.pexar.sigma.datasources.JdbcDatasourceApplication.main(JdbcDatasourceApplication.java:23) Caused by: java.lang.ExceptionInInitializerError at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:780) ... 9 more Caused by: java.lang.RuntimeException: Unsupported os.arch at com.google.zetasql.JniChannelProvider.getLibraryPath(JniChannelProvider.java:48) at com.google.zetasql.JniChannelProvider.<clinit>(JniChannelProvider.java:66) ... 14 more
使用系统:macOS Monterey
解决方案
这个错误的核心原因是当前使用的ZetaSQL版本(2022.08.1)对Apple Silicon架构兼容性不足,或JVM识别的系统架构与ZetaSQL预期不匹配,可按以下方式解决:
升级ZetaSQL版本
新版本ZetaSQL已修复Apple Silicon支持问题,直接将依赖版本升级到最新稳定版即可,示例:<dependency> <groupId>com.google.zetasql</groupId> <artifactId>zetasql-jni-channel</artifactId> <version>2024.04.1</version> </dependency>强制JVM以x86_64架构运行
若暂时无法升级版本,通过Rosetta 2强制JVM切换到x86_64模式:- IDEA环境:进入Run/Debug Configurations,在VM options中添加参数:
-d64 -Dos.arch=x86_64 - 命令行运行:执行
java -d64 -Dos.arch=x86_64 -jar 你的应用jar包名.jar
- IDEA环境:进入Run/Debug Configurations,在VM options中添加参数:
切换到x86_64版本的JDK
终端执行java -version查看当前JVM架构,若显示aarch64,说明是Apple Silicon版本JDK,换成x86_64版本的JDK也能解决兼容性问题。
内容的提问来源于stack exchange,提问作者Nidhi Shah
相关产品推荐
相关产品推荐

