您好,登錄后才能下訂單哦!
小編給大家分享一下hive基礎操作有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言
??Hive支持常見的SQL語句, 除此之外它還有其獨特的部分. 常見SQL語句與關系型數據庫(例如MySQL)中的語法一致, 這里就不再做詳細說明. 我們主要來看Hive中不一樣的部分.
??Hive的所有操作可以去Hive官網查看, 點擊此處LanguageManual
??Hive其實并不難, 對于有寫過SQL語句的人來說會更簡單. 在學習Hive時, 建議大家邊學邊敲, 多做聯系.
準備工作
??既然要使用Hive就要有Hive的環境, 可以根據這篇博客來安裝Hive以及與Hive相關的環境(Hadoop, Yarn)大數據生態圈搭建
??這里我使用的是基于Mysql的遠程模式來操作Hive.
操作流程
創建第一個表格
??連接進入Hive shell 之后, 先建一個新的數據庫, 之后的大部分操作我們都在這個數據庫中來練習.
創建:
create database hive_test;
使用該數據庫:
use hive_test;
??然后, 創建第一個表gfstbl, 也可使用數據庫.表的格式(例如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語句, ()中為字段之間用逗號分隔, 字段名稱與類型之間用空格隔開. 這里字段的數據類型有整型, 字符串, 數組, 鍵值對以及結構體.
Hive支持的數據類型:
數據類型 注釋
tinyint 短整型, 范圍:-128~127
smallint 小整型, -32768~32767
int 整型, -232~232-1
bigint 大整型, 就很大
float 單精度浮點數
double 雙精度浮點數
decimal 精度38位十進制數
date 日期
timestamp 時間戳
char 字符
string 字符串
varchar 可變長度字符串
array 數組類型
map 鍵值對類型
structs 結構化類型
ROW FORMAT DELIMITED : 行格式分隔
FIELDS TERMINATED BY ’ ’ : 字段之間使用空格分隔
COLLECTION ITEMS TERMINATED BY ‘,’ : 集合(就是這的數據)使用逗號分隔
MAP KEYS TERMINATED BY ‘:’ : 鍵值對使用冒號分隔
LINES TERMINATED BY ‘\n’ : 記錄之間使用換行符分隔
; : 每一條SQL語句結尾都需要以分號結束
除此之外, 如果去掉分號, 加上:LOCATION “/test”; , 就可設置源數據在HDFS中存放的位置, 若不設置默認就在Hive的工作目錄區.
??創建表的SQL語句公式如下, 我們會根據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
查看第一個表的結構
??查看表結構的公式:
DESCRIBE [EXTENDED|FORMATTED] table_name
EXTENDED 極簡的方式顯示
FORMATTED 格式化方式來顯示
??只查看表字段及類型, 結果如下圖
DESC gfstbl;
或
DESCRIBE gfstbl;
??極簡方式查看表結構, 結果如下圖
DESCRIBE EXTENDED gfstbl;
??格式化方式查看表, 結果如下圖
DESCRIBE FORMATTED gfstbl;
表中加載數據
待加載數據
??數據內容如下:
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
??將這兩行數據復制到gfs.txt文件中
vim /root/gfs.txt
然后復制粘貼數據
導入數據到Hive表中
load data local inpath '/root/gfs.txt' into table hive_test.gfstbl;
??需要注意: load方式插入數據不會啟動MR任務, load的實質是將文件上傳到hdfs目錄中.
查看數據的三種方式
使用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頁面
??進圖webUI頁面, 找到文件對應位置
查看數組,鍵值對,結構體數據的某個值
??對于 數組 使用 : 列名[索引] 的形式查看(索引下標從0開始)
??對于鍵值對使用 : 列名[“Key”]
??對于結構體使用 : 列名.屬性
select gfs[0],address["Girl2"],info.city from gfstbl;
刪除表的方式
drop table gfstbl2;
??此處需要注意, 如果通過hdfs操作刪除表所在的目錄, hive中表還會存在. 原因在于mysql的hive_meta數據庫中還存有該表的元數據信息.
知識積累
Hive中創建表的三種方式
通過編寫完整的CREATE語句創建, 如上文中我們創建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和LIKE關鍵詞創建一個與原來表結構完全相同, 但沒有數據的新表:
create table gfstbl1 like gfstbl;
通過使用CREATE, AS和SELECT關鍵詞創建一個不僅表結構一樣而且數據也一樣的新表:
create table gfstbl2 AS SELECT id,name,gfs,address,info from gfstbl;
??注意, 由于這種方式插入數據使用的是insert來插入數據, 因此會啟動MR任務.
Hive表中插入數據的四種方式
insert 新數據, 最簡單, 最基本也是最少用的方式, 直接寫insert語句.
insert into table(col...) values(val...)
1
load方式, 最常用也是效率最高的方式
??LOAD DATA命令,可分為LOAD DATA LOCAL INPATH和LOAD DATA INPATH。兩者的區別在于LOCAL導入的是本地文件而不加LOCAL的導入的是HDFS文件
LOAD DATA INPATH '/a.txt' INTO TABLE user
1
查詢(select)其他表數據 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
??習慣上使用第二種語法, 即將from語句提前, 減少SQL代碼的冗余.
from user
insert into user_count
select count(*)
insert into user_copy
select *;
直接使用hdfs命令將符合格式的文件放到該表在HDFS對應的目錄下
Hive中表的類型
內部表
??與數據庫中的Table在概念上類似, 每一個內部表在Hive中都有一個相應的目錄存數據, 所有表的數據(不包括External Table)都保存在這個目錄中. 如上文中創建的gfstbl表.
??刪除表時,元數據與數據都會刪除.
臨時表
??臨時表的生命周期是一次會話, 當本次會話結束時, 臨時表會自動刪除.
外部表
??刪除表時, 元數據會被刪除, 但數據(存放在HDFS)不會被刪除.
分區表
??將一批數據分成多個目錄來存儲, 從而防止暴力掃描. 分區表分為靜態分區表和動態分區表.
分桶表
??分桶表是對列值取哈希值的方式,將不同數據放到不同文件中存儲. 由列的哈希值除以桶的個數來決定每條數據劃分在哪個桶中, 對于hive中每一個表、分區都可進一步分桶.
以上是“hive基礎操作有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。