簡介
????Hive是基于Hadoop的數(shù)據(jù)倉庫大數(shù)據(jù)組件。將易上手的SQL語句轉(zhuǎn)化成MapReduce作業(yè)。
數(shù)據(jù)結(jié)構(gòu)
元數(shù)據(jù)
Hive存儲的是一張張的數(shù)據(jù)表,而元數(shù)據(jù)就是其中的表結(jié)構(gòu);
存儲形式:存于Derby數(shù)據(jù)庫,或MySQL,Oracle數(shù)據(jù)庫。表數(shù)據(jù)
表中存儲的數(shù)據(jù)。
存儲形式:每張表存于HDFS中的一個目錄中;
數(shù)據(jù)類型
- 基本數(shù)據(jù)類型
- tinyint / smallint / int / bigint : 整數(shù)類型
- float / double : 浮點數(shù)類型
- boolean : 布爾類型
- string : 字符串類型
- 復(fù)雜數(shù)據(jù)類型
- Array : 數(shù)組類型
- Map : 集合類型,鍵值對Key / Value形式
- Struct : 結(jié)構(gòu)類型,包含不同數(shù)據(jù)類型的元素,跟C語言中的Struct類似
- 時間數(shù)據(jù)類型
- Date : 只包含到天的數(shù)據(jù),沒法精確到時分秒。
- Timestamp : 長整型數(shù)字,從(格林威治時間)1970年1月1日0時0分0秒到現(xiàn)在的總毫秒數(shù)
數(shù)據(jù)模型
????MySQL,Oracle用表作為數(shù)據(jù)模型存儲數(shù)據(jù)。Hive自然也有。下面簡要介紹一下Hive的幾種常用的表吧。
- 內(nèi)部表
最接近普通關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)模型;
刪除數(shù)據(jù)時會將元數(shù)據(jù)與表數(shù)據(jù)一同刪除,HDFS中的數(shù)據(jù)文件一同被刪除;
create table bucket_table
(sid int, sname string, age int)
row format delimited fields terminated by '\t';
-- 指定數(shù)據(jù)間分隔符,默認(rèn)為制表符'\t'
- 外部表
與HDFS中某個目錄下的數(shù)據(jù)文件建立連接;
比較像指針,指向HDFS中某個目錄;
刪除數(shù)據(jù)時,會刪除元數(shù)據(jù),與該目錄的連接,但不會真正刪除HDFS中的數(shù)據(jù);
create external table external_student
(sid int, sname string, age int)
row format delimited fields terminated by '\t'
location '/input'; --指定表數(shù)據(jù)所在 HDFS目錄
- 桶表
用哈希算法將表數(shù)據(jù)分到5個桶中,一般可以將數(shù)據(jù)打亂放到各個桶中,可以處理數(shù)據(jù)傾斜問題
create table bucket_table
(sid int, sname string, age int)
clustered by(sname) into 5 buckets --將數(shù)據(jù)通過哈希算法分成5部分
row format delimited fields terminated by '\t';