GreenPlum 使用java自定义函数

greenplum 是支持java 开发自定函数的,方法如下,请参考.

1.安装jdk,并配置好环境变量。注:每个节点都需要。

2.安装jdk后,执行如下命令:root用户

# echo "$JAVA_HOME/jre/lib/amd64/server" > 
/etc/ld.so.conf.d/libjdk-1.6.0_21.conf
# /sbin/ldconfig

3.安装PL/Java 支持,到官网下载 :https://network.pivotal.io/products/pivotal-gpdb/#/releases/5226 ,Language Extensions下 找到自己对应系统的文件下载即可

4.下载完成之后,执行如下命令进行安装

gppkg -i pljava-ossv1.4.0_pv1.3_gpdb4.3orca-rhel5-x86_64.gppkg

等待安装完成,完成后重新启动数据库:

$ gpstop -r

5.导入PL/java 脚本

$ psql -d mydb
  -f $GPHOME/share/postgresql/pljava/install.sql
CREATE FUNCTION
CREATE FUNCTION
CREATE LANGUAGE
CREATE LANGUAGE

6.编写java程序

package gpdb.jar.ultrapower.com.cn;

public class HelloWorld {
	public static String sayHello(String name){
		return name + ",Hello!";
	}
	public static String sayHello_1(){
		return "Hello,Hello!";
	}
}

7.将程序打成jar包,并上传至服务器.本次测试使用 SayHello.jar 名

8.将SayHello.jar复至到各集群中节点上,包含主节点。

$ gpscp -f gphosts_file SayHello.jar =:$GPHOME/lib/postgresql/java/

9.配置环境变量,多个jar请用:号分割,这个需要使用 gpstop -u 让其生效.

$ gpconfig -c pljava_classpath -v \'examples.jar:SayHello.jar\' --masteronly
 让配置生效,,这步很重要啊,要不死都不知道怎么死的.
gpstop -u 

10.配置环境变量,使其生效.这个和 9 有啥区别我还不知道.在当前session下生效.

SELECT set_config('pljava_classpath', 'HelloWorld.jar', false);

11.编写greenplum函数 注意一下包名及方法名

create function say_hello(name text)
RETURNS TEXT
as 'gpdb.jar.ultrapower.com.cn.HelloWorld.sayHello'
LANGUAGE java;

 12.使用如下命令进行测试:

mydb=# select say_hello('suncf');
  say_hello   
--------------
 suncf,Hello!
(1 row)

13.完成 

附::类型对照关系

Table 1. PL/Java data type mapping

PostgreSQL Java
bool boolean
char byte
int2 short
int4 int
int8 long
varchar java.lang.String
text java.lang.String
bytea byte[ ]
date java.sql.Date
time java.sql.Time (stored value treated as local time)
timetz java.sql.Time
timestamp java.sql.Timestamp (stored value treated as local time)
timestampz java.sql.Timestamp
complex java.sql.ResultSet
setof complex java.sql.ResultSet

转载于:https://my.oschina.net/suncf/blog/890798

你可能感兴趣的:(GreenPlum 使用java自定义函数)