http://www.aboutyun.com/thread-14942-1-1.html

问题导读
1、Hive查询语句和SQL查询语句区别与联系。
2、distribute by、group by和Sort by的区别。
3、MapJoin的优缺点是什么? 聚合函数
1.count计数
count(*):不全都是NULL,就加1;count(1):当只要有一列是NULL就不会加1;count(col):当col列不为空就会加1
2.sum求和
sum(可转成数字的值)返回bigint,比如求和后加1,1必须转化成为bigint类型,sum(col)+cast(1 as bigint)
3.avg求平均值
avg(可转化成数字的值)返回double
4.distinct不同值的个数
count(distinct col) Order by
按照某些字段排序,后面可以有很多列进行排序,默认是字典排序。Order by 是全局排序,Order by这个过程只需要一个且只有一个reduce,无论你配置多少各reduce,到最后都会汇总一个reduce进行Order by,所以当数据量非常大的时候要考虑好是否使用Order by;
select c1,other from tableName where condition order by c1,c2[asc|desc]
如:select * from usertable order id asc,name desc; Group by
根据某些字段值进行分组,有相同值的放到一起。注意,select后面查询的列,除了聚合函数外都应该出现再group by中,group by后面也可以跟表达式,如substr(col),对某一列字段截取的部分进行分组。having是在group by之后进一步进行筛选的。他使用了reduce操作,受限于reduce个数,设置reduce参数mapred.reduce.tasks。文件的输出个数就是reduce个数,文件大小与reduce处理的数据量相关。存在的问题:网络负载过重;数据倾斜,优化参数hive.groupby,skeweindata设置为true(起两个mapreduce,第一个在每个key加一个随机值,然后进行group by)。 select c1,[c2..] count(1).. from test_group where condition group by c1[,c2..] [having]
set mapred.reduce.tasks=n;
set hive.groupby.skewindata=true;
select name,count(1) as num from tableName group by name; group by 与distinct
都能达到去重的效果,走的mapreduce都是一样的流程,其reduce个数优化,还有hive.groupby.skewindata都起作用。group by中查找的必须在group by 中出现,但是distinct可以,但是distinct需要后面的多个col都相同才会去重。 Join表连接
两个表m和n之间按照on条件进行连接,m中的一条记录和n中的一条记录组成一条新的记录。
join:等值连接(内连接),只有m和n中同时存在才会筛选出。
如:
tableA col1 col2
1 w
2 j
4 g
tableB col3 col4
1 y
1 t
5 z
select a.col1,a.col2,b.col4 from (select col1,col2 from tableA) a join (select col3,col4 from tableB) b on a.col1=b.col3
result:
1 w y
1 w t
left outer join:左边的表的值无论是否在右表中出现,都会作为结果输出,如果右边的值不存在则为NULL。而右边表的值只有在左边的值出现才会出现。
select a.col1,a.col2,b.col4 from (select col1,col2 from tableA) a left outer join (select col3,col4 tableB) b on a.col1=b.col3
result:
1 w y
1 w t
2 j NULL
4 g NULL
right outer join:与left outer join正相反
result:
1 w y
1 j y
5 NULL z
left semi join :类似exists,判断左表中数据是否在右表中,如果在则筛选出来。
select a.col1,a.col2,b.col4 from (select col1,col2 from tableA) a left semi join (select col3,col4 from tableB) b on a.col1=b.col3
result:
1 w y
mapjoin:在map端完成join操作,不需要reduce,基于内存做join,属于优化操作,但是需要将整个表加载到内存中去。 select m.col1 as col1,m.col2 as col2,n.col3 as col3
from
(select col1,col2 from tableA where condition(在map端执行) )m
[left outer|right outer|left semi] join
(select col3 from tableB)n
on m.col1= n.col3 [and condition]
where condition(在reduce端执行)
注:hive中join不能使用类似<,>这种比较
如果寻在数据倾斜问题可以设置:
set hive.optimize.skewjoin=true; MapJoin
在map端把小表加载到内存中,然后读取大表,和内存中的小表进行比较。其中使用了分布式缓存。
优缺点:
不消耗reduce资源(reduce相对较小);减少reduce操作,加快程序执行;降低网络负载;
占用部分内存,所以加载到内存中的表不能太大,因为每个计算节点都会加载一次。生成较多小文件。(每个map对应一个输出文件)
使用MapJoin:
自动使用
配置:set hive.auto.convert.join=true;
set hive.mapjoin.smalltable.filesize=n(当查询的表中小表小于等于这个值就会使用MapJoin。但是可能会有很多任务,都加载进去了消耗内存)
手动指定
slelet /*+mapjoin(n)*/ m.col1,m.col2,n.col4 from (...)m join (...)n on m.col1=n.col3
也就是在select中将小表使用/*+mapjoin(n)*/参数加载到内存中去 Distribute by 和 Sort by
distribute by col1,col2
按照col列将数据分散到不同的reduce
sort by col1,col2[asc|desc]
将col1,col2列排序(这是将每个reduce内部排序)
两者接合使用,确保每个reduce的输出都是有序的,但是整体不是有序的。 distribute by 和 group by
都是按照key划分数据
都是用reduce操作
distribute by只是单纯的分散数据,而group by是将相同的key聚集到一起,后续必须是聚合操作
order by 和sort by
order by确保全局有序
sort by只是保证每个reduce上面输出有序,如果只有一个reduce时,和order by效果一样
应用场景
小文件过多(通过reduce个数来控制输出文件个数)
文件超大
map输出的文件大小不均
reduce输出的文件大小不均 cluster by
把有相同的数据聚集到一起,并排序
cluster by col
相当于:distribute by col col order by col union all
将多个表的数据合并成一个表,hive部支持union操作
select col
from(
select a as col from t1
union all
select b as col from t2
)tmp
没有reduce操作
要求:
字段名字一样(可以通过as使用别名)
字段类型一样
字段个数一样(子查询的个数)
字表不能又别名(join每个子查询要别名)
合并之后的表如果需要查询数据,则需要给合并结果起别名

  

