Hive表删除数据不支持使用Delete From...

 

前言:

今天在做数据仓库项目,通过persto向hive插入数据的时候,插入了两次不同的数据。这就导致需要删除掉其中插入错误的数据,我第一反应是使用 delete from .........

结果:报错了!!!

org.apache.hadoop.hive.ql.parse.SemanticException:Attempt to do update or delete using transaction manager that does not support these operations.

大致是说:不支持这些操作的事务管理器进行更新或删除


报错:

6d59acd9ac7446f18d1df592d7ee0bb5.png

突然想起来了不能这样搞!

Hive表 删除数据不支持使用Delete From......

 

那Hive表如何删除部分数据呢?

一、概述

hive 表删除部分数据不支持使用 Delete From table_name where ...语句

hive表删除数据要分为不同的粒度:table、partition、partition内

二、有 Partition 分区表

有分区字段的数据表,删除数据时要注意分两种情况:

1、有分区字段的数据表,删除数据时要注意分两种情况:

--删除一个分区的数据
alter table table_name drop partition(partiton_name='value')
-- 删除多个分区的数据
alter table table_name drop partition(partiton_name<'value')
alter table table_name drop partition(partiton_name<='value')
alter table table_name drop partition(partiton_name>'value')
alter table table_name drop partition(partiton_name>='value')

2、删除分区内部的部分数据,这时使用重写方式对满足条件的分区进行 overweight 操作,并通过 where 来限定需要的信息,未过滤的的信息将被删除,具体代码格式如下:

insert overwrite table table_name partition(partition_name='value') 
select column1,column2,column2 FROM table_name
where partition_name='value' and column2 is not null

三、没有 Partition 分区表

1、直接清空数据,再插入需要的数据,具体代码格式如下:

truncate table database.tablename

2、通过 overweight 对所有数据重写,具体代码格式如下:

insert overweight table table_name 
select * from table_name WHERE column is not null  --限制条件可以自行修改

 

我的解决方法:

由于我的数据表没有进行分区,所以我直接清空了数据,又把正确的数据插入了一遍。

a96a1824102f4f1f94a58070281b3ccb.png

 

吐槽:第一次搞数据仓库项目,好艰难!

但是我会加油的!

 

好啦,本次总结结束,我继续搞项目啦!

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值