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的时候会根据是托管表仍是外部表进行删除。
####:我的愚见,若是不对还但愿各位前辈多加指正,谢谢