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

      ④查询结果,如下图。

      

  • 相关阅读:
    迁移服务器遇到django-crontab不执行定时任务问题
    纯CSS3+DIV实现小三角形边框
    mysql密码错误-ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)
    收货地址下边的平行四边形彩色线条
    小程序导航栏全屏navigationStyle自定义导航栏,小程序轮播图导航栏
    移动宽带下Github网页上不去的解决办法
    线段比例式或等积式的证明思路
    两角不等的证明思路
    线段不等的证明思路
    两角相等的证明思路
  • 原文地址:https://www.cnblogs.com/invban/p/5330131.html
Copyright © 2011-2022 走看看