目录
[0 Hive支持更新和删除操作吗?](#0 Hive支持更新和删除操作吗?)
[1 Hive删除操作如何实现?](#1 Hive删除操作如何实现?)
[2 Hive更新操作如何实现?](#2 Hive更新操作如何实现?)
[3 小结](#3 小结)
0 Hive支持更新和删除操作吗?
Hive在默认情况下不支持更新和删除操作,但可以通过特定方式如使用ORCFileformat和AcidOutputFormat来实现。由于HDFS的一次写入,多次读取设计,Hive的更新操作非常低效。HDFS不采用多次写,多次读模式是为了避免事务处理和复杂性。随着业务需求发展,湖仓一体成为解决需要修改数据场景的新方案。
Hive对使用Update功能的表有特定的语法要求, 语法要求如下:
- 要执行Update的表中, 建表时必须带有buckets(分桶)属性
- 要执行Update的表中, 需要指定格式,其余格式目前赞不支持, 如:parquet格式, 目前只支持ORCFileformat和AcidOutputFormat
- 要执行Update的表中, 建表时必须指定参数('transactional' = true);
经过实验,你会发现Hive的更新机制速度非常的慢
sql
insert overwrite tmp
select * from tmp where id != '666';
,在很小的数据集上更新,也要分钟级别,基本上处于不可用的状态,那么为什么Hive设计成不支持增删改查呢,我们一起聊聊根源。
1 Hive删除操作如何实现?
正常hive删除操作基本都是覆盖原数据;
sql
insert overwrite tmp
select * from tmp where id != '666';
2 Hive更新操作如何实现?
更新也是覆盖操作;
sql
insert overwrite tmp
select id,label,
if(id = '1' and label = 'grade','25',value) as value
from tmp where id != '666';
3 小结
本文给出了Hive中实现更新及删除操作的技巧,并分析了Hive中为什么不直接进行更新和删除操作的原因。
如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。
专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价。
专栏优势:
(1)一次收费持续更新。
(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】
(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)
(4)数字化建设当中遇到难题解决思路及问题思考。
我的 专栏具体链接如下: