好程式設計師大資料培訓分享之hive儲存過程

好程式設計師發表於2020-05-26

  好程式設計師大資料培訓分享之hive 儲存過程,1 hive 儲存過程簡介1.x 版本的 hive 中沒有提供類似儲存過程的功能,使用 Hive 做資料開發時候,一般是將一段一段的 HQL 語句封裝在 Shell 或者其他指令碼中,然後以命令列的方式呼叫,完成一個業務或者一張報表的統計分析。好訊息是,現在已經有了 Hive 儲存過程的解決方案( HPL/SQL –Procedural SQL on hadoop ),並且在未來的 Hive 的版本( 2.0 )中,會將該模組整合進來。該解決方案不僅支援 Hive ,還支援在 SparkSQL ,其他 NoSQL ,甚至是 RDBMS 中使用類似於 Oracle PL/SQL 的功能,這將極大的方便資料開發者的工作, Hive 中很多之前比較難實現的功能,現在可以很方便的實現,比如自定義變數、基於一個結果集的遊標、迴圈等等。

2、hplsql安裝和儲存過程案例

下載:

官網下載地址:

0.3.31版本下載地址:s/hplsql-0.3.31.tar.gz

安裝hplsql:

[root@hadoop01 home]# tar -zxvf /home/hplsql-0.3.31.tar.gz -C /usr/local/

 

 

[root@hadoop01 home]# cd /usr/local/hplsql-0.3.31/

配置hplsql:

vi ./hplsql

內容如下:

 

#!/bin/bash

 

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/lib/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_CONF_DIR/"

                                           

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/lib/*"

                                                        

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/hdfs/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/hdfs/lib/*"

                                                        

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/yarn/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/yarn/lib/*"

 

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/lib/*"

                                                        

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*"

export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/conf"

 

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

 

SCRIPTPATH=${0%/*}

 

java -cp $SCRIPTPATH:$HADOOP_CLASSPATH:$SCRIPTPATH/hplsql-0.3.31.jar:$SCRIPTPATH/antlr-runtime-4.5.jar $HADOOP_OPTS org.apache.hive.hplsql.Hplsql "$@"

 

配置hive2的服務:

vi ./conf/hive-site.xml

追加內容如下:

 

  <property>

    <name>hive.server2.thrift.bind.host</name>

    <value>hadoop01</value>

  </property>

  <property>

    <name>hive.server2.thrift.port</name>

    <value>10000</value>

  </property>

  

重啟hiveserver2:

nohup hive --service hiveserver2 > hiveserver2.log 2>&1 &

配置HPL/SQL與Hive的連線:

vi ./hplsql-site.xml

連結

使用hplsql -e執行命令:

[root@hadoop01 hplsql-0.3.31]# ./hplsql -e "CURRENT_DATE + 1"

2019-09-18

 

 

[root@hadoop01 hplsql-0.3.31]# ./hplsql -e "for i in 1 .. 10 loop print i;end loop;"

 

hplsql -f執行指令碼:

測試表:

 

hive>select * from qf24.u5;

OK

7       yy

3       cc

2       bb

 

建立指令碼hp.sql

create function hello(text string)

returnS string

BEGIN

RETRUEN 'Hello,' || text || '!';

END;

 

FOR item IN(

SELECT id,name FROM qf24.u5 limit 3

)

loop

        println item.id || '|' || item.name || '|' || hello(item.name);

end loop;

 

 

測試:

[root@hadoop01 hplsql-0.3.31]# ./hplsql -f /home/hivedata/hp.sql

 

7|yy|Hello,yy!

3|cc|Hello,cc!

2|bb|Hello,bb!

建立儲存過程的格式:

use database;

create procedure

begin

......

end;

呼叫儲存過程:

include path/sp name

call sp name;

案例:

建立儲存過程:

use qf24;

create procedure select_u5()

begin

select * from qf24.u5;

end;

 

呼叫:

include 檔案路徑   (在程式碼檔案中引入)

 

執行執行檔案:

[root@hadoop01 hplsql-0.3.31]# ./hplsql -f /home/hivedata/ps.sql

 

呼叫指定儲存過程或者方法:

[root@hadoop01 hplsql-0.3.31]# ./hplsql -f /home/hivedata/ps.sql -main select_u5


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2694321/,如需轉載,請註明出處,否則將追究法律責任。

相關文章