对同一张表的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'
相关推荐
Hive on Tez在处理insert语句与union all结合时,会进行优化,这可能导致在MR引擎中查询结果为空。解决方法包括: - 避免使用union all生成结果表,改用其他查询方式。 - 设置`mapred.input.dir.recursive`为true...
1. **Hive概念与连接使用** Hive是建立在Hadoop之上的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,方便大数据的分析。连接Hive通常通过Hive Shell或使用其他支持Hive的客户端如...
Hive是把一个查询转化成多个MapReduce任务,然后一个接一个执行。执行的中间结果通过对磁盘的读写来同步。然而,Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中...
【大数据技术基础实验报告-Hive安装配置与应用】 在大数据处理领域,Apache Hive是一个非常重要的组件,它提供了基于Hadoop的数据仓库工具,用于数据查询、分析以及存储。本实验报告将详细阐述如何安装、配置Hive,...
“Hive搭建使用笔记”可能包含了实践过程中的注意事项、常见问题及其解决方案,是学习过程中宝贵的参考资料。 通过这个压缩包,你可以全面掌握Hive的基础知识,包括安装、配置、表管理和SQL操作。实践是学习最好的...
解决方法是替换Spark环境中的Hive相关库,使用与达梦数据库兼容的版本。 总结起来,将Hive metastore迁移到达梦数据库涉及创建数据库用户和表空间、修改Hive配置文件以及初始化元数据等步骤。这个过程不仅可以提升...
- **背景**:Hive不支持直接使用`HAVING`关键字,但可以通过嵌套子查询并在外层查询中使用`WHERE`条件来实现类似的功能。 - **示例**:如果想实现如下标准SQL的`HAVING`查询: ```sql SELECT gender, COUNT(*) as...
可以使用以下命令将该文件中的数据导入到 Hive 表 `rcth` 中: ```sql LOAD DATA LOCAL INPATH '/user/rcth/rcth.txt' INTO TABLE rcth; ``` 执行完上述命令后,可以使用以下命令检查数据是否正确导入: ```sql ...
在《大数据hive实现原理.pdf》和《hive底层就是mapreduce.txt》中,你将找到更多关于Hive如何利用MapReduce执行查询和更新数据的细节,包括数据的分区策略、优化技巧以及Hive与Hadoop生态系统的交互等内容。...
"HIVE安装及详解" HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。...* 使用HIVE与其他工具集成 HIVE是一种功能强大且灵活的数据仓库工具,广泛应用于大数据分析和处理领域。
- 在使用Tez引擎完成`UNION ALL`操作后,再次使用自表插入的方式来重新组织数据结构,这样可以将分散在子目录中的数据整合到主分区目录下。 - 或者,在Tez执行的QL语句末尾添加`DISTRIBUTE BY`关键字来强制触发一...
可以在IDEA中创建一个新的java文件,例如App.java,然后在这个文件中使用hive的API来开发应用程序。 使用IDEA工具连接CDH集群里面的hive组件可以提高开发效率和简化开发过程。通过添加hive开发的jar包和配置文件,...
在Hive的核心组件中,元存储(Metastore)扮演着至关重要的角色,它是Hive与数据之间的重要桥梁,存储了所有表和分区的元数据。 元存储是Hive用来存储关于表和分区信息的地方,如表结构、列信息、分区信息等。这些...
为了能够在 Spark 中使用该 UDF,可以按照以下步骤操作: 1. **准备 Hive UDF**:首先确保该 UDF 已经被正确地部署到了 Hive 中。 2. **打包 Hive UDF**:将包含 UDF 的 jar 包放置在 `/root/mqw/udf/` 目录下。 3....
在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何使用UDAF来实现数据的按位逻辑运算,如按位与(AND)和按位或(OR)。 一、Hive UDAF基本概念 UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并...
本文将详细介绍如何使用Python来构造Hive的INSERT INTO语句。 首先,我们来看一个简单的例子。假设我们有一条来自Hive的数据记录,例如"555 helloworld",它由两部分组成,通过制表符分隔。在Python中,我们可以...
在Cloudera Manager中配置Hive使用MySQL数据库涉及多个步骤,从卸载CentOS默认MySQL到配置完毕,下面详细说明每一步的知识点。 首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa |...
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');"> /home/test/test.dat;`语句...
jdbc连接hive的所有jar包,版本hive-jdbc 1.1.0版本
本教程将深入讲解如何使用Hive JDBC在Java项目中建立与Hive的连接,并通过Maven来管理依赖。 首先,让我们了解Hive JDBC的基本概念。JDBC是Java中用于数据库访问的标准API,它定义了一组接口和类,使得开发者可以...