分享

hive删除数据文件不存在的表分区

本帖最后由 Ruach 于 2019-7-19 15:50 编辑

初衷:hive分区表在删除hdfs文件后元数据还没清空,为了不影响后面查询,需要将数据文件不存在的分区删掉,有数据文件存在的表分区要保留着。

目前有两种思路:
1、把当前表所有的表分区都删掉,然后使用msck命令修复有数据文件存在的表分区;
2、通过shell脚本,计算每个分区里的记录数,把记录数为0的分区都删掉。

想请教大家:
1、第一个思路里,直接把所有的表分区删掉hive sql怎么写?或者怎么按条件删除表分区?
    这样操作是不是太简单粗暴了?会不会有什么隐患?
    百度出来有按条件删除分区的语句为alter table schema.table_name drop partition (ds<'2018-08-01');
  但在实际操作中,执行失败,报错。
drop_partition_error.png

2、有没有其他的解决方式?

多谢!

已有(2)人评论

跳转到指定楼层
Ruach 发表于 2019-7-19 17:11:57
刚刚又试了一下,按条件删除分区的语句alter table schema.table_name drop partition (ds<'2018-08-01')可以使用;
使用beeline的方式可以执行成功,使用spark-sql的方式执行会报错。
回复

使用道具 举报

yaojiank 发表于 2019-7-19 21:32:30
Ruach 发表于 2019-7-19 17:11
刚刚又试了一下,按条件删除分区的语句alter table schema.table_name drop partition (ds

其实能使用方式就足够了。如果非要搞懂,楼主可以看下执行日志,到底那里出错了。

关于beeline与hive cli的区别可参考
hive cli 之于hive 就相当于sql plus之于oracle. 需要和server安装在一起。

而beeline只需要一个jdbc jar包就可以了,可以不需要与hive server 2装在一台server.

他们认证的方式也不同,hive cli可以直接访问hdfs和hive meta store,感觉更稳定快捷一些。

而beeline 则需要把请求提交到hive server2,通过安全验证,然后在队列中等待。

beeline的并发性和安全性得到了提高。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条