1. 程式人生 > >Hive儲存過程HQL/SQL(二)– 在Hive儲存過程中讀寫MySQL表

Hive儲存過程HQL/SQL(二)– 在Hive儲存過程中讀寫MySQL表

關鍵字:Hive儲存過程、PL/HQL、HQL/SQL、MySQL

通過PL/HQL可以在一個指令碼中同時訪問多個數據庫系統。在實際業務場景中,經常會有需要將Hive和RDBMS中的資料結合分析,比如:

  • 往RDBMS中寫入Hive分析的審計資訊;
  • 從RDBMS中獲取一些維表的資料,和Hive表進行關聯;
  • 從RDBMS中讀取一些配置資料;
  • 往RDBMS中儲存Hive的分析結果;

在PL/HQL中提供了這個功能,它允許在一個PL/HQL指令碼中訪問多個數據庫系統。下面以一個簡單需求為例:

在PL/HQL指令碼中執行Hive分析任務,並將本次執行的審計資訊記錄到MySQL,其中,審計資訊包括Hive分析任務的開始時間,結束時間和最終完成狀態。

MySQL中建立審計資訊表

  1. CREATE TABLE hive_task_log (
  2. seq INT PRIMARY KEY auto_increment,
  3. start_time VARCHAR(20),
  4. end_time VARCHAR(20),
  5. return_code INT
  6. );

配置hplsql-site.xml

在hplsql-site.xml中的主要配置如下:

<property>

<name>hplsql.conn.default</name>

<value>hive2conn</value>

<description>The default connection profile</description>

</property>

<property>

<name>hplsql.conn.hive2conn</name>

<value>org.apache.hive.jdbc.HiveDriver;jdbc:hive2://172.16.212.17:10000/liuxiaowen;liuxiaowen;</value>

<description>HiveServer2 JDBC connection</description>

</property>

<property>

<name>hplsql.conn.mysql.conn

</name>

<value>com.mysql.jdbc.Driver;jdbc:mysql://172.16.212.102:3306/test;test;test1234</value>

<description>MySQL connection</description>

</property>

其中,

引數hplsql.conn.default表示預設的聯結器為hive2conn;

引數hplsql.conn.hive2conn表示hive2conn的具體連結串;

引數hplsql.conn.mysql.conn表示mysql的具體連結串。

特別注意:原始的hplsql-site.xml給出的是hplsql.conn.mysqlconn,經過測試有bug,這裡的連結名稱中必須包含”mysql.”,才會被正確解析成MYSQL的連結型別,否則,全被解析成HIVE,其他非Hive的資料庫連結名稱也是如此。

開發PL/HQL指令碼

PL/HQL指令碼1.sql中的內容如下:

  1. MAP OBJECT log TO test.hive_task_log AT mysql.conn;
  2. DECLARE
  3. start_time VARCHAR(20);
  4. end_time VARCHAR(20);
  5. return_code INT;
  6. BEGIN
  7. start_time = SYSDATE ||'';
  8. SELECT COUNT(1) FROM liuxiaowen.lxw1234;
  9. return_code = SQLCODE;
  10. end_time = SYSDATE ||'';
  11. INSERT INTO log (`start_time`,`end_time`,`return_code`)
  12. VALUES(start_time,end_time,return_code);
  13. EXCEPTION WHEN OTHERS THEN
  14. return_code = SQLCODE;
  15. end_time = SYSDATE ||'';
  16. INSERT INTO log (`start_time`,`end_time`,`return_code`)
  17. VALUES(start_time,end_time,return_code);
  18. DBMS_OUTPUT.PUT_LINE('SQL execute error,return code : '|| return_code);
  19. END

其中:

MAP OBJECT log TO test.hive_task_log AT mysql.conn;

這句是使用mysql.conn連結器,將test.hive_task_log表對映到log物件上,後面直接使用log即可。

SELECT COUNT(1) FROM liuxiaowen.lxw1234;

