常用交互命令
- -e 不進(jìn)入hive的交互窗口執(zhí)行sql語句
hive -e "select * from student;" - -f 執(zhí)行腳本中的sql語句
(1). 創(chuàng)建hive.sql文件
文件中正確輸入sql語句
select * from student;
(2). 執(zhí)行文件中的sql語句
hive -f hive.sql
(3). 將執(zhí)行的結(jié)果追加到文件中
hive -f hive.sql > hive_result.txt
其他常用命令操作
- 退出hive窗口
exit:先隱性提交數(shù)據(jù)塌忽,再退出
quit:不提交數(shù)據(jù)院仿,退出 - 在hive命令行窗口中查看hdfs文件系統(tǒng)
dfs -ls /; - 在hive命令行窗口查看本地文件系統(tǒng)
! ls / - 查看hive中輸入的所有歷史命令
進(jìn)去當(dāng)前用戶的跟目錄,查看.hivehistory文件
使用jdbc連接hive
-
開啟hiveserver2
開啟hiveserver2.png - 新開窗口連接
開啟beeline
!connect jdbc:hive2://hadoop-100:10000
beeline.png
常見屬性設(shè)置
Hive數(shù)據(jù)倉(cāng)庫(kù)位置配置
- default數(shù)據(jù)倉(cāng)庫(kù)的最原始位置是在hdfs上的豌蟋,/user/hive/warehouse路徑下
- 在數(shù)據(jù)倉(cāng)庫(kù)目錄下廊散,沒有對(duì)默認(rèn)的數(shù)據(jù)庫(kù)default創(chuàng)建文件夾,如果某張表屬于default數(shù)據(jù)庫(kù)梧疲,直接在數(shù)據(jù)倉(cāng)庫(kù)目錄下創(chuàng)建一個(gè)文件夾
- 修改default數(shù)據(jù)倉(cāng)庫(kù)原始位置
將hive-default.xml.template如下配置信息拷貝到hive-site.xml文件中
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
配置同組用戶有執(zhí)行權(quán)限
hdfs dfs -chmod g+w /user/hive/warehouse
default數(shù)據(jù)庫(kù)下有張student表允睹,test.db是自己創(chuàng)建的數(shù)據(jù)庫(kù)运准,如上圖
test.db數(shù)據(jù)庫(kù)下有張people表,如上圖
查詢后信息顯示配置
實(shí)現(xiàn)顯示當(dāng)前數(shù)據(jù)庫(kù)缭受,以及查詢表的頭信息配置
- hive-site.xml文件中添加如下配置信息
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
-
重新啟動(dòng)hive
配置前
修改前.png
配置后
修改后.png
修改后2.png
Hive運(yùn)行日志信息配置
- Hive的log默認(rèn)存放在(當(dāng)前用戶名下)/tmp/hadoop/hive.log文件下
- 修改hive的log存放位置
修改/opt/module/hive/conf/hive-log4j.properties.template文件名稱為hive-log4j.properties
修改hive-log4j.properties文件中修改log存放位置
hive.log.dir=/opt/module/hive/logs
參數(shù)配置方式
- 查看當(dāng)前所有的配置信息
set; -
參數(shù)配置的三種方式
(1). 配置文件方式
默認(rèn)配置文件:hive-default.xml
用戶自定義配置文件:hive-site.xml
注意:用戶自定義配置會(huì)覆蓋默認(rèn)配置胁澳。另外,Hive也會(huì)讀入Hadoop的配置贯涎,因?yàn)镠ive是作為Hadoop的客戶端啟動(dòng)的听哭,Hive的配置會(huì)覆蓋Hadoop的配置。配置文件的設(shè)定對(duì)本機(jī)啟動(dòng)的所有Hive進(jìn)程都有效塘雳。
(2). 命令行參數(shù)方式
啟動(dòng)Hive時(shí)陆盘,可以在命令行添加-hiveconf param=value來設(shè)定參數(shù),僅對(duì)本次hive啟動(dòng)有效败明。
如隘马,hive -hiveconf mapred.reduce.tasks=10;
查看,set mapred.reduce.tasks;
命令行參數(shù)方式.png
(3). 參數(shù)聲明方式
可以在HQL中使用SET關(guān)鍵字設(shè)定參數(shù)妻顶,僅對(duì)本次hive啟動(dòng)有效酸员。
如,set mapred.reduce.tasks=100;
查看讳嘱,set mapred.reduce.tasks;
參數(shù)聲明方式.png
上述三種設(shè)定方式的優(yōu)先級(jí)依次遞增幔嗦。即配置文件<命令行參數(shù)<參數(shù)聲明。注意某些系統(tǒng)級(jí)的參數(shù)沥潭,例如log4j相關(guān)的設(shè)定邀泉,必須用前兩種方式設(shè)定,因?yàn)槟切﹨?shù)的讀取在會(huì)話建立以前已經(jīng)完成了钝鸽。
Hive數(shù)據(jù)類型
基本數(shù)據(jù)類型
Hive數(shù)據(jù)類型 | Java數(shù)據(jù)類型 | 長(zhǎng)度 | 例子 |
---|---|---|---|
TINYINT | byte | 1byte 有符號(hào)整數(shù) | 20 |
SMALINT | short | 2byte 有符號(hào)整數(shù) | 30 |
INT | int | 4byte 有符號(hào)整數(shù) | 40 |
BIGINT | long | 8byte 有符號(hào)整數(shù) | 50 |
BOOLEAN | boolean | 布爾類型汇恤,true、false | true |
FLOAT | float | 單精度浮點(diǎn)數(shù) | 3.1415926 |
DOUBLE | double | 雙精度浮點(diǎn)數(shù) | 3.1415926 |
STRING | string | 字符系列拔恰∫蚧眩可以指定字符集⊙瞻茫可以使用單引號(hào)或者雙引號(hào) | ‘hello’财岔,“world” |
TIMESTAMP | 時(shí)間類型 | ||
BINARY | 字節(jié)數(shù)組 |
對(duì)于Hive的String類型相當(dāng)于數(shù)據(jù)庫(kù)的varchar類型,該類型是一個(gè)可變的字符串河爹,不過它不能聲明其中最多能存儲(chǔ)多少個(gè)字符匠璧,理論上它可以存儲(chǔ)2GB的字符數(shù)。
集合數(shù)據(jù)類型
數(shù)據(jù)類型 | 描述 | 語法示例 |
---|---|---|
STRUCT | 和c語言中的struct類似昌抠,都可以通過“點(diǎn)”符號(hào)訪問元素內(nèi)容患朱。例如,如果某個(gè)列的數(shù)據(jù)類型是STRUCT{first STRING, last STRING},那么第1個(gè)元素可以通過字段.first來引用炊苫。 | struct() |
MAP | MAP是一組鍵-值對(duì)元組集合裁厅,使用數(shù)組表示法可以訪問數(shù)據(jù)冰沙。例如,如果某個(gè)列的數(shù)據(jù)類型是MAP执虹,其中鍵->值對(duì)是’first’->’John’和’last’->’Doe’拓挥,那么可以通過字段名[‘last’]獲取最后一個(gè)元素 | map() |
ARRAY | 數(shù)組是一組具有相同類型和名稱的變量的集合。這些變量稱為數(shù)組的元素袋励,每個(gè)數(shù)組元素都有一個(gè)編號(hào)侥啤,編號(hào)從零開始。例如茬故,數(shù)組值為[‘John’, ‘Doe’]盖灸,那么第2個(gè)元素可以通過數(shù)組名[1]進(jìn)行引用 | Array() |
Hive有三種復(fù)雜數(shù)據(jù)類型ARRAY、MAP 和 STRUCT磺芭。ARRAY和MAP與Java中的Array和Map類似赁炎,而STRUCT與C語言中的Struct類似,它封裝了一個(gè)命名字段集合钾腺,復(fù)雜數(shù)據(jù)類型允許任意層次的嵌套徙垫。
例子
有一個(gè)json格式的字符串
{
"name": "ZJ",
"parent": [
"Z",
"J"
],
"score": {
"語文": 80,
"數(shù)學(xué)": 90,
"英語": 100
},
"address": {
"province": "河南",
"city": "新鄉(xiāng)"
}
}
有一些數(shù)據(jù)
ZJ Z_J 語文:80_數(shù)學(xué):90_英語:100 河南_新鄉(xiāng)
ZFH Z_FG 語文:100_數(shù)學(xué):90_英語:180 河南_新鄉(xiāng)
將這些數(shù)據(jù)保存在hive表中
首先創(chuàng)建表
create table student(
name string,
parents array<string>,
score map<string, int>,
address struct<province:string, city:string>
) row format delimited
fields terminated by '\t'
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
創(chuàng)建表的相關(guān)語句解釋
row format delimited
fields terminated by ',' 列分隔符
collection items terminated by '_' MAP STRUCT 和 ARRAY 的分隔符(數(shù)據(jù)分割符號(hào))
map keys terminated by ':' MAP中的key與value的分隔符
lines terminated by '\n';行分隔符,默認(rèn)\n,可不寫
導(dǎo)入數(shù)據(jù)
load data local inpath '/opt/module/datas/student.txt' into table student;
查詢數(shù)據(jù)
select * from student;
select name,parents[0],parents[1],score["語文"],address.province from student;
類型轉(zhuǎn)化
Hive的原子數(shù)據(jù)類型是可以進(jìn)行隱式轉(zhuǎn)換的放棒,類似于Java的類型轉(zhuǎn)換姻报,例如某表達(dá)式使用INT類型,TINYINT會(huì)自動(dòng)轉(zhuǎn)換為INT類型间螟,但是Hive不會(huì)進(jìn)行反向轉(zhuǎn)化吴旋,例如,某表達(dá)式使用TINYINT類型寒亥,INT不會(huì)自動(dòng)轉(zhuǎn)換為TINYINT類型邮府,它會(huì)返回錯(cuò)誤荧关,除非使用CAST操作
隱式類型轉(zhuǎn)換規(guī)則如下
- 任何整數(shù)類型都可以隱式地轉(zhuǎn)換為一個(gè)范圍更廣的類型溉奕,如TINYINT可以轉(zhuǎn)換成INT,INT可以轉(zhuǎn)換成BIGINT忍啤。
- 所有整數(shù)類型加勤、FLOAT和STRING類型都可以隱式地轉(zhuǎn)換成DOUBLE。
- TINYINT同波、SMALLINT鳄梅、INT都可以轉(zhuǎn)換為FLOAT。
- BOOLEAN類型不可以轉(zhuǎn)換為任何其它的類型未檩。
可以使用CAST操作顯示進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
例如CAST('1' AS INT)將把字符串'1' 轉(zhuǎn)換成整數(shù)1戴尸;如果強(qiáng)制類型轉(zhuǎn)換失敗,如執(zhí)行CAST('X' AS INT)冤狡,表達(dá)式返回空值 NULL孙蒙。