Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解
文件的加载,只需要三步就够了,废话不多说,来直接的吧。
一、建表
话不多说,直接开始。
建表,对于日志文件来说,最后有分区,在此案例中,对年月日和小时进行了分区。
建表tracktest_log,分隔符为“\t”部分:
在hive的default库中,建表,建表语句为:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 create table tracktest_log ( 2 id string , 3 url string , 4 referer string , 5 keyword string , 6 type string , 7 guid string , 8 pageId string , 9 moduleId string , 10 linkId string , 11 attachedInfo string , 12 sessionId string , 13 trackerU string , 14 trackerType string , 15 ip string , 16 trackerSrc string , 17 cookie string , 18 orderCode string , 19 trackTime string , 20 endUserId string , 21 firstLink string , 22 sessionViewNo string , 23 productId string , 24 curMerchantId string , 25 provinceId string , 26 cityId string , 27 fee string , 28 edmActivity string , 29 edmEmail string , 30 edmJobId string , 31 ieVersion string , 32 platform string , 33 internalKeyword string , 34 resultSum string , 35 currentPage string , 36 linkPosition string , 37 buttonPosition string) PARTITIONED BY (ds string,hour string) 38 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
全表默认字符类型为string,分区为ds和hour。
如下图所示:
desc tracktest_log;查看表结构。
看到分区结构如下图,分区信息为ds和hour。
二、load,加载企业日志文件
load语法:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
Insert方式有两种,一种是append(追加),一种是overwrite(覆盖),其中覆盖应该最广。在此案例中,采用overwrite方式。
在虚拟机中,创建一个存放日志的文件。
指令如下所示(在opt目录下,创建一个存放日志的date文件夹):
cd /opt mkdir /litong cd /litong mkdir date
上传日志文件,load语句。
LOAD DATA LOCAL INPATH '/opt/litong/data/2015082818' overwrite INTO TABLE tracktest_log PARTITION (ds='2015-08-28',hour='18');
LOAD DATA LOCAL INPATH '/opt/litong/data/2015082819' overwrite INTO TABLE tracktest_log PARTITION (ds='2015-08-28',hour='19');
去检测是否load成功。因为验证的问题特别多,所以只取5行。
select * from tracktest_log limit 5;
三、Hive的存储
1、hadoop查看表,在每个分区下,又有一个子目录,详细看下面两个图。
从图中可以看到,hour=18和hour=19.
2、把hive查询的数据落地到HDFS或hive其他表
①新建一个数据库,并指定存储路径。
create database rptest location '/user/hive/warehouse/rptest';
②在创建的rptest中,新建表visit_daily。
create table visit_daily (pv bigint, uv bigint )partitioned by(ds string);
③查询数据并插入新建的表中
insert overwrite table visit_daily partition (ds='2015-08-28') select count(url) pv , count(distinct guid) uv from default.tracktest_log where ds='2015-08-28';
④查询结果,如下图。