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

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 on tez 常见报错问题收集

    Hive on Tez在处理insert语句与union all结合时,会进行优化,这可能导致在MR引擎中查询结果为空。解决方法包括: - 避免使用union all生成结果表,改用其他查询方式。 - 设置`mapred.input.dir.recursive`为true...

    Hive使用手册Hive使用手册

    1. **Hive概念与连接使用** Hive是建立在Hadoop之上的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,方便大数据的分析。连接Hive通常通过Hive Shell或使用其他支持Hive的客户端如...

    presto和hive的使用区别

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

    大数据技术基础实验报告-Hive安装配置与应用.doc

    【大数据技术基础实验报告-Hive安装配置与应用】 在大数据处理领域,Apache Hive是一个非常重要的组件,它提供了基于Hadoop的数据仓库工具,用于数据查询、分析以及存储。本实验报告将详细阐述如何安装、配置Hive,...

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

    “Hive搭建使用笔记”可能包含了实践过程中的注意事项、常见问题及其解决方案,是学习过程中宝贵的参考资料。 通过这个压缩包,你可以全面掌握Hive的基础知识,包括安装、配置、表管理和SQL操作。实践是学习最好的...

    Hive metastore 使用达梦数据库存储元数据

    解决方法是替换Spark环境中的Hive相关库,使用与达梦数据库兼容的版本。 总结起来,将Hive metastore迁移到达梦数据库涉及创建数据库用户和表空间、修改Hive配置文件以及初始化元数据等步骤。这个过程不仅可以提升...

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

    - **背景**:Hive不支持直接使用`HAVING`关键字,但可以通过嵌套子查询并在外层查询中使用`WHERE`条件来实现类似的功能。 - **示例**:如果想实现如下标准SQL的`HAVING`查询: ```sql SELECT gender, COUNT(*) as...

    Hive几种数据导入方式

    可以使用以下命令将该文件中的数据导入到 Hive 表 `rcth` 中: ```sql LOAD DATA LOCAL INPATH '/user/rcth/rcth.txt' INTO TABLE rcth; ``` 执行完上述命令后,可以使用以下命令检查数据是否正确导入: ```sql ...

    大数据hive实现原理.zip_hive中怎么更新数据

    在《大数据hive实现原理.pdf》和《hive底层就是mapreduce.txt》中,你将找到更多关于Hive如何利用MapReduce执行查询和更新数据的细节,包括数据的分区策略、优化技巧以及Hive与Hadoop生态系统的交互等内容。...

    HIVE安装及详解

    "HIVE安装及详解" HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。...* 使用HIVE与其他工具集成 HIVE是一种功能强大且灵活的数据仓库工具,广泛应用于大数据分析和处理领域。

    spark或mr引擎插入的数据,hive表查询数据为0

    - 在使用Tez引擎完成`UNION ALL`操作后,再次使用自表插入的方式来重新组织数据结构,这样可以将分散在子目录中的数据整合到主分区目录下。 - 或者,在Tez执行的QL语句末尾添加`DISTRIBUTE BY`关键字来强制触发一...

    使用IDEA工具连接CDH集群里面的hive组件

    可以在IDEA中创建一个新的java文件,例如App.java,然后在这个文件中使用hive的API来开发应用程序。 使用IDEA工具连接CDH集群里面的hive组件可以提高开发效率和简化开发过程。通过添加hive开发的jar包和配置文件,...

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

    在Hive的核心组件中,元存储(Metastore)扮演着至关重要的角色,它是Hive与数据之间的重要桥梁,存储了所有表和分区的元数据。 元存储是Hive用来存储关于表和分区信息的地方,如表结构、列信息、分区信息等。这些...

    Spark不能使用hive自定义函数.doc

    为了能够在 Spark 中使用该 UDF,可以按照以下步骤操作: 1. **准备 Hive UDF**:首先确保该 UDF 已经被正确地部署到了 Hive 中。 2. **打包 Hive UDF**:将包含 UDF 的 jar 包放置在 `/root/mqw/udf/` 目录下。 3....

    hive udaf 实现按位取与或

    在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何使用UDAF来实现数据的按位逻辑运算,如按位与(AND)和按位或(OR)。 一、Hive UDAF基本概念 UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并...

    使用Python构造hive insert语句说明

    本文将详细介绍如何使用Python来构造Hive的INSERT INTO语句。 首先,我们来看一个简单的例子。假设我们有一条来自Hive的数据记录,例如"555 helloworld",它由两部分组成,通过制表符分隔。在Python中,我们可以...

    cloudera manager中添加hive数据库使用mysql的配置步骤

    在Cloudera Manager中配置Hive使用MySQL数据库涉及多个步骤,从卸载CentOS默认MySQL到配置完毕,下面详细说明每一步的知识点。 首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa |...

    Hive开发规范及要点

    2. 使用Hive命令行模式导出数据:使用`hive -e "select day_id,user,count from user_table where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"&gt; /home/test/test.dat;`语句...

    hive-jdbc-all.zip

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

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    本教程将深入讲解如何使用Hive JDBC在Java项目中建立与Hive的连接,并通过Maven来管理依赖。 首先,让我们了解Hive JDBC的基本概念。JDBC是Java中用于数据库访问的标准API,它定义了一组接口和类,使得开发者可以...

Global site tag (gtag.js) - Google Analytics