1. 程式人生 > >大資料實踐HIVE詳解

大資料實踐HIVE詳解

在這裡插入圖片描述
一.hive的事務
在這裡插入圖片描述
(1)什麼是事務
要知道hive的事務,首先要知道什麼是transaction(事務)?事務就是一組單元化操作,這些操作要麼都執行,要麼都不執行,是一個不可分割的工作單位。
事務有四大特性:A、C、I、D (原子性、一致性、隔離性、永續性)
Atomicity: 不可再分割的工作單位,事務中的所有操作要麼都發,要麼都不發。
Consistency: 事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。這是說資料庫事務不能破壞關係資料的完整性以及業務邏輯上的 一致性。
Isolation: 多個事務併發訪問,事務之間是隔離的
Durability: 意味著在事務完成以後,該事務鎖對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。
(2)

hive事務的特點與侷限性
從hive的0.14版本開始支援低等級的事務
支援事務的增刪改查,從hive的2.2版本開始,開始支援merge
不支援事務的begin、commit以及rollback(事務的回滾)
不支援使用update更新分桶列和分割槽列
想使用事務的話,檔案格式必須是ORC
需要壓縮工作,需要時間,資源和空間
支援S(共享鎖)和X(排它鎖)
不允許從一個非ACID連線寫入/讀取ACID表
(3)hive的事務開啟
hive的事務開啟有三種方式:
a.通過Ambari UI-Hive Config           
b.通過hive-xml 的配置檔案新增如下內容
hive.support.concurrency
true


hive.txn.manager
org.apache.hadoop.hive.ql.lockmgr.DbTxnManager

c.通過命令列,在beeline這種互動式環境下:
set hive.support.concurrency = true;
set hive.enforce.bucketing = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true;
set hive.compactor.worker.threads = 1;
(4)hive的merge
merge的語法:
MERGE INTO AS T USING <source expression/table> AS S ON
WHEN MATCHED [AND ] THEN UPDATE SET
WHEN MATCHED [AND ] THEN DELETE
WHEN NOT MATCHED [AND ] THEN INSERT VALUES
merge的侷限性:
最多三條when語句,只支援update/delete/insert。when not matched 必須在when語句的最後面。
如果出現update和delete的時候 ,兩個條件是分開的,而且必須在條件前面加上AND.像 [AND ]
(5)例子
a.建立兩個事務表

  • View Code
    b.開啟事務(見上面的開啟事務的c,一般有些預設的設定是開的,我這裡就只開了自動分割槽和分桶)
    c.插入資料
  • View Code
    d.檢驗資料是否被插入
    在這裡插入圖片描述
    在這裡插入圖片描述
    e.這裡通過merge操作,完成更新、刪除、插入操作。
    employe欄位解釋:id為2的員工之前的工作地在Toronto,現在在Beijing,state的狀態為update。所以需要更新表employee中員工2的資訊
    id為4的員工的state狀態為quit,說明目前員工已經離職,所以需要在employee表中刪除關於id為4的員工的資訊。
    id為8的員工的state狀態為new,說明是新員工,所以需要插入empoyee中。
  • View Code
  • 在這裡插入圖片描述
    二.hive的udf
    (1)什麼是hive的udf
    User-defined function (UDF): 這提供了一種使用外部函式(在Java中)擴充套件功能的方法,可以在HQL中進行評估
    (2)hive的udf分類
    hive的udf一般分為三種:
      a.UDF:使用者定義的簡單函式,按行操作併為一行輸出一個結果,例如大多數內建數學和字串函式
      b.UDAF: 使用者定義的聚合函式,按行或按組操作,併為每個組輸出一行或一行,例如MAX和COUNT內建函式。
      c.UDTF:使用者定義的表生成函式也按行執行,但結果會生成多行/表,例如EXPLODE函式。 UDTF可以在SELECT之後或在LATERAL VIEW語句之後使用。
    (3)hive的udf使用舉例
      a.對於hive的udf,這裡我寫了一個把字串的大寫全部換成小寫和一個判斷字串是否在一個array數組裡面的函式
  • View Code
      b.然後通過編譯器打包到hdfs檔案系統上,通過執行hive命令建構函式
  • View Code
      c.使用自定義函式
    這裡使用了另一庫裡的一張employee表,裡面使用了string型別、array型別…。表描述與內容如下:
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    文章來自:https://www.itjmd.com/news/show-5335.html