Gbase 8a中udf使用和常见问题

通过udf和udaf机制,数据库用户能够使用c/c++语言自行定义开发函数,编译C文件为共享库并部署后,就可以在集群中创建udf和udaf函数并调用,如下:

1在安装GBase8a的服务器上编译C或C++程序的共享库,如:

gcc -fPIC func_toupper.c -shared -o func_toupper.so

2 将编译好的共享库拷贝到GBase8a安装路径的lib/gbase/plusin下

3.创建白定义函数,如:

gbase> create function func_toupper returns string soname 'func_toupper.so’;

4调用函数,如:

gbase> select func_toupper('abed’) from dual;

实际操作中可能会遇到的问题和解決方法如下:

1.编译时因缺少头文件报错,如:

$ gcc -fPIC arg_return_testl.c-shared -o arg_return_testl.so

arg_return_test1.c:127:26:致命错误:gbase_global.h:没有那个文件或目录

#include <gbase_global.h>

解決方法:将头文件gbase_global.h拷贝后,编译命令后添加”-l 头文件所在目录”如:

$ gcc -fPIC arg_return_testl.c -shared -o arg_return_testl.so -I include_

2,报錯Can't find symbol..in library

gbase create aggregate function arg_return_test1 returns real soname ‘arg_return_test1.so

ERROR 1704 (HY000): gluster function error: 10.10.11.50:Can't find symboI 'arg retum test1' in library.

udaf函数名、so文件名、so文件中的主函数名需要保持一致,当so文件中函数名与so文

名不统一,或创建的udaf函数名与so文件名不统一时,可能会出现以上报错。

解決方法:如果是so文件中函数名与so文件名不统一,需要修改c/c++文件中主函数名,使用重新编译后的so文件。

3.报结file...not exists

gbase> create function func_toupper_returns real soname 'func_toupper.so";

ERROR 1704 (HY000): gcluster function error: file /opt/10.10.11.50/gluster/ server/lib/gbase/plugin/func_toupper.so not exists

创建udf/udaf时需要将共享.so放在plugin目录下,查看参数show variables like ‘plugin_dir’可以得到该目录,单机层和集群层中都要有.so文件,否则报错。只需要拷到执行节点,其他节点自动同步库文件。

4. 如果更新了共享库.so文件,需要删除原来的udf/udaf函数之后重新创建。否则查询中使用的是原来的函数。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值