這句是執行Hive的分析任務。

return_code = SQLCODE;

這句是獲取Hive分析任務的結果狀態碼,0表示正常,非0表示錯誤;

另外,在Hive分析任務開始前和結束後,使用SYSDATE獲取當前時間。

使用PL/HQL的異常處理,當執行有問題時候,同樣需要往審計表中記錄開始和結束時間,以及返回的錯誤碼。

執行PL/HQL並檢視結果

在命令列執行hplsql -f 1.sql

hplsql

從執行的列印資訊中可以看出,本次執行有兩個資料庫連結,第一個是連結到Hive,第二個是連結到MySQL。

在MySQL中查看錶test.hive_task_log的資料:

hplsql

修改1.sql檔案,使Hive的分析任務出錯:

SELECT COUNT(1) FROM liuxiaowen.lxw1234.com;

再執行一遍:

hplsql

已經報錯了,檢視MySQL中的審計資訊:

hplsql

遺憾的是,目前還不支援直接將Hive中的表和MySQL中的表關聯起來查詢,只能通過類似遊標的方式去實現關聯。

更多關於Hive中使用儲存過程的文章,閱讀《Hive儲存過程系列文章》。

您可以關注 lxw的大資料田地 ,或者 加入郵件列表 ,隨時接收部落格更新的通知郵件。

如果覺得本部落格對您有幫助,請 贊助作者 。

喜歡 (4)
分享 (0)

相關推薦

Hive儲存過程HQL/SQL– 在Hive儲存過程MySQL

關鍵字:Hive儲存過程、PL/HQL、HQL/SQL、MySQL 通過PL/HQL可以在一個指令碼中同時訪問多個數據庫系統。在實際業務場景中,經常會有需要將Hive和RDBMS中的資料結合分析,比如: 往RDBMS中寫入Hive分析的審計資訊;從RDBMS中獲取一些維

MS Office 自動化程式設計---Word文件的

示例一:儲存至Word 經過一些瞭解之後,就不需要每次都將所有的介面匯入工程了。可以根據需要匯入,此次匯入的介面為: Application、_Document、Documents、Range。新建基於對話方塊的MFC工程,引入標頭檔案,關鍵程式碼如下: void CWor

【學亮開講】Oracle儲存過程教學筆記20181116

