Hive學習之四 《Hive分割槽表場景案例應用案例,企業日誌載入》 詳解

木子小僧發表於2016-03-28

檔案的載入,只需要三步就夠了,廢話不多說,來直接的吧。

一、建表

話不多說,直接開始。

建表,對於日誌檔案來說,最後有分割槽,在此案例中,對年月日小時進行了分割槽。

建表tracktest_log,分隔符為“\t”部分:

在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 '\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查詢的資料落地到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';

  ④查詢結果,如下圖。

  

相關文章