hive的基本簡介
hive概念:基于hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類SQL查詢功能。Hive利用HDFS存儲資料,利用mapreduce查詢分析資料,本質是将SQL轉換為mapreduce程式,比直接使用mapreduce開發效率高。
hive的中繼資料存儲:通常存在關系資料庫中,如mysql.hive中将中繼資料存儲在資料庫中,hive的源資料包括表名稱,表的列,表分區,表屬性,其中表屬性(是否為外部表等),表的資料所在目錄等。
hive與傳統DB的差別:
傳統資料庫:OLTP->面向事務操作型處理,就是關系型資料庫mysql,oracle,sqlserver,db2。主要是支援業務,面向業務。
Hive:OLAP->面向分析分析型處理,就是資料倉庫,面對的是曆史資料開展分析。
Hive數倉開發基本流程
- 從業務系統擷取資料
- 資料存儲
- 寫SQL開發需求
- 配置排程系統
- 導出資料&展示
從業務系統擷取資料的幾種方法
- sqoop導入資料庫的資料:sqoop可以在Hive與傳統的資料庫之間進行資料的傳遞,可以将一個關系型資料庫中的資料導進到hadoop的HDFS中,也可以将HDFS的資料導入到關系型資料庫中。
- Flume采集文本資料:flume可以将各類型的檔案進行采集,存放入hdfs中。
- Ftp檔案伺服器:從檔案伺服器上下載下傳分析所需的源資料(增量資料、全量資料)。
資料存儲的幾種方式:
- 資料倉庫分層ods層,dw層,da層。
- 源資料ods層:直接引用外圍資料,沒有統一格式,不會直接應用,不利于分析。
- 資料倉庫層dw層:來自于ods要經過ETL的過程,格式統一,資料規整。
- 資料應用層da層:要去用dw層資料,真正的資料使用者。
- 資料集市:滿足特定的部門或使用者的需求,按照多元的方式進行存儲,包括定義次元,需要計算的名額,次元的層次等,生成面向決策分析需求的資料立方體。
hive sql知識點
1、DML&DDL
DML:資料操縱語言
DDL:資料定義語言
2、外表和内表
外表:被external修飾,表資料由HDFS管理,表資料的存儲位置由自己指定,删表僅僅會删除中繼資料,HDFS上的檔案并不會被删除。
内表:沒有external修飾,表資料由hive自身管理,表資料存儲的位置預設,删除表會直接删除中繼資料以及存儲資料。
3、分區、分桶
分區:partation by
靜态分區:建立分區表,加載資料
建立分區表:create table par_tap(name string,nation string)partition by (sex string) row format delimited fields terminated by ‘,’;
加載資料:load data local inpath’/home/Hadoop/files/par_tab.txt’into table par_tap partition by (sex=’man’);
動态分區:開啟動态分區功能,加載資料
開啟:set hive.exec.dynamic.partation=true;
加載資料:insert overwrite table par_dnm partition(sex=’man’,dt)select name,nation,dt from par_tap;
分桶:clustered by(字段) into num_buckets
分桶功能預設不開啟,需要手動開啟:set hive.enforce.bucketing = true;分幾個桶,也需要自己指定:set mapreduce.job.reduces = N;導入資料insert+select
4、UDF
使用者自定義函數