--帶出參的儲存過程的建立和呼叫 create or replace procedure pro_owners_add1 ( v_name varchar2,--名稱 v_addressid number,--地址編號 v_housenumber varchar2,--門牌號 v_wat

一步一步學Linq to sql儲存過程

導讀:      普通儲存過程      首先在查詢分析器執行下面的程式碼來建立一個儲存過程:   createprocsp_singleresultset   as   setnocounton   select*fromcustomers   然後開啟IDE的伺服器

Hive學習之路 Hive安裝

different 0.10 director lar blog cut cti mysql extend Hive的下載 下載地址http://mirrors.hust.edu.cn/apache/ 選擇合適的Hive版本進行下載,進到stable-2文件夾可以看到穩

pl/sql 流程控制語句

sql 員工 if else語句 tor 打印 job cto else語句 type 相當於java中的if else語句 IF 布爾表達式 THENPL/SQL 和 SQL 語句;END IF; IF 布爾表達式 THENPL/SQL 和 SQL 語句;ELSE其它

Hive安裝

(二)Hive安裝 目錄 Hive的下載 Hive的安裝 1、本人使用MySQL做為Hive的元資料庫,所以先安裝MySQL。 2、上傳Hive安裝包 3、解壓安裝包 4、修改配置檔案 5、 一定要記得加入 MySQ

資料庫知識整理 - 關係資料庫標準語言SQL- 超良心的資料查詢整理!

主要內容 資料查詢 基本語法 單表查詢 1. 選擇表中的若干列 2. 選擇表中的若干元組 3. ORDER BY子句 4. 聚集函式 5. GROUP BY子句 連線查詢 1. 等值與非等值連線查詢 2. 自身連線 3. 外

opencv讀取影象畫素值讀取並儲存到txt檔案灰度圖

#include "stdafx.h" #include"cv.h" #include <stdlib.h> #include <stdio.h> #include <math.h> #include <fstream> #include &l

線性——順序儲存結構

線性表的順序儲存結構 構造原理 用一組地址連續的儲存單元依次儲存線性表的資料元素,資料元素之間的邏輯關係通過資料元素的儲存位置直接反映。 記做 ( a1,a2,a3,… … , an ) 所謂一個元素的地址是指該元素佔用的若干(連續的)儲存單元的第一個單元的地址。記做LOC(a

UI之正式過程

2018-12-04  09:48:25 1.SetWindowsHookEx  ·鉤子實際上是一個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊

View的工作原理之Measure過程原始碼學習

          上一篇文章從Android程式啟動過程講解了Activity、PhoneWindow以及ViewRoot與DecorView的聯絡。本篇文章詳細講述一下DecorView的measure過程。  

有限元剛度矩陣的一維變頻寬儲存用C++實現

我們接著上一篇有限元剛度矩陣的一維變頻寬儲存用C++實現(一)介紹。上一篇中,我們得到了輔助陣列pDiag中儲存的是總體剛度矩陣[K]每行的半頻寬。經過上一篇中節點自由度重編號,總剛矩陣[K]形式為: 此時,所有的非零元素都集中在帶內。 一

Hive程式設計指南-學習筆記 資料定義

一、資料庫 1、建立資料庫:CREATE DATABASE hive; 如果已經存在,會丟擲異常,下面的語句不丟擲異常:CREATE DATABASE IF NOT EXISTS hive; 資料庫的預設位置是hdfs上:/user/hive/warehouse,修改預

node js10更新後node-sass不相容問題過程以及解決

上次成功之後,重啟了下專案發現又不行了: 這次連提示都模稜兩可,想了想很可能是之前配置的其他資料影響了新配置的sass,於是直接刪除node modules 1  npm install rimraf -g 2  rimraf node_modules   看了下專案檔

【機器學習】資料探勘演算法——關聯規則,挖掘過程,Aprioir演算法

關聯規則挖掘的原理和過程 從關聯規則(一)的分析中可知,關聯規則挖掘是從事務集合中挖掘出這樣的關聯規則:它的支援度和置信度大於最低閾值(minsup,minconf),這個閾值是由使用者指定的。根據 support=(X,Y).count/T.countsupp

關係資料庫標準語言SQL- 超良心的資料查詢整理!

主要內容 資料查詢 基本語法 單表查詢 連線查詢 3. 外連線 巢狀查詢 資料查詢 資料查詢是資料庫的核心操作,該篇將著重介紹資料查詢的五種方式:單表查詢、連線查詢、巢狀查詢、集合查詢和基於派生表的查詢。 基本語

rpm包打包過程詳解——製作原始碼安裝包

製作原始碼安裝包(.tar.gz) 1.      解決依賴的軟體: 系統環境:[紅帽企業Linux.6.4.64位伺服器版].rhel-server-6.4-x86_64 原始碼製作中使用到的軟體為GNU M4,GNU autoconf,GNU automake;GNU

spark SQL 聚合

      聚合內建功能DataFrames提供共同聚合,例如count(),countDistinct(),avg(),max(),min(),等。雖然這些功能是專為DataFrames,spark SQL還擁有型別安全的版本,在其中的一些 scala 和 Java使用

大資料基礎知識學習-----Hive學習筆記Hive安裝環境準備

Hive安裝環境準備 Hive安裝地址 Hive安裝部署 Hive安裝及配置 把apache-hive-1.2.1-bin.tar.gz上傳到linux的/opt/software目錄下 解壓apache-hive-1.2.