2、DML
2.1加载数据脚本
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE
tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
2.2加载本地数据文件
创建一个文本文件存储的表,并以"\t"作为分隔符,方便构造和上传数据
CREATE TABLE student(
id string comment '学号',
username string comment ' 姓 名 ',
classid int comment ' 班 级 id',
classname string comment '班级名称'
)comment '学生信息主表'
partitioned by (come_date string comment '按入学年份分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS textfile;
构造与表对应的输入文件
将本地数据文件加载到表中
LOAD DATA LOCAL INPATH './student.txt' OVERWRITE INTO TABLE student PARTITION(come_date=20170903);
通过 SELECT 查看表中是否加载了数据
select * from student;
2.3加载 HDFS 数据文件
将之前的本地文件上传至自己的 hdfs 目录中
hdfs dfs -copyFromLocal student.txt /tmp/input/
加载 HDFS 数据文件的脚本
LOCAL DATA INPATH '/tmp/input/student.txt' OVERWRITE INTO TABLE student PARTITION(come_date=20170904);
注:原始的 hdfs 文件数据将被 move 到目标表的数据目录当中,注意源文件目录和目标文件目录的权限。
通过 SELECT 查看表中是否加载了数据
SELECT * FROM STUDENT;
2.4将查询结果插入到数据表中
脚本模板
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]
select_statement1 FROM from_statement
样例
insert overwrite table student1 partition(come_date='20170905')
select id,username,classid,classname from student1
where come_date='20170904';
2.5多插入模式(一次查询多次插入)
模板
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol=val)]
select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ...]
select_statement2
...
样例
from student1
insert overwrite table student1 partition(come_date='20170906')
select id,username,classid,classname where come_date='20170905'
insert overwrite table student1 partition(come_date='20170907')
select id,username,classid,classname where come_date='20170905'
insert overwrite table student1 partition(come_date='20170908')
select id,username,classid,classname where come_date='20170905'