Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供相似SQL查詢功能。linux
深刻淺出學Hive(二)shell
http://my.oschina.net/dfsj66011/blog/601919 數據庫
hive的工做機制
一、在hive中建一個庫
---在hive的元數據庫中記錄
---在hdfs的默認路徑下/user/hive/warehouse/ 建一個以 "庫名.db" 爲名字的文件夾
二、在hive的庫中建表
---在hive的元數據庫中記錄
---在hdfs的默認路徑下 /user/hive/warehouse/庫.db/ 下建一個 「表名」 爲名字的文件夾
三、hive中內部表和外部表的區別
----建表時,內部表不用指定數據存放的路徑,默認都放在 /user/hive/warehouse/
----外部表建表時,要指定external關鍵字,同時要指定數據存放的路徑(要分析的數據在哪就指定哪)
----內部表刪除時,會清掉元數據,同時刪掉表文件夾及其中的數據
----外部表刪除時,只清除元數據
四、hive表的數據能夠存成多種文件格式,最普通的是textfile,可是性能比較好的是 sequenceFile格式
----sequencefile 是一種二進制文件
----文件內的內容組織形式爲key:value
----在hadoop有一個優化場景可使用sequencefile
小文件合併成大文件:
---讀一個小文件,就把小文件的文件名做爲key,內容做爲value,追加到一個大sequencefile文件中
----sequencefile文件格式支持較好的壓縮性能,並且hadoop的mapreduce程序能夠直接從sequencefile的壓縮文件中直接讀取數據
五、在linux的shell中直接運行HQL語句的方法
//cli shell
hive -S -e 'select country,count(*) from tab_ext' > /home/hadoop/hivetemp/e.txt
這種運行機制很是重要,在生產中就是用這種機制來將大量的HQL邏輯組織在一個批量執行的shell腳本程序中
六、分區表
分區表的意義在於能夠針對一個分區來進行統計從而減少統計的數據集
建立分區表要使用關鍵字 partitioned by (country string)
導入數據到分區表的時候須要指定這份數據所屬的分區 load data ..... partition(country='china')
hive就會在hdfs的表目錄建一個分區子文件夾,名字爲 country=china ,這一個分區的數據就放在該子文件夾下
針對分區進行的查詢和統計只要指定 where條件,將分區標識當作一個普通表字段就能夠 where country='china'
工具