Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解

文件的加载,只需要三步就够了,废话不多说,来直接的吧。

一、建表

话不多说,直接开始。

建表,对于日志文件来说,最后有分区,在此案例中,对年月日小时进行了分区。

建表tracktest_log,分隔符为“ ”部分:

在hive的default库中,建表,建表语句为:

 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 '	';
建表语句

全表默认字符类型为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查询的数据落地到HDFShive其他表

   ①新建一个数据库,并指定存储路径。

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

  ④查询结果,如下图。

  

原文地址:https://www.cnblogs.com/invban/p/5330131.html