Hive之数据查询

本文详细介绍了Hive在数据查询方面的应用,包括排序和聚合、MapReduce脚本、各种关联操作(如内关联、外关联、半关联、Map关联)、子查询以及视图的使用。Hive提供了一种类SQL的方式来处理大规模数据,如通过ORDER BY和SORT BY进行排序,使用TRANSFORM调用外部脚本进行数据处理,以及通过JOIN操作进行表关联。此外,还讨论了视图的创建和使用,以及如何利用子查询增强查询能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive为大规模的数据分析提供了一种类SQL的查询语言,在数据仓库中是一种很常见的工具。

1. 排序和聚合

排序使用常规的ORDER BY来完成,Hive在处理ORDER BY请求时,并行排序,最终产生一个全局排序结果。如果全局有序不是必须的,那么可以使用Hive的非标准扩展SORT BY,它返回的是一个局部有序的结果,每个Reducer内部有序,每个Reducer产生一个有序的文件。

有时候我们想控制数据去往哪个Reducer以便进行下一步处理,这时候可以使用Hive的DISTRIBUTED BY操作。下面的语句中,年份相同的数据被分发到同一个Reducer,在Reducer内部进行排序:

FROM records2
SELECT year,temperature
DISTRIBUTED BY year
SORT BY year ASC, temperature DESC;

下一步的处理就可以基于相同年份的数据被分组并排序这一点进行相应的操作,也可以将上述语句作为子查询嵌入。如果SORT BY和DISTRIBUTED BY的字段一样,可以简化为CLUSTER BY。注意区别于分桶中的CLUSTERED BY.

2. MapReduce脚本

使用类似于Hadoop Streaming的方式,TRANSFORM,MAP,REDUCE从句使得我们可以在Hive中调用外部程序(脚本)。例如,我们使用下面的Python脚本来过滤脏数据:

#!/usr/bin/env python

import re
import sts

for line in sys.stdin:
  (year,temp,q) = line.strip().split()
  if ( temp != "9999" and re.match("[01459]" ,q)):
    print "%s\t%s" % (year,temp)

上面的脚本非常独立,我们很容易测试和开发。接着如下使用这个脚本:

ADD FILE /user/root/python/is_good_quality.py;

FROM records
SELECT TRANSFORM(year,temperature ,quality)
USING 'is_good_quality.p
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值