hive 多个key需要 group by

请问下,如果有多个统计,要统计的数据都一样,每个统计只是group by 的key不一样,
怎样做,才能让这些统计最快完成?

恩,比如有10个统计,每个统计都是读取的同一份数据,但是统计的维度不一样,就是group by的key不一样
你们都是怎么处理的?

语句类似这个::

from(
select k1,k2,k3 ffrom table
) tmp

insert directory ... select k1,count(1) group by k1 USING ‘replicated,skewed....‘
insert directory ... select k2,count(1) group by k2

虽说hive会对原表扫描一次,然后执行下面的操作,但是基本上每个group by 都会有一个Mapreduce完成,更重要的是考虑到map端优化以及数据倾斜,可能一个group by需要两个MR完成。

有没有好的方式呢??

使用MR直接实现:

  1、数据输入就是那个原表

  2、关键是key的设计,将分组的key分别继承一个BaseKey,这个BaseKey就是Map输出key的类型

  3、分区的设计,依据key的实际类型进行划分,使同一个key能够划到同一个reduce里面,进行聚集。

  4、针对结果进行更改文件名字(可在reduce输出的第一行设置标记)

---------------------

  缺陷:

  reduce的个数需要>=分组的个数,这样数据量大的情况下不利。

  

hive 多个key需要 group by

时间: 2024-10-07 10:15:56

hive 多个key需要 group by的相关文章

PuTTY 错误:“expected key exchange group packet

使用 PuTTY 通过 SSH 访问出现错误:"expected key exchange group packet from server". 解决:在 PuTTY 的左侧窗格中,导航到"连接" > SSH > Kex.在算法选择策略下,选择 "Diffie-Hellman group exchange".单击向下.此操作会将"Diffie-Hellman group exchange"移出第一个位置,以更改所用

navicat使用ssh登录mysql报错:expected key exchange group packet from server

一.navicat ssh连接方式 由于公司使用的是阿里云的RDS,需要通过内网连接数据库(不直接提供公网访问),此时可以使用navicat的ssh方式,通过一台跳板机连接内网的RDS 二.连接报错及解决方式 报错:SSH: expected key exchange group packet from server 解决方式: 1.升级navicat 2.修改sshd的配置 01 02 [[email protected] ~]#vim /etc/ssh/sshd_config  #编辑ssh

Hive基本语法操练

建表规则如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (

hive里的优化和高级功能

在一些特定的业务场景下,使用hive默认的配置对数据进行分析,虽然默认的配置能够实现业务需求,但是分析效率可能会很低. Hive有针对性地对不同的查询进行了优化.在Hive里可以通过修改配置的方式进行优化. 以下,几种方式调优的属性. 1.列裁剪 在通过Hive读取数据的时候,并不是所有的需求都要获取表内的所有的数据.有些只需要读取所有列中的几列,而忽略其他列的的数据. 例如,表Table1包含5个列Column1.Column2.Column3.Column4.Column5.下面的语句只会在

Hive 12、Hive优化

要点:优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜. 理解hadoop的核心能力,是hive优化的根本. 长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜. 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,没半小时是跑不完的.map reduce作业初始化的时间是比较长的. 3.对sum,count来说,不存在数据倾斜问题. 4.对count(distinct )

Hive中分组取前N个值

分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的列进行分组生成行序列.在ROW_NUMBER(a,b) 时,若两条记录的a,b列相同

Pig、Hive、MapReduce 解决分组 Top K 问题(转)

问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 5002 bj 6003 wh 1004 sh 4005 wh 2006 bj 1007 sh 2008 bj 3009 sh 900需要按 city 分组聚合,然后从每组数据中取出前两条value最大的记录. 1.这是实际业务中经常会遇到的 group TopK 问题,下面来看看 pig 如何解决: 1 a = load '/data/city.txt'  using PigSto

Hive ive优化 (important)

Hive ive优化 要点:优化时,把hive sql当做map reduce程序来读,会有意想不到的惊喜. 理解hadoop的核心能力,是hive优化的根本. 长期观察hadoop处理数据的过程,有几个显著的特征: 1.不怕数据多,就怕数据倾斜. 2.对jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,没半小时是跑不完的.map reduce作业初始化的时间是比较长的. 3.对sum,count来说,不存在数据倾斜问题. 4.对count

hive组件和执行过程

转自http://blog.csdn.net/lifuxiangcaohui/article/details/40262021 对Hive的基本组成进行了总结: 1.组件: 元存储(Metastore )-存储“系统目录以及关于表.列.分区等的元数据”的组件.驱动(Driver )- 控制 HiveQL 生命周期的组件,当 HiveQL 查询穿过 Hive时.该驱动管理着会话句柄以及任何会话的统计.查询编译器(Query Compiler) - 是一个组件,将HiveQL编译成有向无环图(dir