相關(guān)知識
之前系列實(shí)訓(xùn)中我們接觸過導(dǎo)入本地文件到Hive
表中,本關(guān)就進(jìn)行導(dǎo)入的詳細(xì)講解。
為了完成本關(guān)任務(wù),你需要掌握:1.導(dǎo)入命令語法,2.如何將本地txt
文件導(dǎo)入到分區(qū)表中。
導(dǎo)入命令語法
Load
操作執(zhí)行copy/move
命令把數(shù)據(jù)文件copy/move
到Hive
表位于 HDFS
上的目錄位置,并不會(huì)對數(shù)據(jù)內(nèi)容執(zhí)行格式檢查或格式轉(zhuǎn)換操作。Load
命令語法為:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2 …)];
文件路徑filepath
可以是指向HDFS
的相對路徑或是絕對路徑,也可以是指向本地文件系統(tǒng)(Linux
文件系統(tǒng))相對路徑(當(dāng)前工作目錄)或絕對路徑。
若filepath
指向HDFS
,LOAD
執(zhí)行的是move
操作(即執(zhí)行LOAD
后filepath
中的文件不再存在);若filepath
指向本地文件系統(tǒng),LOAD
執(zhí)行的是copy
操作(即執(zhí)行LOAD
后filepath
中的文件仍然存在),但需要指定LOCAL
關(guān)鍵字。
若filepath
指向一個(gè)文件,LOAD
會(huì)copy
或move
相應(yīng)的文件到表tablename
;若filepath
指向一個(gè)目錄,LOAD
會(huì)copy
或move
相應(yīng)目錄下的所有文件到表tablename
。若創(chuàng)建表時(shí)指定了分區(qū)列,使用 LOAD 命令加載數(shù)據(jù)時(shí)也要為所有分區(qū)列指定特定值。
針對LOAD
語句中指明LOCAL
關(guān)鍵字,INPATH
參數(shù)可以使用下述方式確定:
-
Hive 會(huì)在本地文件系統(tǒng)中查找
filepath
-
用戶可以設(shè)置
filepath
為文件絕對路徑,如file:///user/hive/data
針對LOAD
語句中未指明LOCAL
關(guān)鍵字,INPATH
參數(shù)可以使用下述方式確定:
-
若
filepath
為相對路徑,Hive
會(huì)解析成為/user/<username>/filepath
-
filepath
未指定模式或文件系統(tǒng)類型(如hdfs://namenode:9000/
),Hive
會(huì)把${fs.default.name}
值作為Namenode URL
若語句帶OVERWRITE
關(guān)鍵字,目標(biāo)表或分區(qū)中的原始數(shù)據(jù)會(huì)被刪除,替換成新數(shù)據(jù);若未指定OVERWRITE
關(guān)鍵字,新數(shù)據(jù)會(huì)以追加的方式被添加到表中。
若表或分區(qū)中的任何一個(gè)文件與filepath
中的任何一個(gè)文件同名,則表或分區(qū)中的同名文件會(huì)被filepath
中的同名文件替換。
將本地txt文件導(dǎo)入到分區(qū)表中(例子)
- 創(chuàng)建數(shù)據(jù)庫
shopping
:
CREATE DATABASE IF NOT EXISTS shopping
LOCATION '/hive/shopping';
- 假設(shè)在數(shù)據(jù)庫
shopping
中有分區(qū)表items_info2
:
CREATE TABLE IF NOT EXISTS shopping.items_info2(
name STRING COMMENT 'item name',
price FLOAT COMMENT 'item price',
category STRING COMMENT 'item category',
brand STRING COMMENT 'item brand',
type STRING COMMENT 'item type',
stock INT COMMENT 'item stock',
address STRUCT <city:STRING, country:STRING, zip:INT> COMMENT 'item sales address')
COMMENT 'goods information table'
PARTITIONED BY (p_category STRING,p_brand STRING) //設(shè)置分區(qū)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
TBLPROPERTIES ('creator'='Xiaoming','date'='2019-01-01');
- 如假設(shè)本地文件
/home/shoppings.txt
內(nèi)容為:
-
字段間分隔符
,
根據(jù)表中設(shè)置FIELDS TERMINATED BY ','
確定的。如果表中設(shè)置FIELDS TERMINATED BY '\t'
,那么字段間就應(yīng)該用Tab
鍵間隔開 -
集合分隔符
-
根據(jù)表中設(shè)置COLLECTION ITEMS TERMINATED BY '-'
確定的。如果表中設(shè)置COLLECTION ITEMS TERMINATED BY ','
,那么字段間就應(yīng)該用逗號,
鍵間隔開
- 使用
LOAD
命令加載本地文件數(shù)據(jù)到items_info2
表相應(yīng)的分區(qū)中(PARTITION
關(guān)鍵字指定內(nèi)容):
load data local inpath '/home/shoppings.txt' overwrite into table items_info2
partition (p_category='shoes',p_brand='playboy');
- 執(zhí)行
LOAD
命令后,Hive
會(huì)在 HDFS 的/hive/shopping/items2/
路徑下創(chuàng)建目錄p_category=shoes/p_brand=playboy/
,并且會(huì)把items_info.txt
文件復(fù)制到上述創(chuàng)建的目錄下
編程要求
student
表結(jié)構(gòu):
INFO | TYPE |
---|---|
Sno |
INT |
name |
STRING |
age |
INT |
sex |
STRING |
score |
STRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT> |
本地文件/home/student.txt
的內(nèi)容為:
-
創(chuàng)建數(shù)據(jù)庫
test1
;
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
-
切換到
test1
數(shù)據(jù)庫;
mysql> use test1;
Database changed
-
在
test1
中創(chuàng)建相應(yīng)格式的表student
(未分區(qū)),表結(jié)構(gòu)如上所示,分隔符根據(jù)/home/student.txt
的內(nèi)容設(shè)置;文章來源:http://www.zghlxwxcb.cn/news/detail-427710.html -
將
/home/student.txt
的數(shù)據(jù)導(dǎo)入到表student
中。文章來源地址http://www.zghlxwxcb.cn/news/detail-427710.html
/********* Begin *********/
create database if not exists test1 location '/hive/test1';
use test1;
create table if not exists test1.student (
Sno int,
name string,
age int,
sex string,
score struct <Chinese:float, Math:float, English:float>
)
row format delimited
fields terminated by ','
collection items terminated by '-';
load data local inpath '/home/student.txt' overwrite into table student;
/********* End *********/
select * from student;
按照以上要求填寫命令。每個(gè)要求對應(yīng)一條命令,共4條命令,以;隔開。(請勿刪除代碼框架)
由于hive啟動(dòng)時(shí)間較長,測評時(shí)請耐心等待,大概需要時(shí)間:60s左右。
到了這里,關(guān)于Hive 表 DML 操作 第1關(guān):將文件中的數(shù)據(jù)導(dǎo)入(Load)到 Hive 表中的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!