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

PL/HQL主要是通过命令行工具来执行一个SQL查询语句或者是一个SQL脚本。

进入hplsql-0.3.11,执行./ hplsql即可显示命令行的用法:

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql
  2. usage: hplsql
  3. -d,--define Variable subsitution e.g. -d A=B or --define A=B
  4. -e HPL/SQL from command line
  5. -f HPL/SQL from a file
  6. -H,--help Print help information
  7. --hiveconf Value for given property
  8. --hivevar Variable subsitution e.g. --hivevar A=B
  9. -main Entry point (procedure or function name)
  10. -offline,--offline Offline mode - skip SQL execution
  11. -trace,--trace Print debug information
  12. -version,--version Print HPL/SQL version

1.1 -d,–define

-d,–define 选项可以指定变量名及变量值,它和–hiveconf 以及–hivevar 的效果等价。

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" -d a=Hello -d b=lxw1234.com
  2. Hello, lxw1234.com
  3. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" --hiveconf a=Hello --hiveconf b=lxw1234.com
  4. Hello, lxw1234.com
  5. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT a || ', ' || b" --hivevar a=Hello --hivevar b=lxw1234.com
  6. Hello, lxw1234.com

1.2 -e

同hive –e,用于执行HQL语句;

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "SELECT * FROM liuxiaowen.dual"
  2. Open connection: jdbc:hive2://172.16.212.17:10000 (109 ms)
  3. Starting query
  4. Query executed successfully (182 ms)
  5. X
  6. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT 'Hello, lxw1234.com'"
  7. Hello, lxw1234.com

1.3 –f

同hive –f,执行一个文件中保存的HQL语句。

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ cat lxw1234.sql
  2. PRINT 'Hello, lxw1234.com';
  3. SELECT * FROM liuxiaowen.dual;
  4. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql
  5. Hello, lxw1234.com
  6. Open connection: jdbc:hive2://172.16.212.17:10000 (109 ms)
  7. Starting query
  8. Query executed successfully (165 ms)
  9. X

1.4 -trace,–trace

打印debug信息。

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -e "PRINT 'Hello, lxw1234.com'" -trace
  2. Configuration file: file:/home/liuxiaowen/hplsql-0.3.11/hplsql-site.xml
  3. Parser tree: (program (block (stmt (print_stmt PRINT (expr (expr_atom (string 'Hello, lxw1234.com')))))))
  4. Ln:1 PRINT
  5. Hello, lxw1234.com

1.5 –main

-main

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

比如:lxw1234.sql文件内容如下:

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ cat lxw1234.sql
  2. CREATE PROCEDURE set_message(IN arg STRING)
  3. BEGIN
  4. SET result = 'Hello, lxw的大数据田地!';
  5. PRINT result || ' ' || arg;
  6. END;
  7.  
  8. PRINT 'Hello, lxw1234.com! at beginning .. ';
  9. CALL set_message(' by CALL ..');
  10. SELECT * FROM liuxiaowen.dual;
  11.  

1.创建存储过程set_message;

2.打印’Hello, lxw1234.com! at beginning .. ‘;

3.调用存储过程,并传入参数;

4.查询Hive表liuxiaowen.dual;

看看使用-main选项和不使用的执行结果:

 
  1. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql
  2. Hello, lxw1234.com! at beginning ..
  3. Hello, lxw的大数据田地! by CALL ..
  4. Open connection: jdbc:hive2://172.16.212.17:10000 (125 ms)
  5. Starting query
  6. Query executed successfully (166 ms)
  7. X
  8. [liuxiaowen@dev hplsql-0.3.11]$ ./hplsql -f lxw1234.sql -main set_message
  9. Hello, lxw的大数据田地!
  10.  

如果不指定-main选项,那么则将lxw1234.sql中的语句从头到尾执行完。
如果指定了-main选项,则会执行指定存储过程内的语句。

 

-H,–help为打印帮助信息。-version,–version 打印HPL/SQL版本。

-offline,–offline选项的功能还未搞明白。

转载于:https://my.oschina.net/sniperLi/blog/707896

你可能感兴趣的:(Hive存储过程HQL/SQL(一)–hplsql命令行)