Hive SQL 常见问题(转载)的更多相关文章

  1. Hive SQL的编译过程[转载自https://tech.meituan.com/hive-sql-to-mapreduce.html]

    https://tech.meituan.com/hive-sql-to-mapreduce.html Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hi ...

  2. 【甘道夫】使用HIVE SQL实现推荐系统数据补全

    需求 在推荐系统场景中,假设基础行为数据太少,或者过于稀疏,通过推荐算法计算得出的推荐结果非常可能达不到要求的数量. 比方,希望针对每一个item或user推荐20个item,可是通过计算仅仅得到8个 ...

  3. Hadoop Hive sql 语法详细解释

    Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  4. 【hive】——Hive sql语法详解

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  5. Hive SQL 监控系统 - Hive Falcon

    1.概述 在开发工作当中,提交 Hadoop 任务,任务的运行详情,这是我们所关心的,当业务并不复杂的时候,我们可以使用 Hadoop 提供的命令工具去管理 YARN 中的任务.在编写 Hive SQ ...

  6. hive 面试题 转载

    转自:http://blog.csdn.net/ningguixin/article/details/12852051 有一张很大的表:TRLOG该表大概有2T左右TRLOG:CREATE TABLE ...

  7. hive sql 语法详解

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  8. Hive sql 语法解读

    一. 创建表 在官方的wiki里,example是这种: Sql代码   CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name d ...

  9. Spark(Hive) SQL中UDF的使用(Python)

    相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内 ...

随机推荐

  1. [转]MySQL 数据类型(二)

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...

  2. OPENCV下SIFT算法使用方法笔记

    这几天继续在看Lowe大神的SIFT神作,看的眼花手脚抽筋.也是醉了!!!!实在看不下去,来点干货.我们知道opencv下自带SIFT特征检测以及MATCH匹配的库,这些库完全可以让我们进行傻瓜似的操 ...

  3. nodejs+mysql入门实例

    此前我已准备好mysql,使用的是PHP的组合包Appserv 手动添加数据库依赖: 在package.json的dependencies中新增, “mysql” : “latest”, { &quo ...

  4. 粗览Activiti Modeler操作和源代码

    Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...

  5. 为什么控制台console.log一个值,总是会多一个undefined

    我们发现在浏览器控制台打印东西的时候,末尾总是会莫名其妙多出一个undefined? 这是为什么呢? 大胆猜测一下,应该执行的函数没有返回值,而浏览器默认要打印出执行函数的返回值,才会打印undefi ...

  6. iOS:多线程同步加锁的简单介绍

    多线程同步加锁主要方式有3种:NSLock(普通锁).NSCondition(状态锁).synchronized同步代码块 还有少用的NSRecursiveLock(递归锁).NSConditionL ...

  7. Ubuntu 13 Zookeeper 集群配置

    一. 目标 在Linux集群搭建Zookeeper集群,并配置管理Web管理系统. 二. 先决条件 本文档中基于VirtualBox Ubuntu Server 13.04 虚机(启动SSH服务器)构 ...

  8. MVC与MVT

    MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封装 v表示 ...

  9. weblogic8.1 登陆5 ip 限制

    weblogic8.1  5 ip 限制 报错信息如图所示: 解决办法:此weblogic 未破解,去网上下载破解包,然后放到 copy weblogic_sp.jar to $WL_HOME/ser ...

  10. PHP实现程序单例执行

    原创文章,转载请注明出处:http://huyanping.sinaapp.com/?p=222 作者:Jenner 一.场景描写叙述: 近期我们一块业务.须要不断的监听一个文件夹的变化.假设文件夹中 ...