大數據實踐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的mergemerge的語法:MERGE INTO AS T USING AS S ON WHEN MATCHED [AND ] THEN UPDATE SET WHEN MATCHED [AND ] THEN DELETEWHEN NOT MATCHED [AND ] THEN INSERT VALUESmerge的侷限性:最多三條when語句,只支持update/delete/insert。when not matched 必須在when語句的最後面。如果出現update和delete的時候 ,兩個條件是分開的,而且必須在條件前面加上AND.像 [AND ](5)例子a.創建兩個事務表+ View Codeb.開啓事務(見上面的開啓事務的c,一般有些默認的設置是開的,我這裏就只開了自動分區和分桶)c.插入數據+ View Coded.檢驗數據是否被插入

  檢驗數據

  


  檢驗數據

  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

  


  employe

  二.hive的udf

  (1)什麼是hive的udfUser-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類型...。鄭州人流醫院那家好:www.zztjyiyuan.com鄭州×××多少錢:www.zztj120.com


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章