zoukankan      html  css  js  c++  java
  • 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';

      ④查询结果,如下图。

      

  • 相关阅读:
    [CF724G]Xor-matic Number of the Graph
    [SOJ #537]不包含 [CF102129I]Incomparable Pairs(2019-8-6考试)
    [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
    [洛谷P4052][JSOI2007]文本生成器
    [洛谷P3966][TJOI2013]单词
    [洛谷P5158]【模板】多项式快速插值
    [洛谷P3227][HNOI2013]切糕
    【bzoj】3477: [Usaco2014 Mar]Sabotage 01分数规划
    【SPOJ
    【以前的空间】系列
  • 原文地址:https://www.cnblogs.com/invban/p/5330131.html
Copyright © 2011-2022 走看看