您好,登錄后才能下訂單哦!
小編給大家分享一下hive基礎(chǔ)操作有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言
??Hive支持常見的SQL語句, 除此之外它還有其獨(dú)特的部分. 常見SQL語句與關(guān)系型數(shù)據(jù)庫(例如MySQL)中的語法一致, 這里就不再做詳細(xì)說明. 我們主要來看Hive中不一樣的部分.
??Hive的所有操作可以去Hive官網(wǎng)查看, 點(diǎn)擊此處LanguageManual
??Hive其實(shí)并不難, 對(duì)于有寫過SQL語句的人來說會(huì)更簡(jiǎn)單. 在學(xué)習(xí)Hive時(shí), 建議大家邊學(xué)邊敲, 多做聯(lián)系.
準(zhǔn)備工作
??既然要使用Hive就要有Hive的環(huán)境, 可以根據(jù)這篇博客來安裝Hive以及與Hive相關(guān)的環(huán)境(Hadoop, Yarn)大數(shù)據(jù)生態(tài)圈搭建
??這里我使用的是基于Mysql的遠(yuǎn)程模式來操作Hive.
操作流程
創(chuàng)建第一個(gè)表格
??連接進(jìn)入Hive shell 之后, 先建一個(gè)新的數(shù)據(jù)庫, 之后的大部分操作我們都在這個(gè)數(shù)據(jù)庫中來練習(xí).
創(chuàng)建:
create database hive_test;
使用該數(shù)據(jù)庫:
use hive_test;
??然后, 創(chuàng)建第一個(gè)表gfstbl, 也可使用數(shù)據(jù)庫.表的格式(例如hive_test.gfstbl).
CREATE TABLE gfstbl(
id INT,
name STRING,
age INT,
gfs ARRAY<STRING>,
address MAP<STRING,STRING>,
info STRUCT<country:String,province:String,city:String>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
??解釋說明:
create語句, ()中為字段之間用逗號(hào)分隔, 字段名稱與類型之間用空格隔開. 這里字段的數(shù)據(jù)類型有整型, 字符串, 數(shù)組, 鍵值對(duì)以及結(jié)構(gòu)體.
Hive支持的數(shù)據(jù)類型:
數(shù)據(jù)類型 注釋
tinyint 短整型, 范圍:-128~127
smallint 小整型, -32768~32767
int 整型, -232~232-1
bigint 大整型, 就很大
float 單精度浮點(diǎn)數(shù)
double 雙精度浮點(diǎn)數(shù)
decimal 精度38位十進(jìn)制數(shù)
date 日期
timestamp 時(shí)間戳
char 字符
string 字符串
varchar 可變長度字符串
array 數(shù)組類型
map 鍵值對(duì)類型
structs 結(jié)構(gòu)化類型
ROW FORMAT DELIMITED : 行格式分隔
FIELDS TERMINATED BY ’ ’ : 字段之間使用空格分隔
COLLECTION ITEMS TERMINATED BY ‘,’ : 集合(就是這的數(shù)據(jù))使用逗號(hào)分隔
MAP KEYS TERMINATED BY ‘:’ : 鍵值對(duì)使用冒號(hào)分隔
LINES TERMINATED BY ‘\n’ : 記錄之間使用換行符分隔
; : 每一條SQL語句結(jié)尾都需要以分號(hào)結(jié)束
除此之外, 如果去掉分號(hào), 加上:LOCATION “/test”; , 就可設(shè)置源數(shù)據(jù)在HDFS中存放的位置, 若不設(shè)置默認(rèn)就在Hive的工作目錄區(qū).
??創(chuàng)建表的SQL語句公式如下, 我們會(huì)根據(jù)Hive表的類型將這一公式分開操作.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
LIKE existing_table_or_view_name
[LOCATION hdfs_path];
data_type
: primitive_type
| array_type
| map_type
| struct_type
| union_type -- (Note: Available in Hive 0.7.0 and later)
primitive_type
: TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN
| FLOAT
| DOUBLE
| DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)
| STRING
| BINARY -- (Note: Available in Hive 0.8.0 and later)
| TIMESTAMP -- (Note: Available in Hive 0.8.0 and later)
| DECIMAL -- (Note: Available in Hive 0.11.0 and later)
| DECIMAL(precision, scale) -- (Note: Available in Hive 0.13.0 and later)
| DATE -- (Note: Available in Hive 0.12.0 and later)
| VARCHAR -- (Note: Available in Hive 0.12.0 and later)
| CHAR -- (Note: Available in Hive 0.13.0 and later)
array_type
: ARRAY < data_type >
map_type
: MAP < primitive_type, data_type >
struct_type
: STRUCT < col_name : data_type [COMMENT col_comment], ...>
union_type
: UNIONTYPE < data_type, data_type, ... > -- (Note: Available in Hive 0.7.0 and later)
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] -- (Note: Available in Hive 0.13 and later)
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
file_format:
: SEQUENCEFILE
| TEXTFILE -- (Default, depending on hive.default.fileformat configuration)
| RCFILE -- (Note: Available in Hive 0.6.0 and later)
| ORC -- (Note: Available in Hive 0.11.0 and later)
| PARQUET -- (Note: Available in Hive 0.13.0 and later)
| AVRO -- (Note: Available in Hive 0.14.0 and later)
| JSONFILE -- (Note: Available in Hive 4.0.0 and later)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
constraint_specification:
: [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
[, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE
查看第一個(gè)表的結(jié)構(gòu)
??查看表結(jié)構(gòu)的公式:
DESCRIBE [EXTENDED|FORMATTED] table_name
EXTENDED 極簡(jiǎn)的方式顯示
FORMATTED 格式化方式來顯示
??只查看表字段及類型, 結(jié)果如下圖
DESC gfstbl;
或
DESCRIBE gfstbl;
??極簡(jiǎn)方式查看表結(jié)構(gòu), 結(jié)果如下圖
DESCRIBE EXTENDED gfstbl;
??格式化方式查看表, 結(jié)果如下圖
DESCRIBE FORMATTED gfstbl;
表中加載數(shù)據(jù)
待加載數(shù)據(jù)
??數(shù)據(jù)內(nèi)容如下:
001 zhangsan 19 Girl1,Girl2,Girl3 Girl1:qingdao,Girl2:jinan,Girl3:nanjing zhongguo,shandong,weifang
002 lisi 20 GirlA,GirlB GirlA:American,GirlB:長沙 zhongguo,shandong,qingdao
??將這兩行數(shù)據(jù)復(fù)制到gfs.txt文件中
vim /root/gfs.txt
然后復(fù)制粘貼數(shù)據(jù)
導(dǎo)入數(shù)據(jù)到Hive表中
load data local inpath '/root/gfs.txt' into table hive_test.gfstbl;
??需要注意: load方式插入數(shù)據(jù)不會(huì)啟動(dòng)MR任務(wù), load的實(shí)質(zhì)是將文件上傳到hdfs目錄中.
查看數(shù)據(jù)的三種方式
使用select語句
select * from gfstbl;
2. 通過hdfs集群操作
hdfs dfs -ls /user/hive_meta/warehouse/hive_test.db/gfstbl
hdfs dfs -cat /user/hive_meta/warehouse/hive_test.db/gfstbl/*
3. 通過webUI頁面
??進(jìn)圖webUI頁面, 找到文件對(duì)應(yīng)位置
查看數(shù)組,鍵值對(duì),結(jié)構(gòu)體數(shù)據(jù)的某個(gè)值
??對(duì)于 數(shù)組 使用 : 列名[索引] 的形式查看(索引下標(biāo)從0開始)
??對(duì)于鍵值對(duì)使用 : 列名[“Key”]
??對(duì)于結(jié)構(gòu)體使用 : 列名.屬性
select gfs[0],address["Girl2"],info.city from gfstbl;
刪除表的方式
drop table gfstbl2;
??此處需要注意, 如果通過hdfs操作刪除表所在的目錄, hive中表還會(huì)存在. 原因在于mysql的hive_meta數(shù)據(jù)庫中還存有該表的元數(shù)據(jù)信息.
知識(shí)積累
Hive中創(chuàng)建表的三種方式
通過編寫完整的CREATE語句創(chuàng)建, 如上文中我們創(chuàng)建gfstbl時(shí)的語句:
CREATE TABLE gfstbl(
id INT,
name STRING,
age INT,
gfs ARRAY<STRING>,
address MAP<STRING,STRING>,
info STRUCT<country:String,province:String,city:String>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n';
通過使用CREATE和LIKE關(guān)鍵詞創(chuàng)建一個(gè)與原來表結(jié)構(gòu)完全相同, 但沒有數(shù)據(jù)的新表:
create table gfstbl1 like gfstbl;
通過使用CREATE, AS和SELECT關(guān)鍵詞創(chuàng)建一個(gè)不僅表結(jié)構(gòu)一樣而且數(shù)據(jù)也一樣的新表:
create table gfstbl2 AS SELECT id,name,gfs,address,info from gfstbl;
??注意, 由于這種方式插入數(shù)據(jù)使用的是insert來插入數(shù)據(jù), 因此會(huì)啟動(dòng)MR任務(wù).
Hive表中插入數(shù)據(jù)的四種方式
insert 新數(shù)據(jù), 最簡(jiǎn)單, 最基本也是最少用的方式, 直接寫insert語句.
insert into table(col...) values(val...)
1
load方式, 最常用也是效率最高的方式
??LOAD DATA命令,可分為LOAD DATA LOCAL INPATH和LOAD DATA INPATH。兩者的區(qū)別在于LOCAL導(dǎo)入的是本地文件而不加LOCAL的導(dǎo)入的是HDFS文件
LOAD DATA INPATH '/a.txt' INTO TABLE user
1
查詢(select)其他表數(shù)據(jù) insert 到新表中
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
或
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1
??習(xí)慣上使用第二種語法, 即將from語句提前, 減少SQL代碼的冗余.
from user
insert into user_count
select count(*)
insert into user_copy
select *;
直接使用hdfs命令將符合格式的文件放到該表在HDFS對(duì)應(yīng)的目錄下
Hive中表的類型
內(nèi)部表
??與數(shù)據(jù)庫中的Table在概念上類似, 每一個(gè)內(nèi)部表在Hive中都有一個(gè)相應(yīng)的目錄存數(shù)據(jù), 所有表的數(shù)據(jù)(不包括External Table)都保存在這個(gè)目錄中. 如上文中創(chuàng)建的gfstbl表.
??刪除表時(shí),元數(shù)據(jù)與數(shù)據(jù)都會(huì)刪除.
臨時(shí)表
??臨時(shí)表的生命周期是一次會(huì)話, 當(dāng)本次會(huì)話結(jié)束時(shí), 臨時(shí)表會(huì)自動(dòng)刪除.
外部表
??刪除表時(shí), 元數(shù)據(jù)會(huì)被刪除, 但數(shù)據(jù)(存放在HDFS)不會(huì)被刪除.
分區(qū)表
??將一批數(shù)據(jù)分成多個(gè)目錄來存儲(chǔ), 從而防止暴力掃描. 分區(qū)表分為靜態(tài)分區(qū)表和動(dòng)態(tài)分區(qū)表.
分桶表
??分桶表是對(duì)列值取哈希值的方式,將不同數(shù)據(jù)放到不同文件中存儲(chǔ). 由列的哈希值除以桶的個(gè)數(shù)來決定每條數(shù)據(jù)劃分在哪個(gè)桶中, 對(duì)于hive中每一個(gè)表、分區(qū)都可進(jìn)一步分桶.
以上是“hive基礎(chǔ)操作有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。