Apache Hive簡介

Hive和SQL編碼新手指南

Apache Hive簡介

> Image credit — Confusedcoders.com


Apache Hive通常被稱為建立在Apache Hadoop之上的數據倉庫基礎架構。 最初由Facebook開發,每天查詢大約20TB的數據,目前,程序員可使用它對存儲在文件系統(例如HDFS(Hadoop分佈式框架系統))中的大型數據集進行臨時查詢和分析,而無需瞭解地圖的詳細信息 -減少。 Hive最好的部分是Hive引擎將查詢隱式轉換為有效的鏈映射減少任務。

Hive的功能:

· 支持不同的存儲類型,例如純文本,csv,Apache Hbase等

· 數據建模,例如創建數據庫,表等

· 易於編碼; 使用稱為HiveQL的類似SQL的查詢語言

· ETL功能,例如將數據提取,轉換和將數據加載到與聯接,分區等結合在一起的表中。

· 包含內置的用戶定義函數(UDF)以操縱日期,字符串和其他數據挖掘工具

· 無論佈局如何,非結構化數據均以數據形式顯示為表格

· 自定義映射器,Reducer和UDF的插件功能

· Hadoop上的增強查詢

Hive的用例:

· 文本挖掘-使用map-reduce覆蓋和分析具有方便結構的非結構化數據

· 文檔索引編制—將標籤分配給多個文檔,以便於恢復

· 業務查詢-查詢大量歷史數據以獲得可行的見解,例如 交易記錄,付款記錄,客戶數據庫等

· 日誌處理-處理各種類型的日誌文件,例如呼叫日誌,Web日誌,機器日誌等。

Hive中的編碼

我們將使用一個稱為"事務"的表來查看如何在Hive中查詢數據。 交易表包含屬性ID,項目和銷售。

這是任何編程語言的一些最佳編碼實踐。

Hive中的DDL命令

DDL是數據定義語言(Data Definition Language)的簡稱,它處理數據庫模式和描述,以及如何將數據保留在數據庫中。 一些常見的例子是

建立表格

· 創建表-CREATE TABLE transaction(id INT, item STRING, sales FLOAT);

· 對錶進行分區- CREATE TABLE transaction(id INT, item STRING, sales FLOAT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\\001’ STORED AS TEXTFILE LOCATION <hdfs>;/<hdfs>

刪除表格

· DROP TABLE transaction;

修改表

· ALTER TABLE transaction RENAME TO transaction_front_of_stores;

· 添加列— ALTER TABLE transaction ADD COLUMNS (customer_name STRING);

顯示錶

· SHOW TABLES;

描述表

· DESCRIBE transaction;

· DESCRIBE EXTENDED transaction;

HIVE中的DML命令

DML是處理數據操作的數據操作語言的簡稱,包括最常用的SQL語句,例如SELECT,INSERT,UPDATE,DELETE等。它主要用於存儲,修改,檢索,刪除和更新數據。 數據庫。

加載數據中

· 從外部文件加載數據— LOAD DATA LOCAL INPATH “<file>” [OVERWRITE] INTO TABLE <table>;

· LOAD DATA LOCAL INPATH “/documents/datasets/transcation.csv” [OVERWRITE] INTO TABLE transaction;

· 從單獨的表寫入數據集-INSERT OVERWRITE TABLE transaction SELECT id, item, date, volume FROM transaction_updated;

select語句用於從數據庫表中獲取數據。 主要用於查看記錄,選擇所需的字段元素,獲取不同的值以及顯示來自任何過濾器,限制或按操作分組的結果。

要從事務表中獲取所有記錄:

SELECT * FROM Transaction;

要從交易表中獲取不同的交易ID:

SELECT DISTINCT ID FROM Transaction;

與Select語句一起使用以限制編碼器要查看的行數。 任何交易數據庫都包含大量數據,這意味著選擇每一行都將導致更長的處理時間。

SELECT * FROM transaction LIMIT 10;

過濾條件

SELECT * FROM transaction WHERE sales>100;

分組依據語句用於彙總不同級別的數據。 想一想我們要按項目計算總銷售額的情況。

SELECT item, SUM(sales) as sale FROM transaction GROUP BY item;

如果我們想過濾掉所有銷售額至少達到1000的商品怎麼辦?

SELECT item, SUM(sales) as sale FROM transaction GROUP BY item HAVING sale>1000;

Jion Hive

為了合併和檢索來自多個表的記錄,我們使用了Hive Join。 當前,Hive支持兩個或更多表的內部,外部,左和右聯接。 語法類似於我們在SQL中使用的語法。 在研究語法之前,讓我們瞭解不同的聯接如何工作。

Apache Hive簡介

> Different joins in HIVE

SELECT A.* FROM transaction A {LEFT|RIGHT|FULL} JOIN transaction_date B ON (A.ID=B.ID);

筆記:

· Hive不支持IN / EXISTS子查詢

· Hive不支持不包含相等條件的聯接條件

· 可以聯接多個表,但可以組織表,以使最大的表出現在序列的最後

在Hive中優化查詢

要優化配置單元中的查詢,這是您應該知道的5條經驗法則

· 分組依據,聚合功能和聯接默認情況下在化簡器中進行,而過濾器操作在映射器中進行

· 使用hive.map.aggr = true選項直接在地圖任務中執行第一級聚合

· 根據執行的任務類型設置映射器/還原器的數量。 對於過濾條件,請使用set mapred.mapper.tasks = X;。 對於聚合操作:設置mapred.reduce.tasks = Y;

· 在聯接中,序列中的最後一個表通過簡化器流式傳輸,而其他表則被緩衝。 整理表格,使最大的表格出現在序列的最後

· 可以使用STREAM TABLE和MAP JOINS加快連接任務的速度


本文重點介紹Hive,它的功能,用例和Hive查詢。 由於許多DML和DDL查詢與SQL非常相似,因此它可以充當SQL新手的基礎或構建塊。


(本文翻譯自Angel Das的文章《Introduction to Hive》,參考:https://towardsdatascience.com/introduction-to-hive-859ba31a5769)

"/<table>/<file>


分享到:


相關文章: