赞
踩
相关知识
之前系列实训中我们接触过导入本地文件到Hive
表中,本关就进行导入的详细讲解。
为了完成本关任务,你需要掌握:1.导入命令语法,2.如何将本地txt
文件导入到分区表中。
导入命令语法
Load
操作执行copy/move
命令把数据文件copy/move
到Hive
表位于 HDFS
上的目录位置,并不会对数据内容执行格式检查或格式转换操作。Load
命令语法为:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2 …)];
文件路径filepath
可以是指向HDFS
的相对路径或是绝对路径,也可以是指向本地文件系统(Linux
文件系统)相对路径(当前工作目录)或绝对路径。
若filepath
指向HDFS
,LOAD
执行的是move
操作(即执行LOAD
后filepath
中的文件不再存在);若filepath
指向本地文件系统,LOAD
执行的是copy
操作(即执行LOAD
后filepath
中的文件仍然存在),但需要指定LOCAL
关键字。
若filepath
指向一个文件,LOAD
会copy
或move
相应的文件到表tablename
;若filepath
指向一个目录,LOAD
会copy
或move
相应目录下的所有文件到表tablename
。若创建表时指定了分区列,使用 LOAD 命令加载数据时也要为所有分区列指定特定值。
针对LOAD
语句中指明LOCAL
关键字,INPATH
参数可以使用下述方式确定:
Hive 会在本地文件系统中查找filepath
用户可以设置filepath
为文件绝对路径,如file:///user/hive/data
针对LOAD
语句中未指明LOCAL
关键字,INPATH
参数可以使用下述方式确定:
若filepath
为相对路径,Hive
会解析成为/user/<username>/filepath
filepath
未指定模式或文件系统类型(如hdfs://namenode:9000/
),Hive
会把${fs.default.name}
值作为Namenode URL
若语句带OVERWRITE
关键字,目标表或分区中的原始数据会被删除,替换成新数据;若未指定OVERWRITE
关键字,新数据会以追加的方式被添加到表中。
若表或分区中的任何一个文件与filepath
中的任何一个文件同名,则表或分区中的同名文件会被filepath
中的同名文件替换。
将本地txt文件导入到分区表中(例子)
shopping
:- CREATE DATABASE IF NOT EXISTS shopping
- LOCATION '/hive/shopping';
shopping
中有分区表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) //设置分区
- ROW FORMAT DELIMITED
- FIELDS TERMINATED BY ','
- COLLECTION ITEMS TERMINATED BY '-'
- TBLPROPERTIES ('creator'='Xiaoming','date'='2019-01-01');
/home/shoppings.txt
内容为:字段间分隔符,
根据表中设置FIELDS TERMINATED BY ','
确定的。如果表中设置FIELDS TERMINATED BY '\t'
,那么字段间就应该用Tab
键间隔开
集合分隔符-
根据表中设置COLLECTION ITEMS TERMINATED BY '-'
确定的。如果表中设置COLLECTION ITEMS TERMINATED BY ','
,那么字段间就应该用逗号,
键间隔开
LOAD
命令加载本地文件数据到items_info2
表相应的分区中(PARTITION
关键字指定内容):- load data local inpath '/home/shoppings.txt' overwrite into table items_info2
- partition (p_category='shoes',p_brand='playboy');
LOAD
命令后,Hive
会在 HDFS 的/hive/shopping/items2/
路径下创建目录p_category=shoes/p_brand=playboy/
,并且会把items_info.txt
文件复制到上述创建的目录下编程要求
student
表结构:
INFO | TYPE |
---|---|
Sno | INT |
name | STRING |
age | INT |
sex | STRING |
score | STRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT> |
本地文件/home/student.txt
的内容为:
创建数据库test1
;
- mysql> create database test1;
- Query OK, 1 row affected (0.00 sec)
切换到test1
数据库;
- mysql> use test1;
- Database changed
在test1
中创建相应格式的表student
(未分区),表结构如上所示,分隔符根据/home/student.txt
的内容设置;
将/home/student.txt
的数据导入到表student
中。
- /********* 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;

按照以上要求填写命令。每个要求对应一条命令,共4条命令,以;隔开。(请勿删除代码框架)
由于hive启动时间较长,测评时请耐心等待,大概需要时间:60s左右。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。