Hive表DML操作

第1关:将文件中的数据导入到Hive表中

编程要求

student表结构:

INFOTYPE
SnoINT
nameSTRING
ageINT
sexSTRING
scoreSTRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT>

本地文件/home/student.txt的内容为:

  • 创建数据库test1

  • 切换到test1数据库;

  • 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 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;

第2关:select操作

编程要求

test2数据库中student表结构为:

INFOTYPECOMMENT
SnoINTstudent sno
nameSTRINGstudent name
ageINTstudent age
sexSTRINGstudent sex
scoreSTRUCT <Chinese:FLOAT,Math:FLOAT,English:FLOAT>student score

表中的数据为:

  • 切换到test2数据库;

  • 查询student表中所有的行和列;

  • 查询年龄age > 17的女生female

  • 查询语文成绩Chinese > 90的记录;

  • student表中查询前3条记录;

  • 返回按年龄降序的前2条记录。

--Begin
use test2;
select * from student;
select * from student where age>17 and sex="female";
select * from student where score.Chinese>90;
select * from student limit 3;
select * from student sort by age desc limit 2;
--End

第3关:将select查询结果插入hive表中

编程要求

test3数据库中有student表,表中数据如下:

Snonameagesexscore(Chinese-Math-English)
001Xiaohong18female96-88-90.5
002Xiaoliang17male95-88-93.5
003Xiaoming19male86.5-98-91
004Xiaoguang18male88-80-94
005Xiaohua16female97-58.5-88
  • 复制student表两份,分别名为:student2student3 (只复制表结构不复制数据,可参考:Hive表DDL操作(一)第二关

  • 以覆盖插入的方式把student表中前两条数据插入到student2

  • 以追加插入的方式把student表中前两条数据插入到student2

  • 以覆盖插入的方式把student表中年龄大于17岁的数据插入到student2student3

  • 以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3

--Begin
--使用test3数据库
use test3;
--复制student表两份,分别名为:student2、student3
create table if not exists student2 like student;
create table if not exists student3 like student;


--以覆盖插入的方式把student表中前两条数据插入到student2中
insert overwrite table student2 select * from student limit 2;

--评测代码,勿删
select * from student2;

--以追加插入的方式把student表中前两条数据插入到student2中
insert into table student2 select * from student limit 2;

--评测代码,勿删
select * from student2;

--以覆盖插入的方式把student表中年龄大于17岁的数据插入到student2、student3中
from student
insert overwrite table student3 select * where student.age>17
insert overwrite table student2 select * where student.age>17;

--评测代码,勿删
select * from student2;
select * from student3;

--以追加插入的方式把student表中的男生数据插入到student2,以覆盖插入的方式把女生数据插入到student3中
from student
insert into table student2 select * where student.sex='male'
insert overwrite table student3 select * where student.sex='female';

--评测代码,勿删
select * from student2;
select * from student3;
--End

第4关:将select查询结果写入文件

编程要求

test4数据库中有student表,表中数据如下:

Snonameagesexscore(Chinese-Math-English)
001Xiaohong18female96-88-90.5
002Xiaoliang17male95-88-93.5
003Xiaoming19male86.5-98-91
004Xiaoguang18male88-80-94
005Xiaohua16female97-58.5-88
  • 查询student表中的前两条数据写入到本地文件/home/test4目录下

  • 查询student表中男生的数据写入到本地文件/home/test4_1目录下,女生的数据写入到本地文件/home/test4_2目录下

--使用test4数据库
use test4;
--Begin
insert overwrite local directory '/home/test4' select * from student limit 2;
from student st
insert overwrite local directory '/home/test4_1' select * where st.sex='male'
insert overwrite local directory '/home/test4_2' select * where st.sex='female';

--End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值