檔案的載入,只需要三步就夠了,廢話不多說,來直接的吧。
一、建表
話不多說,直接開始。
建表,對於日誌檔案來說,最後有分割槽,在此案例中,對年月日和小時進行了分割槽。
建表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查詢的資料落地到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';
④查詢結果,如下圖。