清空hive表 姿势大全

-- 清空分区表 清空hive表 hive分区表清空 清空hive分区表

为什么着重强调分区表,因为分区表清空可能会因为分区过多导致清理速度特别慢.

方式1 truncate table tb1(分区表注意)

注意事项:

truncate table不会删除hdfs 分区文件夹,只会删除parquet文件,所以结果就是一堆分区目录还在,但是下面的parquet文件都被删除了.

truncate table 不止不会删除分区文件夹,而且不会删除hive元数据中存储的分区信息,即hive认为之前的分区还在,spark读取到就会扫描该分区下的文件,没有不报错,但是目录不存在就报错了,这就是为什么手动删除分区文件夹会导致spark2.x报错. spark3变成了警告信息.

通过 show partitions 表名; 来检测hive元数据是否被清空.

使用场景: 分区表的分区不是特别多的场景,比如几百个分区.如果分区太多,那么删除将会分成缓慢.

方式2 复制表结构 删除原表 修改表名(推荐)

有些公司不允许代码新建hive表. eg:sb大华

create table tbnew like tbold;
drop table if exists tbold;
alter table tbnew rename to tbold;

方式3 hadoop删除分区目录 msck修复 (版本号注意)

The MSCK REPAIR TABLE command was designed to manually add partitions that are added to or removed from the file system, such as HDFS or S3, but are not present in the metastore.

可以看文档中写到 msck用来修复你新增或者删除了分区文件,但是没有同步到hive元数据的情况.

坑:

  • hive2的msck只能修复新增的分区,手动删除的分区并不会修复到元数据. msck repair table tableName;
  • hive3.0.0 (https://issues.apache.org/jira/browse/HIVE-17824)可以: msck repair table tableName sync partitions ; 等效于: ALTER TABLE tableName RECOVER PARTITIONS;

msck官方语法:

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

文档: LanguageManual DDL - Apache Hive - Apache Software Foundation

如果你是hive2+spark2 那么方式3会导致你spark任务报错.

如果你是hive3+spark3 那么没问题,但是记得使用 msck的sync模式.

如果我就是用hive2 spark2 但是分区已经被我删除了怎么解决

show partitions partitionedtb1; -- 查看hive元数据里面存储了哪些分区
alter table partitionedtb1 set TBLPROPERTIES('EXTERNAL'='TRUE'); -- 修改为外部表是为了保证删除分区后,数据不会被删除
alter table partitionedtb1 drop if exists partition (dt <> 'null'); -- 注意: 这里虽然文件夹没有,但是他是根据元数据走的,所以你的元数据会被删除.
alter table partitionedtb1 set TBLPROPERTIES('EXTERNAL'='FALSE'); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Thomas2143

您的打赏是我的动力!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值