Hive数仓导入导出

Hive数仓导入导出,分隔符

 移除点击此处添加图片说明文字

​首先看下导出吧,我们准备sql。那么首先我们看到,两张表给运营提供数据。另一方面,让我们看看hive的强大。

先看一下两张表数据量:

 select count(dt) from d.d_safedata_base_day             数据量:10836008

 select count(dt) from d.d_safedata_applist_day          数据量:   346756144

  移除点击此处添加图片说明文字

​drop table testing.weiboapplist;

接着创建中间表,查询微博的应用用户使用情况。


create table testing.weiboapplist as

select 

 a.imei,

 a.imsi,

 a.uuid,

 a.app_pakeage_name,

 a.app_name ,

 a.version_code,

 a.version_name,

 b.datetime,

 a.dt,

 b.mac,

 b.mobile_brand,

 b.product_code,

 b.model

 from

 (

  select 

  imei,imsi,uuid,app_pakeage_name,app_name,version_code,version_name,dt,timestamp

  from d.d_safedata_applist_day where dt between '20170601' and  '20170630'  and uuid <> '' and uuid is not null and app_name='微博'

  group by imei,imsi,uuid,app_pakeage_name,app_name,version_code,version_name,dt,timestamp

) a  

left join 

(

  select 

  uuid,imei,mac,mobile_brand,board,product_code,model,datetime

  from d.d_safedata_base_day where dt between '20170601' and  '20170630' 

  group by imei,mac,mobile_brand,board,product_code,model,uuid,datetime

)  b

on a.uuid =b.uuid;


这样之后,数据量大约但是,

select count(dt) from weiboapplist                      数据量:   169345

此时会有很多因为时间戳不一样的重复数据,所以,我们返回记录不需要时间戳,那么,重新清洗。


中间表创建之后,我们不要时间戳,再次去重,并且放弃时间戳。

create table testing.result as 

SELECT imei,

   imsi,

   uuid,

   app_pakeage_name,

   app_name,

   version_code,

   version_name,

   dt,

   mac,

   mobile_brand,

   product_code,

   model

  FROM

   weiboapplist

  GROUP BY

   imei,

   imsi,

   uuid,

   app_pakeage_name,

   app_name,

   version_code,

   version_name,

   dt,

   mac,

   mobile_brand,

   product_code,

   model


这样数据量就会再次变小

select count(dt) from result                            数据量:   59351

然后咱们要用hive导出了。


此时我们切换hive用户,来到/home/hive/目录下面

导出:

hive -e "select * from testing.result;" | tr '\t' ',' >result.log

  移除点击此处添加图片说明文字

​可以看到有五万九千多条。

咱们

less result.log 

然后esc       q       enter出来

wc -l result.log

看看有多少行

在pwd看看文件在哪里

  移除点击此处添加图片说明文字

​看下文件。

  移除点击此处添加图片说明文字

​然后我们把文件拿出来。

  移除点击此处添加图片说明文字

​随手改成txt呗。

  移除点击此处添加图片说明文字

​然后这个是唯品会的需求,和微博一样,那我们打开txt看看呗。

  移除点击此处添加图片说明文字

​然后创建一个空excel。

  移除点击此处添加图片说明文字

​选择数据->导入数据

  移除点击此处添加图片说明文字

​选择

  移除点击此处添加图片说明文字

​然后打开txt

  移除点击此处添加图片说明文字

​注意编码:

  移除点击此处添加图片说明文字

​注意分隔符,因为我们hive -e 命令是用逗号的,这里也要用逗号。

  移除点击此处添加图片说明文字

​选这个

  移除点击此处添加图片说明文字

​然后直接完成、下一步都可以。

会卡住一会儿。

帅气吗?25万。

  移除点击此处添加图片说明文字

​这么做有小bug。

  移除点击此处添加图片说明文字

​我们让首行进一格,然后,记住加好字段名称就可以了。

此外,去问了一下需求,原来,这么做就是想知道,从我们平台走的用户唯品会和新浪微博有多少真实的用户。其中呢,如果有手机详细信息最好,并且访问时间最好是最近的一次(这么做是叫有理可依据)

所以,我们的hive还得优化。

补充:

微博的选一个最近的用户uuid放进去

  create table testing.result3 as 

 select 

 imei ,imsi ,uuid ,app_pakeage_name,app_name ,version_code ,version_name ,dt , mac , mobile_brand , product_code , model

 from

(

select imei ,imsi ,uuid ,app_pakeage_name,app_name ,version_code ,version_name ,dt , mac , mobile_brand , product_code , model,ROW_NUMBER() OVER(PARTITION  BY uuid ORDER BY dt DESC) as num

from result1

) t

where t.num = 1

查一下数据量: 19773条

 select count(*) from (select * from result3  ) c


唯品会选一个最近的用户uuid放进去

create table testing.result4 as 

select 

imei ,imsi ,uuid ,app_pakeage_name,app_name ,version_code ,version_name ,dt , mac , mobile_brand , product_code , model

from

(

select imei ,imsi ,uuid ,app_pakeage_name,app_name ,version_code ,version_name ,dt , mac , mobile_brand , product_code , model,ROW_NUMBER() OVER(PARTITION  BY uuid ORDER BY dt DESC) as num

from result2

) t

where t.num = 1

查一下数据量: 80685条


 select count(*) from (select * from   result4  ) c

有关于导入,我记得在之前mapreduce处理已经有过截图了。这里不再赘述。

比方说,hive表创立好了,然后分区也已经建立,从hdfs中导入

hadoop fs -cp /user/hive/warehouse/testing.db/output/base-r-* /user/hive/warehouse/d.db/d_safedata_base_day/dt=20170626


你可能感兴趣的:(大数据,hive)