#Hive#Hive的一点认识

Hive的一点认识


Author:杜七
Date:2013.3.21


1,什么是Hive

关于Hive,随便google,都能找到很多,比如看这里.其实,如果你对数据库有过了解,也找到一点SQL,那完全可以简单的把它当数据库,然后可以通过SQL语言来查询数据,就可以了,只不过它是部署在HADOOP上的外层的一个“查询接口”罢了。

2,怎么来用Hive

既然可以把它当数据库,可以用SQL查询,使用它,那就简单了。首先,要理解数据在数据库是怎么样存储的。数据库中,数据是以行列为单位,为单元来存储的。因此,任何的SQL的查询,都是基于表的,任何行列数据的切割整合。Hive也不例外。
其实,Hive就是把表中的数据,根据列的一些存储特性以及自己的需求,选取出来,有易到难。请记住,是对的操作。主要涉及以下四种操作:

1)基本查询

这里有一张表-customer_info,存放在一部分客户的信息-两列(name,age),如下:

name age
张三 29
李四 30
王五 31

最简单的,我想找所有的客户名单,就要这样来查:

select name from customer_info;

2)条件查询

基本查询,满足不了有些特定的需求,比如,现在我想找年龄大于30的客户的信息,改怎么做,如下:

select * from customer_info where age>30;

这个例子很简单,只有一个限制条件,然后来查询。其实,在实际的应用过程中,根据不同的需求,添加更多的查询条件都是一样的,只不过,where后面多加几个AND而已。
条件查询,在日常的使用占大多数。

3)关联查询

有些时候,需要的数据不在一张表中,而是分散在几张数据表里面,该怎么办呢?比如,现在还有一张工资表-Salary,如下:

name salary
张三 5000
李四 5500
王五 7000

现在想统计下年龄大于30的员工的薪水是多少?从上面两张表,如果单独来统计,都不行,必须要从customer_info找到年龄大于30的员工,然后salary中找到薪水,两者关联起来。因此,join的操作就用到了。
在日常工作中,join使用的频率最多。上面的统计,如下:

select distinct a.name,b.salary
from
(
select *
from customer_info
where age>30) a
join
(
select *
from salary) b
on a.name=b.name;

这个统计就稍微复杂点了,里面夹杂了基本查询,条件查询,以及关联查询三种。如果这一步写的非常好了以后,基本的Hive的使用,就可以学会一半了。

4)函数的使用

当基本查询,条件查询,关联查询都掌握的时候,可能就可以根据自己的想法提取很多数据了。但是,有的时候,很多需求或者想法,要求的数据比较特别,或者模糊,或者意外,仅仅简单的提取数据还满足不了。比如,想统计“张”姓员工的平均年龄,和平均salary。这用到了统计的一个概念-Average,以及模糊匹配。因此,单单的根据列提取数据,还不行,必须要通过一些特殊的函数来描述需求点,比如:

select AVERAGE(a.age),AVERAGE(b.salary)
from
(
select *
from customer_info
where name like '%张%') a
join
( select *
from salary) b
on a.name=b.name;

上述统计里面,就用到like-模糊匹配,以及AVERAGE()函数,来计算平均值。Hive里面,有一些基本的函数,比如SUBSTR(),COUNT(),SUM()等,除此之外,还有其他人写的UDF包,里面也有一些特别的函数,比如row_number()等等。基于这些函数,对于一般的数据提取,Hive基本都可以满足了。根据自己的经验,关联查询+函数+一点点技巧,可以满足自己大部分的数据提取和处理需求。当然,有些需要深度处理的,可以交给其他的统计软件来处理,比如SAS,R。

3,后记

当然,Hive仅有的Join只支持等值连接,以及还有很多其他SQL该有的功能也不支持,但是,基于HADOOP的hive,对于大数据量可以快速的提取,还是很赞的。
在日常的数据分析工作中,快速提取基本的数据是前提,基础数据有了以后,再根据自己的想法通过一些统计软件来处理,得到自己想要的结果才是根本。如果想通过Hive就做Hive+SAS或者Hive+R的工作,未免也太Happy了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值