OceanBase社区版4.2.1.9可以支持自定义java写的udf函数吗?

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】OceanBase没有找到关于新增自定义udf函数的帖子,自己有尝试过,但无法创建成功,想请问一下各位大佬是否支持呀?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您的描述,您正在尝试在 OceanBase 社区版 4.2.1.9 中创建自定义的 Java 编写的 UDF 函数,但遇到了问题。首先,OceanBase 数据库确实支持用户定义的函数(UDF),但是具体的实现方式和支持的语言可能有所不同。对于 Java 编写的 UDF 函数的支持情况,需要进一步确认。

为了更好地帮助您解决问题,建议先使用 obdiag 工具来收集相关日志,这将有助于我们了解在尝试创建 UDF 函数时发生了什么问题。您可以按照以下步骤操作:

日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

请将上述命令中的 -h127.0.0.1 -P2881 -utest@test -p****** -Dtest 替换为您实际的数据库连接信息,并将 trace_id 替换为实际的跟踪 ID(如果您有)。执行完命令后,请将生成的日志文件提供给我们,以便进一步分析。

另外,为了确定具体的问题,在此需要您提供一些信息:

  1. 您是否查阅过官方文档或社区资料,确认 OceanBase 4.2.1.9 版本支持 Java 编写的 UDF 函数?
  2. 您能否提供尝试创建 UDF 函数的具体 SQL 语句?
  3. 您在尝试创建 UDF 函数时收到的确切错误信息是什么?
  4. 您的操作是在 OCP、OBD 环境下还是手动部署的环境中进行的?

感谢您的配合,我们将尽快为您提供帮助。

详情请参考:

  1. DBMS_UDR 概述
  2. 0001 ~ 3999
  3. 用户自定义变量
  4. 700.7000-7999-of-mysql-mode.md

附上敏捷诊断工具 obdiag 使用帮助链接


1、查阅了官方文档,但官方文档并未明确表示是否可以安装,并且也没有任何的教程资料。
2、create function xg_encrypt returns STRING soname ‘xgplugin_mysql8_V41.so’;这个是我创建udf函数的sql语句是在oceanbase mysql模式的命令行执行的。
3、报错信息:ERROR 1235 (0A000): creating loadable function not supported。
4、是在自己手动部署的社区版oceanbase进行的操作。
5、我是在/opt/observer/lib/下放了我自己的udf函数,但无法正常加载。

根据您提供的信息和错误信息“ERROR 1235 (0A000): creating loadable function not supported”,可以明确的是,OceanBase 社区版 4.2.1.9 当前并不支持创建可加载的函数(loadable functions),这类函数通常是指通过共享库(如 .so 文件)实现的用户定义函数(UDFs)。这一限制意味着您无法像在某些版本的 MySQL 中那样,通过 CREATE FUNCTION ... RETURNS STRING SONAME 'your_library.so' 的方式来添加自定义的 UDF。

解释

  • 错误信息ERROR 1235 (0A000): creating loadable function not supported 明确指出了 OceanBase 不支持创建这种类型的 UDF。
  • 官方文档:正如您提到的,官方文档中并没有提及如何在 OceanBase 中创建或使用 Java 编写的 UDF 函数,这进一步证实了当前版本的 OceanBase 不支持此类功能。

建议

  1. 使用内置函数:如果您的需求可以通过 OceanBase 内置的函数实现,建议优先使用这些内置函数。
  2. PL/SQL 函数:如果您需要更复杂的逻辑处理,可以考虑使用 PL/SQL 编写存储过程或函数。OceanBase 支持 PL/SQL,可以满足大多数复杂的业务需求。
  3. 外部处理:如果确实需要使用 Java 或其他语言编写复杂的逻辑,可以考虑将这部分逻辑放在应用程序中,而不是在数据库中实现。

示例

如果您需要一个简单的加密函数,可以考虑使用 OceanBase 内置的加密函数,例如 AES_ENCRYPTAES_DECRYPT

-- 使用内置的 AES 加密函数
SELECT AES_ENCRYPT('your_data', 'your_key') AS encrypted_data;

总结

目前,OceanBase 社区版 4.2.1.9 不支持通过共享库加载自定义的 UDF 函数。建议您使用内置函数或 PL/SQL 来实现所需的功能。如果您的需求非常复杂,可以考虑将这部分逻辑放在应用程序中。

希望这些信息对您有所帮助。如果您有其他问题或需要进一步的帮助,请随时联系 OceanBase 的技术支持团队。

详情请参考:

  1. 使用命令行部署单副本 OceanBase 集群

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

当前OceanBase(4.3以及以前)不支持UDF,包括企业版。

那想请问一下,4.3以后的社区版是否支持自定义UDF?有没有对应的资料?

这个目前不知