參考鏈接:視頻教程
慕課網(wǎng)--走進(jìn)Hive
一、數(shù)據(jù)倉(cāng)庫(kù)
數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的(有特定需求)牺弹、集成的(來(lái)自多個(gè)源)浦马、不可更新的(只做查詢操作)时呀、隨時(shí)間不變化的數(shù)據(jù)集合。它用于支持企業(yè)或組織的決策分析處理晶默。
1谨娜、數(shù)據(jù)倉(cāng)庫(kù)的結(jié)構(gòu)和建立過(guò)程:
數(shù)據(jù)倉(cāng)庫(kù)的結(jié)構(gòu)和建立過(guò)程
2、OLTP && OLAP
OLTP:聯(lián)機(jī)事務(wù)處理過(guò)程磺陡,面向事物趴梢,如銀行轉(zhuǎn)賬系統(tǒng)
OLAP:聯(lián)機(jī)事物分析,面向查詢,如商品推薦系統(tǒng)
3仅政、數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)模型:
星型模型——》雪花模型
二垢油、Hive
1、什么是Hive
(1) 建立在Hadoop HDFS上的數(shù)據(jù)倉(cāng)庫(kù)基礎(chǔ)架構(gòu)
(2) 可以用來(lái)進(jìn)行ETL
(3) 定義了類似于SQL,成為HQL
(4) 允許MapReduce自定義
Hive是SQL解析引擎圆丹,將SQL——》M/R job
Hive的表其實(shí)就是HDFS的目錄/文件
2滩愁、Hive的體系結(jié)構(gòu)
Hive的元數(shù)據(jù):
- Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中(Metestore),支持mysql、derby(默認(rèn))等
- Hive中的元數(shù)據(jù)包括表的名字辫封、表的列硝枉、分區(qū)及其屬性、表的屬性等倦微。
HQL的執(zhí)行過(guò)程:
- 解釋器妻味、編譯器、優(yōu)化器完成HQL查詢語(yǔ)句從詞法分析欣福、語(yǔ)法分析责球、編譯、優(yōu)化以及查詢技術(shù)(plan)的生成拓劝。生成的查詢技術(shù)存儲(chǔ)在HDFS中雏逾,并隨后有MapReduce調(diào)用執(zhí)行。
3郑临、Hive的安裝
Hive依賴于Hadoop的安裝
Hadoop的安裝:
(1)單機(jī)環(huán)境
(2)偽分布式環(huán)境
(3)集群環(huán)境
Hive的安裝模式:三種
(1)嵌入模式
- 元數(shù)據(jù)信息存儲(chǔ)在Hive自帶的derby數(shù)據(jù)庫(kù)中
- 只允許創(chuàng)建一個(gè)鏈接
- 多用于做demo演示
(2)本地模式
- 元數(shù)據(jù)信息被存儲(chǔ)在Mysql數(shù)據(jù)庫(kù)中
- Mysql數(shù)據(jù)庫(kù)和Hive運(yùn)行在同一臺(tái)物理機(jī)器上
-多用于開(kāi)發(fā)和測(cè)試
(3)遠(yuǎn)程模式
- Hive和MYsql運(yùn)行在不同機(jī)器上栖博,多用于生產(chǎn)環(huán)境
- 允許多個(gè)連接
4、Hive的啟動(dòng)方式:
(1) CLI命令行方式
(2) Web界面方式
默認(rèn)端口號(hào):9999
啟動(dòng)方式:
hive --service hwi &
通過(guò)瀏覽器來(lái)訪問(wèn):http://<ip地址>:9999/hwi/
(3) 遠(yuǎn)程服務(wù)啟動(dòng)方式
端口號(hào):10000
啟動(dòng)方式:
hive --service hwi &
5厢洞、Hive的數(shù)據(jù)類型
(1)基本數(shù)據(jù)類型
- tinyint/smallint/int/bigint:整數(shù)類型
- float/double:浮點(diǎn)數(shù)類型
- boolean:布爾類型
- string:字符串類型
(2)復(fù)雜數(shù)據(jù)類型 - Array:數(shù)組類型仇让。一系列相同數(shù)據(jù)類型的元素
- Map :key-value鍵值對(duì)
- struct:結(jié)構(gòu)類型:可以包含不同數(shù)據(jù)類型的元素
(3)時(shí)間類型 - Date 格式如YYYY-MM-DD
- TimeStamp 為自1970年起秒數(shù)
注:在Hive中兩者相互轉(zhuǎn)換的函數(shù):cast()
6、Hive的數(shù)據(jù)存儲(chǔ)
(1)基于HDFS
(2)沒(méi)有專門(mén)的數(shù)據(jù)存儲(chǔ)格式
(3)存儲(chǔ)結(jié)構(gòu)主要包括:數(shù)據(jù)庫(kù)躺翻、文件丧叽、表、試圖
(4)可以直接加載文本文件(.txt)
(5)創(chuàng)建表時(shí)公你,可以指定Hive的列分隔符與行分隔符(默認(rèn)無(wú)分隔符)
7蠢正、Hive的數(shù)據(jù)模型
(1)內(nèi)部表(table)
- 與數(shù)據(jù)庫(kù)中的table概念是類似的
- 每一個(gè)Table在Hive中都有一個(gè)相應(yīng)的目錄存儲(chǔ)數(shù)據(jù)
- 所有的Table(不包括Txternal Tale)都保存在這個(gè)目錄中
- 刪除表時(shí),元數(shù)據(jù)與數(shù)據(jù)都會(huì)被刪除
例:
Create table T1
(Tid int,tname string,age int)
Create table T2
(Tid int,tname string,age int)
Location ‘/mytable/hive/t2’
--指定表存儲(chǔ)位置
Create table T3
(Tid int,tname string,age int)
Row format delimited fields terminated by ‘,’
--指定行的分隔符是逗號(hào)
Create table T4
as
select * from sample_data
--創(chuàng)建表的同時(shí)創(chuàng)建數(shù)據(jù)省店,用查詢語(yǔ)句創(chuàng)建數(shù)據(jù)嚣崭,t4表內(nèi)容與結(jié)構(gòu)與表sample_data相同
Create table T5
Row format delimited fields terminated by ‘,’
as
select * from sample_data
Alter table T1 add columns(English int)
--T1表加了一列,改變表的結(jié)構(gòu)
(2)分區(qū)表
- partition對(duì)應(yīng)于數(shù)據(jù)庫(kù)的Partion列的密集索引
-
在Hive中,表中的一個(gè)Partition對(duì)應(yīng)于表下的一個(gè)目錄懦傍,所有的partition的數(shù)據(jù)都存儲(chǔ)在對(duì)應(yīng)的目錄中雹舀。
分區(qū)表示意
例:
Create table Partion_table
(sid int,sname,string)
Partition by (gender string)
Row format delimited fields terminated by ‘,’
---創(chuàng)建分區(qū)表
Insert into table partition_table partition(gender=’F’)
Select sid,sname from sample_data where gender=’F’
分區(qū)表作用:在查詢操作時(shí),降低掃描次數(shù)粗俱,提高查詢效率
如何知道查詢效率提高,生成執(zhí)行計(jì)劃
explain select * from T where gender=‘M’
(3)外部表(extennal table)
執(zhí)行已經(jīng)在HDFS中存儲(chǔ)的數(shù)據(jù)说榆,可以創(chuàng)建Partition
他和內(nèi)部表在元數(shù)據(jù)的組織上是相同的,而實(shí)際數(shù)據(jù)的存儲(chǔ)則有較大的差異
-
外部表只有一個(gè)過(guò)程寸认,加載數(shù)據(jù)和創(chuàng)建表同時(shí)完成签财,并不會(huì)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)目錄中,只是與外部數(shù)據(jù)建立一個(gè)鏈接偏塞。當(dāng)刪除一個(gè)外部表時(shí)唱蒸,僅僅刪除該鏈接。
外部表示意
例:
Create external table external_student
(Tid int,tname string,age int)
Row format delimited fields terminated by ‘,’
Location ‘/input’
(4) 桶表(Bucket table)
- 桶表是對(duì)數(shù)據(jù)進(jìn)行哈希取值灸叼,然后放到不同文件中存儲(chǔ)神汹。(把數(shù)據(jù)打散進(jìn)行存儲(chǔ),避免造成”熱塊“)
桶表示意
Create table bucket_table
(Tid int,tname string,age int)
clusterd by(sname) into」沤瘛5 buckets屁魏;
--根據(jù)sname字段進(jìn)行哈希運(yùn)算,放入5個(gè)桶中
(5) 視圖(view)
- 是一個(gè)虛表捉腥,是一個(gè)邏輯概念
- 建立在已有表的基礎(chǔ)上氓拼,試圖賴以建立的這些表成為基表
- 視圖可以簡(jiǎn)化復(fù)雜的查詢
Create View empinfo
as
select e.emptno,e.ename,e.sale,e.sale*12 annlsal d.dname
from emp e,dept d
where e.deptno=d.deptno
其他知識(shí)點(diǎn):
靜默模式:不顯示map/reduce過(guò)程
命令行:
hive -S