微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

Hive存储过程HQL/SQL(一)–hplsql命令行

Hive lxw1234@qq.com 36263℃ 5评论

关键字: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 <key=value>          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 <property=value>   Value for given property
    --hivevar <key=value>         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 <key=value> 选项可以指定变量名及变量值,它和–hiveconf <property=value>以及–hivevar <key=value>的效果等价。

[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 <quoted-query-string>

同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 <filename>

同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 <procname>

-main <procname>

只执行指定函数或存储过程内的语句。

比如: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的大数据田地 ,或者 加入邮件列表 ,随时接收博客更新的通知邮件。

 

 

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » Hive存储过程HQL/SQL(一)–hplsql命令行

喜欢 (20)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. 你好啊,现在的hive2.0,可以再hive/beeline命令下执行plsql语句吗?我试了一下,解析不了,不知道是不是我配置的不对。请指教,谢谢了
    Aaron2016-06-28 14:20 回复
    • 只能用$HIVE_HOME/bin/hplsql 执行hplsql语句。
      lxw1234@qq.com2016-06-29 08:03 回复
  2. offline参数意思是只解析sql,不执行
    gsbeegnnord2016-11-17 22:13 回复
  3. 你好,我想问下,现在hplsql 0.3.31 是否支持 create table as 操作,我看官方里写的是支持,但实际操作时过不去,不知道你有没有试过?
    bdp_play2016-11-24 17:36 回复
  4. 您好,使用./hplsql -e "SELECT * FROM default.people" 的时候,报错: FAILED: SemanticException Line 0:-1 Table not found 'people' 。是什么原因呢?是metastore哪里配置的不行吗。谢谢!
    rechen2018-04-13 16:04 回复