关键字:Hive存储过程、HQL/SQL、hplsql命令行、PL/HQL Command Line
PL/HQL主要是通过命令行工具来执行一个SQL查询语句或者是一个SQL脚本。
进入hplsql-0.3.11,执行./ hplsql即可显示命令行的用法:
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql
usage: hplsql
-d,--define Variable subsitution e.g. -d A=B or --define A=B
-e HPL/SQL from command line
-f HPL/SQL from a file
-H,--help Print help information
--hiveconf Value for given property
--hivevar Variable subsitution e.g. --hivevar A=B
-main Entry point (procedure or function name)
-offline,--offline Offline mode - skip SQL execution
-trace,--trace Print debug information
-version,--version Print HPL/SQL version
1.1 -d,–define
-d,–define 选项可以指定变量名及变量值,它和–hiveconf 以及–hivevar 的效果等价。
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" -d a=Hello -d b=lxw1234.com
Hello, lxw1234.com
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" --hiveconf a=Hello --hiveconf b=lxw1234.com
Hello, lxw1234.com
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" --hivevar a=Hello --hivevar b=lxw1234.com
Hello, lxw1234.com
1.2 -e
同hive –e,用于执行HQL语句;
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "SELECT * FROM liuxiaowen.dual"
Open connection: jdbc:hive2://172.16.212.17:10000 (109 ms)
Starting query
Query executed successfully (182 ms)
X
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT 'Hello, lxw1234.com'"
Hello, lxw1234.com
1.3 –f
同hive –f,执行一个文件中保存的HQL语句。
[liuxiaowen@dev hplsql-0.3.11]$ cat lxw1234.sql
PRINT 'Hello, lxw1234.com';
SELECT * FROM liuxiaowen.dual;
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql
Hello, lxw1234.com
Open connection: jdbc:hive2://172.16.212.17:10000 (109 ms)
Starting query
Query executed successfully (165 ms)
X
1.4 -trace,–trace
打印debug信息。
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT 'Hello, lxw1234.com'" -trace
Configuration file: file:/home/liuxiaowen/hplsql-0.3.11/hplsql-site.xml
Parser tree: (program (block (stmt (print_stmt PRINT (expr (expr_atom (string 'Hello, lxw1234.com')))))))
Ln:1 PRINT
Hello, lxw1234.com
1.5 –main
-main
只执行指定函数或存储过程内的语句。
比如:lxw1234.sql文件内容如下:
[liuxiaowen@dev hplsql-0.3.11]$ cat lxw1234.sql
CREATE PROCEDURE set_message(IN arg STRING)
BEGIN
SET result = 'Hello, lxw的大数据田地!';
PRINT result || ' ' || arg;
END;
PRINT 'Hello, lxw1234.com! at beginning .. ';
CALL set_message(' by CALL ..');
SELECT * FROM liuxiaowen.dual;
1.创建存储过程set_message;
2.打印’Hello, lxw1234.com! at beginning .. ‘;
3.调用存储过程,并传入参数;
4.查询Hive表liuxiaowen.dual;
看看使用-main选项和不使用的执行结果:
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql
Hello, lxw1234.com! at beginning ..
Hello, lxw的大数据田地! by CALL ..
Open connection: jdbc:hive2://172.16.212.17:10000 (125 ms)
Starting query
Query executed successfully (166 ms)
X
[liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql -main set_message
Hello, lxw的大数据田地!
如果不指定-main选项,那么则将lxw1234.sql中的语句从头到尾执行完。
如果指定了-main选项,则会执行指定存储过程内的语句。
-H,–help为打印帮助信息。-version,–version 打印HPL/SQL版本。
-offline,–offline选项的功能还未搞明白。
更多关于Hive中使用存储过程的文章,阅读《Hive存储过程系列文章》。
您可以关注 lxw的大数据田地 ,或者 加入邮件列表 ,随时接收博客更新的通知邮件。
如果觉得本博客对您有帮助,请 赞助作者 。