Hive入门

===================HIVE中的HQL练习=========================================================================================

1.一定要考虑yum源,把它换成本地的,网络问题(公司有多个人都下载很大的文件时就有问题了),软件版本问题,都是事!

2.分区可以按时间,每个月,每一天的数据放在一起!

3.注意分区字段不能和表中的字段重复,否则报错!

4.加载数据用load data local ..(当建表的时候有了分区,则加载数据的时候也需要指定分区,否则就会出错!),在HDFS中是根据分区来创建文件夹存储的,管理的!

5.添加分区是用alter命令,只是对元数据操作!

6.删除分区的时候可能会丢失数据哦,注意(如果表是内部表)!

7.指定分区为多个的时候,当加载数据的时候也要将多个分区都指定,因为在HDFS上数据分区是一级一级的存储的,创建表的时候给定分区的顺序是有意义的,因为是一级目录,二级目录!

8.当指定多个分区的时候,删除分区的时候要特别注意;不能直接将一级目录给删除哦(删除分区的时候),否则数据真的都会删除的!

9.我们做的是离线数据处理,数据量还是挺大的,所以我们一般做日志数据分区的时候,一般都是会分区的(可以按年,月,日,时进行分区),分区便于数据管理(管理某个分区内的数据),和数据分析(只分析某一个分区内(某个时间段)的数据)!

10.插入数据:(通过这种方式将分析的数据放在结果表中)
  create table like
  from psn1
  insert into table psn7
  select id ,name , address;
也可以用:  
  insert into table psn7
  select id ,name , address  from psn1;
   
   
11.一般都不会直接用insert into table tb01 values()这种方式往数据表中插入数据,这种HQL都会转换成MapReduce,这种效率太慢!

12.所以加载数据就两种方式:1.load data ...    2.insert into table psn7 select id ,name , address  from psn1;这两种方式!


13.Truncate Table 用于清空数据!


10.当数据在HDFS上的时候,当我们加载HDFS上的数据到我们的表中的时候,HDFS上的数据会消失!(移动)
   但是当数据是在本地的时候,本地上的数据就不会丢失,将文件上传到HDFS,将上传的HDFS文件移动到我们自己创建的数据表下的分区下,当多次load同一份数据的时候,在HDFS上是不会覆盖的!

11.hive2提供了一种jdbc连接的方式!

  第一种连接: beeline的命令都是以!开头!hive的默认是不开启用户名和密码的验证的!
  服务端:hiveserver2
  客户端:beeline
        !connect jdbc:hive2://node03:10000
         用户名:root
         密码随便输入        
 
  netstat -gpnl | grep java  
 
  beeline最大的优势是允许我们以jdbc的方式连接hive 服务端!
 
  第二种连接:beeline -u jdbc:hive2://node03:10000 -n root(-n指定用户名)
 
 
 
12.jdbc连接走的是Thrift协议!


13.先用MapReduce--不要用普通的java代码,跑不起来,而且MapReduce是多线程的(因为是海量数据)为日志文件进行ETL清洗(数据清洗),然后将
   数据采集(爬虫)+数据清洗最终目的就是用于数据分析!
 
14.^在中括号内核中括号外的区别?
  [^0-3],表示找到这一个位置上的字符只能是除了0到3之外的所有字符!
  ^如果在中括号之外,表示^是以什么什么开头!


16.row format定义的是序列化和反序列化:它不对源文件修改,只是在读和写的时候进行过滤!

17.Hive能简化MapReduce操作,很大一部分要归功于它自带的函数(内置函数很丰富,功能也很强大)以及可以自定义函数!

18.Hive中的自定义函数中的数据类型不能和java一样,要和MapReduce中的一样!

19.自定义的jar包上传到hive客户端所在服务器上,然后用命令加入(因为是在hive客户端执行add jar 本地目录)!

总结:
  1.HIVE是作为数据仓库而不是数据库哦!
  2.hive架构:元数据存储,关系型数据mysql!
  3.hive是将HQL解析为MR,来简化MapReduce分析!
  4.hive的三种部署方式: hive--->metastoreServer----->mysql
                        hiveSQL     数据类型     复杂类型
                        
  5.内部表与外部表的区别:
     create table tb01 like ..
     create table tb01 as select ...
  6.分区
  7.DML: (导入数据)
       1.load data...
       2.from tab01
          insert into tb02
          select ......       分析语句!
  8.select * 有的时候是不会转换成MapReduce程序的!
  9.beeline和原来的设置是没区别的,它是hive2自带的,beeline的优势是允许我们用jdbc代码来操作HIVE!
  10.函数:
       1)HIVE内置函数:
       2)用户自定义函数:
                    UDF
                   UDAF
                   UDTF

  11.用户自定义函数:脱敏!!!




====================================作业========================================



20.作业:业务需求:分析基站掉话率就是看看信号好不好,然后是否需要建基站!
  思路: 用Hive HQL实现!
   创建两者表:用insert into select from ... order by
   一张是建表的语句,一张是数据的分析!
   将HQL以及执行结果都总结下来!
   
作业:
1、基站掉话率:找出掉线率最高的前10基站
record_time:通话时间
imei:基站编号
cell:手机编号
drop_num:掉话的秒数
duration:通话持续总秒数

原表:
DROP TABLE IF EXISTS basestation;
CREATE  EXTERNAL TABLE IF NOT EXISTS default.basestation(
record_time string COMMENT '通话时间',
imei string COMMENT '基站编号',
cell string COMMENT '手机编号',
ph_num string,
call_num string,
drop_num int COMMENT '掉话的秒数',
duration int COMMENT '通话持续总秒数',
drop_rate double,
net_type string,
erl string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';

load data local inpath '/root/data' OVERWRITE into table basestation;

创建一张字段少的中间表:
create table station
as select imei,drop_num,duration from basestation;


保存结果:

DROP TABLE IF EXISTS result;
create TABLE IF NOT EXISTS default.result
as select imei,sum(drop_num/duration) as hi from station
where duration !=0 and  drop_num != 0
group by imei
order by hi desc  
limit 10;

执行结果:
357671    0.14548412399367863
355747    0.1111111111111111
353522    0.10251725470084835
354132    0.1008605851979346
351761    0.08631818640415001
355383    0.07833150166557866
358302    0.07692307692307693
356997    0.0719873460702282
353070    0.07164183651707644
863863    0.06705675833820948


        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值