標籤:

hive 手記

對Hadoop的理解 - 知乎專欄 Hadoop的MapReduce雖然封裝的很舒服,能夠無視hdfs的細節直接寫業務代碼操作hdfs文件,但還可以更舒服——寫SQL搞定分組匯總/去重、多數據源連接等寫MapReduce會吐血的場景——Hive。

這個過程可以類比mysql等資料庫的過程:將sql語句翻譯成執行過程去資料庫里找數據,資料庫則實際上是文件系統里的有組織的文件。Hive將sql語句翻譯成N輪MapReduce執行過程,去hdfs上找數據計算。需要告訴Hive的是,每一份數據(表)在hdfs上的存儲路徑、數據每一行各列的列名(欄位),這些信息存在元庫里。萬事俱備,只欠下指令。

指令分2大類:管理指令(對錶/分區/欄位 的 增刪改),查詢指令(各種花樣的select)。可以去Home - Apache Hive - Apache Software Foundation系統學習。本文不羅列SQL的各個關鍵字,只提一種數據分析人員學習SQL的方法——從對數據的查詢角度切入。

數據的玩法就4點:行列過濾、數據變換、合併連接、聚合透視

1、行列過濾

select 列過濾; where 行過濾

2、數據變換

sql內置的各種函數、json抽取、url參數抽取、字典取kv、數組取元素、if/case、類型cast轉換等等都是數據變換

3、合併連接

union all 行合併; join / left outer join 列連接。(還有其他join不常用)

4、聚合透視

group by。 聚合函數sum count 配合distinct 。

--------over,有這16字指南,理解sql會輕鬆許多。然後,開練

(等等還沒完,窗口函數、LATERAL VIEW、 EXPLODE這些能懂會用最好。但如果有場景用到這些,那麼數據集市就還有優化的空間。但,這些「高級」玩法仍然跑不出上述4種玩法)


推薦閱讀:

零基礎如何學習SQL——了解select查詢語句
sql 查詢如何將結果集 輸出為一段字元串?
有什麼好的書籍了解sql執行細節?比如執行計劃之類的。
SQL 大法好,退果保平安
如何優雅地寫SQL?

TAG:學習 | Hive | SQL |