前面的文章《在Hive中实现存储过程–HQL/SQL》中介绍了如何使用HPL/SQL在Hive中实现存储过程,执行类似Oracle PL/SQL的功能。
一般的业务场景是数据开发人员开发好一个存储过程,然后周期性的调用,传入不同的参数即可。
本文继续介绍如何在Hive中利用HPL/SQL创建和调用存储过程。
使用下面的语句创建一个存储过程set_message,它接受一个STRING类型的IN参数,输出一个STRING类型的OUT参数。
- CREATE PROCEDURE set_message(IN name STRING, OUT result STRING)
- BEGIN
- SET result = 'Hello, ' || name || '!';
- END;
Oracle以及其他关系型数据库会将创建的存储过程保存到自身的元数据中,但HQL/SQL中并不是,而是保存在本地文件中。
将上面的语句保存到一个本地文件中,比如:/home/lxw1234/set_message.sql
在以后需要调用该存储过程的脚本的第一行,使用INCLUDE <procedure_file_name>引入存储过程的脚本文件/home/lxw1234/set_message.sql
注意:行尾没有分号。
比如,2.sql文件中的内容如下:
- INCLUDE /home/lxw1234/set_message.sql
- DECLARE str STRING;
- CALL set_message('lxw1234.com', str);
- PRINT str;
使用./hplsql -f 2.sql执行:
- [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f 2.sql
- Open connection: jdbc:hive2://172.16.212.17:10000 (110 ms)
- Starting query
- Query executed successfully (48.90 sec)
- 1
- Hello, lxw1234.com!
如果在2.sql文件中没有使用INCLUDE引入存储过程文件,则返回结果为null。
HPL/SQL自定义函数的创建和调用方法同存储过程,这里不再累赘。