数据仓库服务 GAUSSDB(DWS)-GaussDB(DWS) PL/Java语言函数:示例

时间:2024-12-02 17:18:12

示例

使用PL/Java函数时,需要首先将Java方法的实现打包为jar包并且部署到数据库中,然后使用数据库管理员账号创建函数,考虑兼容性问题,请使用1.8.0_322版本的JRE进行编译。

  1. 编译jar包

    Java方法的实现和出包可以借助IDE来实现,以下是一个通过命令行来进行编译和出包的简单的示例,通过这个简单示例可以创建出一个包含单个方法的jar包文件。

    首先,编写一个Example.java文件,在此文件中实现子字符串大写转换的方法,本例中类名为Example,方法名为upperString,内容如下:

    1
    2
    3
    4
    5
    6
    7
    public class Example 
    {
        public static String upperString (String text, int beginIndex, int endIndex) 
        {
            return text.substring(beginIndex, endIndex).toUpperCase();
        }
    }
    

    然后,创建manifest.txt清单文件,文件内容如下:

    1
    2
    3
    4
    5
    6
    Manifest-Version: 1.0
    Main-Class: Example
    Specification-Title: "Example"
    Specification-Version: "1.0"
    Created-By: 1.6.0_35-b10-428-11M3811
    Build-Date: 08/14/2018 10:09 AM
    

    其中,Manifest-Version定义了manifest文件的版本,Main-Class定义了jar文件的入口类,Specification-Title和Specification-Version属于包的扩展属性,Specification-Title定义了扩展规范的标题,Specification-Version定义了扩展规范的版本,Created-By声明了该文件的生成者,Build-Date声明了该文件构建日期。

    最后,编译java文件并打包得到javaudf-example.jar

    1
    2
    javac Example.java
    jar cfm javaudf-example.jar manifest.txt Example.class
    

    jar包的命名规则应符合JDK命名要求,如果含有非法字符,在部署或者使用函数时将出错。

  2. 部署jar

    Jar包首先需要放置到OBS服务器中,放置方法具体请参见 对象存储服务 控制台指南》的上传文件章节。接着创建访问密钥AK/SK,获取访问密钥的具体步骤,请参见创建访问密钥(AK和SK)章节。登录数据库运行gs_extend_library函数,将文件导入到 GaussDB (DWS)中:

    1
    SELECT gs_extend_library('addjar', 'obs://bucket/path/javaudf-example.jar accesskey=access_key_value_to_be_replaced  secretkey=secret_access_key_value_to_be_replaced  region=region_name libraryname=example');
    

    gs_extend_library函数如何使用请参见 管理jar包和文件。函数中的AK/SK值,请用户根据实际获取值替换。region_name请用户根据实际所在的区 域名 称替换。

  3. 使用PL/Java函数

    首先,使用拥有sysadmin权限的数据库用户(例如:dbadmin)登录数据库并创建java_upperstring函数如下:

    1
    2
    3
    4
    CREATE FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER)
        RETURNS VARCHAR
        AS 'Example.upperString'
    LANGUAGE JAVA;
    
    • 函数java_upperstring中定义的数据类型为GaussDB(DWS)的数据类型。该数据类型需要和步骤1中java定义的方法upperString中数据类型一一对应。GaussDB(DWS)与Java数据类型的对应关系,请参见表1
    • AS子句用于指定该函数所调用的Java方法的类名和static方法名,格式为“类名.方法名”。该字段需要和步骤1中java定义的类名和方法名一致。
    • 使用PL/Java函数时,LANGUAGE字段应指定为JAVA。
    • CREATE FUNCTION更多说明,请参见创建函数

    然后,执行java_upperstring函数:

    1
    SELECT java_upperstring('test', 0, 1);
    

    得到预期结果为:

    1
    2
    3
    4
     java_upperstring
    ---------------------
     T
    (1 row)
    

  4. 授权普通用户使用PL/Java函数

    创建普通用户,名称为udf_user。

    1
    CREATE USER udf_user PASSWORD 'password';
    

    授权普通用户udf_user对java_upperstring函数的使用权限。注意,此处需要把函数所在模式和函数的使用权限同时赋予给用户,用户才可以使用此函数。

    1
    2
    GRANT ALL PRIVILEGES ON SCHEMA public TO udf_user;
    GRANT ALL PRIVILEGES ON FUNCTION java_upperstring(VARCHAR, INTEGER, INTEGER) TO udf_user;
    

    以普通用户udf_user登录数据库。

    1
    SET SESSION SESSION AUTHORIZATION udf_user PASSWORD 'password';
    

    执行java_upperstring函数:

    1
    SELECT public.java_upperstring('test', 0, 1);
    

    得到预期结果为:

    1
    2
    3
    4
     java_upperstring
    ---------------------
     T
    (1 row)
    

  5. 删除函数。

    如果不再使用该函数可以进行删除:
    1
    DROP FUNCTION java_upperstring;
    

  6. 卸载jar

    使用gs_extend_library函数卸载jar包:

    1
    SELECT gs_extend_library('rmjar', 'libraryname=example');
    

support.huaweicloud.com/devg-830-dws/dws_04_0509.html