`
superlxw1234
  • 浏览: 541891 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:43138
社区版块
存档分类
最新评论

hive中合理使用union all与multi insert

 
阅读更多

对同一张表的union all 要比多重insert快的多,
原因是hive本身对这种union all做过优化,即只扫描一次源表;

http://www.apacheserver.net/How-is-Union-All-optimized-in-Hive-at229466.htm

而多重insert也只扫描一次,但应为要insert到多个分区,所以做了很多其他的事情,导致消耗的时间非常长;
希望大家在开发的时候多测,多试!

 

lxw_test3 12亿左右记录数

Union all : 耗时7分钟左右

 

create table lxw_test5 as 
select type,popt_id,login_date 
from (
        select 'm3_login' as type,popt_id,login_date  
        from lxw_test3 
        where login_date>='2012-02-01' and login_date<'2012-05-01' 
        union all 
        select 'mn_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-05-01' and login_date<='2012-05-09' 
        union all 
        select 'm3_g_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='1' 
        union all 
        select 'm3_l_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='2' 
        union all 
        select 'm3_s_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='3' 
        union all 
        select 'm3_o_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='4' 
        union all 
        select 'mn_g_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='1' 
        union all 
        select 'mn_l_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='2' 
        union all 
        select 'mn_s_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='3' 
        union all 
        select 'mn_o_login' as type,popt_id,login_date 
        from lxw_test3 
        where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='4' 
) x

 

多重insert耗时25分钟左右:

 

from lxw_test3 
insert overwrite table lxw_test6 partition (flag = '1') 
select 'm3_login' as type,popt_id,login_date  
where login_date>='2012-02-01' and login_date<'2012-05-01' 
insert overwrite table lxw_test6 partition (flag = '2') 
select 'mn_login' as type,popt_id,login_date 
where login_date>='2012-05-01' and login_date<='2012-05-09' 
insert overwrite table lxw_test6 partition (flag = '3') 
select 'm3_g_login' as type,popt_id,login_date 
where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='1' 
insert overwrite table lxw_test6 partition (flag = '4') 
select 'm3_l_login' as type,popt_id,login_date 
where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='2' 
insert overwrite table lxw_test6 partition (flag = '5') 
select 'm3_s_login' as type,popt_id,login_date 
where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='3' 
insert overwrite table lxw_test6 partition (flag = '6') 
select 'm3_o_login' as type,popt_id,login_date 
where login_date>='2012-02-01' and login_date<'2012-05-01' and apptypeid='4' 
insert overwrite table lxw_test6 partition (flag = '7') 
select 'mn_g_login' as type,popt_id,login_date 
where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='1' 
insert overwrite table lxw_test6 partition (flag = '8') 
select 'mn_l_login' as type,popt_id,login_date 
where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='2' 
insert overwrite table lxw_test6 partition (flag = '9') 
select 'mn_s_login' as type,popt_id,login_date 
where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='3' 
insert overwrite table lxw_test6 partition (flag = '10') 
select 'mn_o_login' as type,popt_id,login_date 
where login_date>='2012-05-01' and login_date<='2012-05-09' and apptypeid='4'

更多大数据Hadoop、Spark、Hive的文章,请关注 我的博客

 

 

分享到:
评论
4 楼 元博之 2013-03-28  
还不知道啊为啥%
3 楼 元博之 2013-03-28  
,刚好有用到,实验结果跟你的一样,union all 耗时比multi-insert少很多,唯一的不同的是创建表我用的动态分区。
2 楼 superlxw1234 2012-08-02  
wsbxd 写道
多重insert的时候,是不是有多少个select就会产生多少个JOB?

不是的,一个insert overwrite ... select就会产生2个job了,另外还得看select语句的逻辑
1 楼 wsbxd 2012-07-31  
多重insert的时候,是不是有多少个select就会产生多少个JOB?

相关推荐

    Hive使用手册Hive使用手册

    1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 3.2 删除数据库: 3 4 Hive 表相关语句 3 4.1 Hive ...

    presto和hive的使用区别

    Hive是把一个查询转化成多个MapReduce任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步。然而,Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中...

    hive on tez 常见报错问题收集

    1)Failing because I am unlikely to write too. 2)Caused by: java.lang.OutOfMemoryError: Java heap space ...5)hive on tez 最终insert的表如果使用到union all 时会导致直接查询结果表数据为空的

    hive udaf 实现按位取与或

    hive udaf 实现按位取与或 hive udaf 实现按位取与或 hive udaf 实现按位取与或

    hive-jdbc-all.zip

    jdbc连接hive的所有jar包,版本hive-jdbc 1.1.0版本

    Hive用户指南(Hive_user_guide)_中文版.pdf

    而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ... SET 修改数据。 5. 索引。之前已经说过, Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    适用人群:hive学习童鞋,hive方面从业人员 从hive的搭建 到 hive的分区表/内部表/外部表/分桶等sql讲解

    hive的安装与使用

    hive的安装与使用过程,是你不敢相当于还能修复好的哈人家还能够充分股份都是

    Hive几种数据导入方式

    Ambari搭建hadoop环境下,hive的数据导入

    hive复合类型使用

    列举了hive中的复合类型的使用,map array struct

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) ...17_Hive中使用Python脚本进行预处理

    hive

    hive hive hive hive hive hive hive hive hive hive hive hive

    Apache Hive 中文手册_hive_

    Apache Hive 是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供...

    Hive中SQL详解

    Hive中SQL详解

    大数据之Hive官方文档简要翻译(中文文档)

    将官方文档做了简要翻译 ...元数据使用JPOX ORM解决方案(Data Nucleus)持久化,因此它支持的任何数据库都可以被Hive使用。大多数商业关 系数据库和许多开源数据库都受到支持。请参阅下面一节中支持的数据库列表。

    部分普通sql查询在hive中的实现方式

    部分普通sql查询在hive中的实现方式详细说明;

    hive修改过的jdbc包,用于显示hive中的中文内容

    如果系统语言不是utf-8的话,通过jdbc调用hive的数据时,中文会是乱码,通过修改jdbc包加上utf8标识后就好了,这个是改好了的包

    hive编程指南中文

    《Hive编程指南》是一本Apache Hive的编程指南 旨在介绍如何使用Hive的SQL方法 HiveQL来汇总 查询和分析存储在Hadoop分布式文件系统上的大数据集合 全书通过大量的实例 首先介绍如何在用户环境下安装和配置Hive 并对...

    hive metastore java api使用

    hive metastore是hive的元数据管理服务,实际应用中很多第三方框架需要访问metastore服务,如spark,impala等。同样hive metastore也提供了java接口。 使用 import org.apache.hadoop.hive.conf.HiveConf; import org...

    【官网汉化中文】Hive函数运算符使用方法大全

    hive所有函数 包括UDTs、UDAF、UDTF函数和运算符等,中文汉化,翻译并测试

Global site tag (gtag.js) - Google Analytics