1.建立表html
create table packCount (userinfo STRING, udid STRING, ip STRING, net STRING, noth STRING,noth2 STRING, noth3 STRING, phone STRING, num STRING, city STRING, pack STRING, numm STRING,downtime STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';2.上傳數據
load data local inpath '/home/wjk/hadoop/cdh3/packin/active_log2012020101.txt' overwrite into table packCount;3.寫SQL
select pack ,COUNT(udid) as PV,COUNT(distinct(udid)) as UV from packCount where udid !=''and udid!='null' group by pack;4.原數據有11個字段,第一次建表只建了9個字段。須要刪除重建
參照:http://www.hadoopor.com/thread-409-1-1.htmljava
======遺留問題========oop
1.注意了一下load的執行過程,最後又一個delete from hdfs不知道要怎麼理解spa
HIVE load數據的執行過程: hive> load data local inpath '/home/wjk/hadoop/cdh3/packin/active_log-2012020101.txt' overwrite into table packCount; Copying data from file:/home/wjk/hadoop/cdh3/packin/active_log2012020101.txt Copying file: file:/home/wjk/hadoop/cdh3/packin/active_log2012020101.txt Loading data to table default.packcount Deleted hdfs://localhost:9000/user/hive/warehouse/packcount OK Time taken: 2.611 seconds
文件從本地上傳到Hive的數據倉庫,權威指南(中文版)381頁有提示說:load是把文件從hdfs://.......移動到Hive的倉庫目錄中packCount表的目錄,即hdfs://user/hive/warehouse/packCount,"只有源文件和目標文件在同一個文件系統中移動纔會成功",那麼理解爲文件從本地磁盤,先上傳到hdfs,而後再移動到Hive的數據倉庫,而hdfs只做爲一箇中轉站,全部最後纔有一個delete這樣理解總以爲不對???求大俠幫忙解釋code
又有:"hive中刪除表,數據是不刪除的,由於自己數據就是dfs中,它只是load進去,元數據只是記錄了表與這些數據之間的關係",這樣又該怎麼解釋這個delete呢??迷惑 htm
==================2.24====================blog
#1.看到一句,"Load語句中的overwrite關鍵字告訴Hive刪除表所對應目錄中已有的全部文件,若是省去這一關鍵字,Hive就簡單的把新的文件加入目錄",全部我懷疑最後的刪除是否是由overwrite引發的,而後進行試驗。ip
#2.首先在Hive下執行:drop table packCount;而後再執行:dfs -rmr /user/hive/warehouse/packcount;控制檯報錯,提示「No such file or directory.」在dfs中查看了下果真是沒有這個目錄了。
緣由:由於我用的一直是託管表,在Drop的時候元數據和數據會一塊兒被刪除。(若是是外部表,external聲明的表,則只會刪除元數據)hadoop
#3.從新建表,load數據,此次去除overwrite關鍵字。
ci
hive> load data local inpath '/home/wjk/hadoop/cdh3/packin/active_log-2012020101.txt' into table packCount; Copying data from file:/home/wjk/hadoop/cdh3/packin/active_log-2012020101.txt Copying file: file:/home/wjk/hadoop/cdh3/packin/active_log-2012020101.txt Loading data to table default.packcount OK Time taken: 40.711 seconds
果真就沒有了那個delete!原來都是overwrite惹的禍.
#4.梳理下思路,也許能夠這麼理解:在load執行到load data to table的時候會進行一下判斷,若是使用了overwrite關鍵字,就要先刪除對應目錄的全部文件,全部會有一個Deleted hdfs://localhost:9000/user/hive/warehouse/packcount的操做,在delete以後將data放到dfs中,再load到Hive中。而Hive中就是元數據的存在形式,實際上數據就是在dfs中存放。最後在drop的時候會根據是託管表仍是外部表進行刪除。
####:我的愚見,若是不對還但願各位前輩多加指正,謝謝