HIVE的一个情景实现

本文介绍了在Hive中实现一个业务场景,包括创建数据库和表,从本地及HDFS导入数据,进行联表查询,数据保存到本地和HDFS,以及删除和合并数据的操作。具体涉及用户基本信息表和用户手机信息表的数据处理。
摘要由CSDN通过智能技术生成

在学习Hive中的一个关于Hive的应用场景

场景:

公司有两张业务表:1. 用户基本信息表; 2. 用户手机信息表
用户基本信息表有以下字段:user_id,gender,birthdate, create_time, address。每个用户一条记录
用户手机信息表字段:user_id, mobile, carrier, belong_to。每个用户可能有多条记录。部分手机号是错的,比如只有10位、非正常数字开头的。有部分手机超过11位,但是是正确的,因为开头加了中国区号(86或+86)。
注:carrier运营商,belong_to所属地,birthdate格式有两种:yyyy-MM-dd, yyyyMMdd,create_time格式:yyyy-MM-dd HH:mm:ss

操作:
a. 根据场景建相应的表,造测试数据插入

b. 查询

c. 从本地导数据到hive

d. 从hdfs到数据到hive

e. 联表查询,如按性别统计手机数、统计每个人拥有的手机数等等

f. 从hive取数保存到本地

g. 从hive取数保存到hdfs

h. 删除某一用户的数据

i. 合并两张表到一张新表

实现:

创建数据库v_test

create databse if not exists v_test;

创建数据表单user_info和user_phone_info

create table if not exists user_info(
user_id int,
gender int,
birthdate string,
create_time string,
address string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
stored as textfile;

create table if not exists user_phone_info(
user_id int,
mobile string,
carrier string,
belong_to string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
stored as textfile;

插入数据操作

insert into table user_info values (10,1,’2016-07-07’,’2016-07-07’,’民生银行隔壁’);
insert into table user_phone_info values(10,’156448464’,’铁通’,’铁路局’);

本地导数据,先使用pscp,传输到/home/zeus/victor/下

从本地数据导入hive

load data local inpath ‘/home/zeus/victor/userPhone.txt’ into table user_phone_info;
load data local inpath ‘/home/zeus/victor/userInfo.txt’ into table user_info;

从hadoop 导入数据到hive

注意导入文件的格式,如果错误会出现null数据

hadoop fs -put /home/zeus/victor/userPhone.txt victor

load data inpath ‘victor/userPhone.txt’ into table user_phone_info;

联表查询

select count(phone.mobile) from user_info info join user_phone_info phone on(info.user_id=phone.user_id) group by info.gender;

select count(phone.mobile) from user_info info join user_phone_info phone on(info.user_id=phone.user_id) group by info.user_id;

保存到本地

insert overwrite local directory ‘/home/zeus/victor/’ select * from user_info;

保存到HDFS

insert overwrite local directory ‘victor/’ select * from user_phone_info;

擦除数据,擦除id为0的用户

insert overwrite table user_info select * from user_info where user_id!=0;

合成新表

create table if not exists user_unio(
user_id int,
gender int,
birthdate string,
create_time string,
address string,
mobile string,
carrier string,
belong_to string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
stored as textfile;

insert into table user_unio select info.user_id,gender,birthdate,create_time,address,mobile,carrier,belong_to from user_info info full outer join user_phone_info phone on (info.user_id=phone.user_id);

导入数据:
userInfo.txt:
1 1 2016-07-01 2016-07-01 民生
2 2 2016-07-02 2016-07-02 银行隔壁
3 3 2016-07-03 2016-07-03 民生银行隔壁
4 1 2016-07-04 2016-07-04 民生隔壁
5 1 2016-07-05 2016-07-05 隔壁

userPhone.txt
1 15626470246 联通 乌鲁木齐
2 186666667666 移动 广州
3 8615626470246 联通 广州
4 +8615626470246 联通 广州
5 18819472411 移动 北京
5 18819472412 移动 北京
5 18819472413 移动 北京
5 18819472414 移动 北京
5 18819472415 移动 北京

另外:千万注意格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值