前言:
今天在做数据仓库项目,通过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.
大致是说:不支持这些操作的事务管理器进行更新或删除
报错:
突然想起来了不能这样搞!
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 --限制条件可以自行修改
我的解决方法:
由于我的数据表没有进行分区,所以我直接清空了数据,又把正确的数据插入了一遍。
吐槽:第一次搞数据仓库项目,好艰难!
但是我会加油的!
好啦,本次总结结束,我继续搞项目啦!