Hive insert overwrite 问题
微信公众号:苏言论
理论联系实际,畅言技术与生活。
文章目录
- 1 测试的版本
- 2 insert overwrite使用说明
- 3 示例
- 4 建议的操作
- 5 参考链接
1 测试的版本
Apache hive 1.1.0/2.3.1/3.1.0
2 insert overwrite使用说明
表类型 | 使用场景 | hive操作逻辑 |
---|---|---|
非分区表 | insert overwrite table t select col from b | 先删除现有数据表目录,再插入新的数据,不存在旧数据保留的情况 |
分区表 | insert overwrite table t partition(part_name=’’) select col from b | 先删除现有分区数据目录,再插入新的数据,不存在旧数据保留的情况 |
分区表 | insert overwrite table t select col,part_name from b | 只对新数据集中存在数据变更的分区进行覆盖,不涉及数据变更的分区和旧数据会被保留 |
3 示例
考虑下面的课程安排表数据结构和数据;
drop table class_course_schedule;
create table class_course_schedule(id int,course_name string,course_time date) partitioned by(city string);
insert into class_course_schedule values
(1,'语文','2020-02-01','guangzhou'),
(2,'语文','2020-02-02','guangzhou'),
(10,'语文','2020-02-03','guangzhou'),
(3,'政治','2020-02-01','hangzhou'),
(4,'体育','2020-02-02','hangzhou'),
(5,'英语','2020-02-03','hangzhou'),
(6,'音乐','2020-02-01','shanghai'),
(7,'物理','2020-02-02','shanghai'),
(8,'计算机','2020-02-03','shanghai'),
(9,'画图','2020-02-04','shanghai');select * from class_course_schedule t;
+-------+----------------+----------------+------------+
| t.id | t.course_name | t.course_time | t.city |
+-------+----------------+----------------+------------+
| 1 | 语文 | 2020-02-01 | guangzhou |
| 2 | 语文 | 2020-02-02 | guangzhou |
| 10 | 语文 | 2020-02-03 | guangzhou |
| 3 | 政治 | 2020-02-01 | hangzhou |
| 4 | 体育 | 2020-02-02 | hangzhou |
| 5 | 英语 | 2020-02-03 | hangzhou |
| 6 | 音乐 | 2020-02-01 | shanghai |
| 7 | 物理 | 2020-02-02 | shanghai |
| 8 | 计算机 | 2020-02-03 | shanghai |
| 9 | 画图 | 2020-02-04 | shanghai |
+-------+----------------+----------------+------------+
10 rows selected (1.459 seconds)
对表进行insert overwrite,比如;
insert overwrite table class_course_schedule select * from class_course_schedule where course_name!='语文';
由于city='guangzhou’只有course_name='语文’的数据记录,select返回的数据集中city='guangzhou’分区的数据没有变化,hive从返回的select数据集中删除整个city='guangzhou’分区的情况下进行过滤,所以旧分区(city=‘guangzhou’)没有被重写,数据被保留;
select * from class_course_schedule t;
+-------+----------------+----------------+------------+
| t.id | t.course_name | t.course_time | t.city |
+-------+----------------+----------------+------------+
| 1 | 语文 | 2020-02-01 | guangzhou |
| 2 | 语文 | 2020-02-02 | guangzhou |
| 10 | 语文 | 2020-02-03 | guangzhou |
| 3 | 政治 | 2020-02-01 | hangzhou |
| 4 | 体育 | 2020-02-02 | hangzhou |
| 5 | 英语 | 2020-02-03 | hangzhou |
| 6 | 音乐 | 2020-02-01 | shanghai |
| 7 | 物理 | 2020-02-02 | shanghai |
| 8 | 计算机 | 2020-02-03 | shanghai |
| 9 | 画图 | 2020-02-04 | shanghai |
+-------+----------------+----------------+------------+
10 rows selected (1.459 seconds)
hive按设计工作,因为只需要覆盖所需分区的情况,对于增量分区负载来说是正常的,在这种情况下,无需触摸其它分区;如果覆盖无需更改的分区,则会导致非必要数据丢失,恢复起来可能会非常昂贵。
再对表进行insert overwrite;
insert overwrite table class_course_schedule select * from class_course_schedule where course_name!='英语';
由于 course_name='英语’所在的分区city='hangzhou’中course_name非一致数据,select返回的数据集中city='guangzhou’分区的数据有变化,hive对其重写;
+-------+----------------+----------------+------------+
| t.id | t.course_name | t.course_time | t.city |
+-------+----------------+----------------+------------+
| 1 | 语文 | 2020-02-01 | guangzhou |
| 2 | 语文 | 2020-02-02 | guangzhou |
| 10 | 语文 | 2020-02-03 | guangzhou |
| 3 | 政治 | 2020-02-01 | hangzhou |
| 4 | 体育 | 2020-02-02 | hangzhou |
| 6 | 音乐 | 2020-02-01 | shanghai |
| 7 | 物理 | 2020-02-02 | shanghai |
| 8 | 计算机 | 2020-02-03 | shanghai |
| 9 | 画图 | 2020-02-04 | shanghai |
+-------+----------------+----------------+------------+
9 rows selected (0.562 seconds)
4 建议的操作
- 分区表指定具体分区,减少对不相关分区的影响;
insert overwrite table class_course_schedule partition(city='guangzhou') values
(12,'语文01','2020-02-12'),
(22,'语文02','2020-02-22'),
(19,'语文03','2020-02-19');+-------+----------------+----------------+------------+
| t.id | t.course_name | t.course_time | t.city |
+-------+----------------+----------------+------------+
| 12 | 语文01 | 2020-02-12 | guangzhou |
| 22 | 语文02 | 2020-02-22 | guangzhou |
| 19 | 语文03 | 2020-02-19 | guangzhou |
| 3 | 政治 | 2020-02-01 | hangzhou |
| 4 | 体育 | 2020-02-02 | hangzhou |
| 6 | 音乐 | 2020-02-01 | shanghai |
| 7 | 物理 | 2020-02-02 | shanghai |
| 8 | 计算机 | 2020-02-03 | shanghai |
| 9 | 画图 | 2020-02-04 | shanghai |
+-------+----------------+----------------+------------+
9 rows selected (0.574 seconds)
- 如果仍然要删除分区,可以删除/重建表(可能需要为此再创建一个中间表),然后将分区加载到其中;或者计算需要单独删除的分区,然后执行ALTER TABLE DROP PARTITION删除分区。
5 参考链接
Inserting datain to HiveTables from queries
Hive insert overwrite 问题相关推荐
- hive insert overwrite directory 报错
hive insert overwrite directory 报错: 2017-06-07T16:56:11,766 ERROR [main]: exec.Task (:()) - Failed w ...
- Hive insert overwrite
Hive之insert into 和insert overwrite hive通常有三种方式对包含分区字段的表进行数据插入 1)静态插入数据:要求插入数据时指定与建表时相同的分区字段,如: inser ...
- hive insert into语句 和 insert overwrite语句
2019独角兽企业重金招聘Python工程师标准>>> 1.insert into 语句 hive> insert into table userinfos2 select ...
- Hive 的insert into 和 insert overwrite
转载:https://blog.csdn.net/qq_31382921/article/details/70911108 区分insert into 和 insert overowrite: 1. ...
- insert overwrite table 后面为什么不能用select *,怎么解决这个bug
问题:两个同样的表结构的表,如果使用insert overwrite table select *会出现以下错误. hive> insert overwrite table dwd.t_chan ...
- insert overwrite table不会覆盖原文件,而是新增一个文件
目录 一.背景 二.解决 一.背景 hive insert overwrite table结果发现不会覆盖原文件,而是新增一个文件 本来只有一个文件 insert overwrite table之后变 ...
- 一文搞定hive之insert into 和 insert overwrite与数据分区
版权声明:本文为博主原创文章,未经博主允许不得转载. 数据分区 数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区.水平分区是对表 ...
- hive分区表之insert overwrite 注意事项
hive version 3.1.3 以往我们插入分区 需要 insert ovewrite table p_table partition(period_id='202212') select i ...
- hive on spark执行insert overwrite非常慢
把一些sql执行从hive改到spark,发现执行更慢,sql主要是一些insert overwrite操作,从执行计划看到,用到InsertIntoHiveTable spark-sql> e ...
最新文章
- Entity Framework 6 Recipes 2nd Edition(10-6)译 - TPT继承模型中使用存储过程
- php for循环执行函数,自执行函数用for结束后面不能访问循环变量
- python3 列表倒叙_python的列表、元组、字典、集合
- python已停止工作
- jquery~ajax()学习
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
- 从零打造在线网盘系统之Hibernate查询与更新技术
- Windows下的bat原来可以为我们做很多
- 【Java】split()和java.util.StringTokenizer分割字符串的性能比较
- for 2018.12.3
- 2.应用统计与随机过程第二章部分课上例题(平稳随机、各态历经)
- Mac 在 Appstore 下载 hight Sierra 10.13
- numpy中takes函数
- Tomcat启动时报错:A child container failed during start解决方案-clean
- 机器学习系列(三)——目标函数、损失函数以及代价函数
- 软考--快速掌握操作系统的PV操作
- 为什么复数域中使用共轭转置而不是转置
- uni-app引入iconfont图标
- 医生提醒:坐办公室一族应1小时活动5分钟