尝试在 java 中创建 vertica udx 时出错
Error while trying to create vertica udx in java
我正在尝试创建 Vertica UDx
JAR 是通过
生成的
javac -classpath /opt/vertica/bin/VerticaSDK.jar BuildInfo.java TestFactory.java Test.java -d output/
jar -cvf TestLib.jar BuildInfo.class output/*.class
通过
加载到数据库
CREATE LIBRARY TestFunctions AS '/home/dbadmin/test/TestLib.jar' LANGUAGE 'JAVA';
获取错误
SQL Error [2175] [55000]: [Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node v_test_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
[Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node v_test_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
com.vertica.util.ServerException: [Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node vtest_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
本地和远程服务器的 JDK 版本相同 1.8.0_131
垂直版本 8.0.1
JAR tree
├── com
│ └── vertica
│ ├── JavaLibs
│ │ ├── Test.class
│ │ └── TestFactory.class
│ └── sdk
│ └── BuildInfo.class
VERTICA_BUILD_ID_Brand_Version = "v8.0.1-5";
通过在服务器上编译解决了这个问题
为了让这个答案更有信息量:
$ ls
TestFactory.java Test.java
# compile all java files with VerticaSDK & BuildInfo
$ javac -classpath /opt/vertica/bin/VerticaSDK.jar /opt/vertica/sdk/BuildInfo.java *.java -d .
# show compiled files
$ find . -type f
./com/vertica/sdk/BuildInfo.class
./com/vertica/JavaLibs/TestFactory.class
./com/vertica/JavaLibs/Test.class
./TestFactory.java
./Test.java
# combine compiled classes into single jar
$ jar -cvf TestLib.jar com/vertica/sdk/BuildInfo.class com/vertica/JavaLibs/*.class
added manifest
adding: com/vertica/sdk/BuildInfo.class(in = 1315) (out= 749)(deflated 43%)
adding: com/vertica/JavaLibs/Test.class(in = 1238) (out= 717)(deflated 42%)
adding: com/vertica/JavaLibs/TestFactory.class(in = 916) (out= 435)(deflated 52%)
$ ls
com TestFactory.java Test.java TestLib.jar
加载并使用函数
CREATE LIBRARY TestFunctions AS '/path/TestLib.jar' LANGUAGE 'JAVA';
CREATE ANALYTIC FUNCTION a_test AS LANGUAGE 'java' NAME 'com.vertica.JavaLibs.TestFactory' LIBRARY TestFunctions;
SELECT a_test(col, args) OVER (ORDER BY col2) FROM ...
我正在尝试创建 Vertica UDx
JAR 是通过
生成的javac -classpath /opt/vertica/bin/VerticaSDK.jar BuildInfo.java TestFactory.java Test.java -d output/
jar -cvf TestLib.jar BuildInfo.class output/*.class
通过
加载到数据库CREATE LIBRARY TestFunctions AS '/home/dbadmin/test/TestLib.jar' LANGUAGE 'JAVA';
获取错误
SQL Error [2175] [55000]: [Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node v_test_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
[Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node v_test_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
com.vertica.util.ServerException: [Vertica][VJDBC](2175) ROLLBACK: An error occurred when loading library file on node vtest_node0002, message: Failure in UDx RPC call InvokeCheckLibrary(): Error in User Defined Object [], error code: 0 Error happened in loading jar file, the user library might be built with a new version of JDK
本地和远程服务器的 JDK 版本相同 1.8.0_131
垂直版本 8.0.1
JAR tree
├── com
│ └── vertica
│ ├── JavaLibs
│ │ ├── Test.class
│ │ └── TestFactory.class
│ └── sdk
│ └── BuildInfo.class
VERTICA_BUILD_ID_Brand_Version = "v8.0.1-5";
通过在服务器上编译解决了这个问题
为了让这个答案更有信息量:
$ ls
TestFactory.java Test.java
# compile all java files with VerticaSDK & BuildInfo
$ javac -classpath /opt/vertica/bin/VerticaSDK.jar /opt/vertica/sdk/BuildInfo.java *.java -d .
# show compiled files
$ find . -type f
./com/vertica/sdk/BuildInfo.class ./com/vertica/JavaLibs/TestFactory.class ./com/vertica/JavaLibs/Test.class ./TestFactory.java ./Test.java
# combine compiled classes into single jar
$ jar -cvf TestLib.jar com/vertica/sdk/BuildInfo.class com/vertica/JavaLibs/*.class
added manifest adding: com/vertica/sdk/BuildInfo.class(in = 1315) (out= 749)(deflated 43%) adding: com/vertica/JavaLibs/Test.class(in = 1238) (out= 717)(deflated 42%) adding: com/vertica/JavaLibs/TestFactory.class(in = 916) (out= 435)(deflated 52%)
$ ls
com TestFactory.java Test.java TestLib.jar
加载并使用函数
CREATE LIBRARY TestFunctions AS '/path/TestLib.jar' LANGUAGE 'JAVA';
CREATE ANALYTIC FUNCTION a_test AS LANGUAGE 'java' NAME 'com.vertica.JavaLibs.TestFactory' LIBRARY TestFunctions;
SELECT a_test(col, args) OVER (ORDER BY col2) FROM ...