配置Hive分区元数据冷热存储
分区元数据冷热存储介绍
- 为了减轻元数据库压力,将长时间未使用过的指定范围的分区相关元数据移动到备份表,这一过程称为分区数据冻结,移动的分区数据称为冷分区,未冻结的分区称为热分区,存在冷分区的表称为冻结表。将被冻结的数据重新移回原元数据表,这一过程称为分区数据解冻。
- 一个分区从热分区变成冷分区,仅仅是在元数据中进行标识,其HDFS业务侧分区路径、数据文件内容并未发生变化。
本特性仅适用于MRS 3.1.2及之后版本。
冻结分区
支持创建表的用户按照条件过滤的方式对一个或多个分区进行冻结,格式为:freeze partitions 数据库名称.表名称 where 分区过滤条件
例如:
freeze partitions testdb.test where year <= 2021;
freeze partitions testdb.test where year<=2021 and month <= 5;
freeze partitions testdb.test where year<=2021 and month <= 5 and day <= 27;
解冻分区
支持创建表的用户按照条件过滤的方式对一个或多个分区进行解冻,格式为unfreeze partitions 数据库名称.表名称 where 分区过滤条件,如:
unfreeze partitions testdb.test where year <= 2021;
unfreeze partitions testdb.test where year<=2021 and month <= 5;
unfreeze partitions testdb.test where year<=2021 and month <= 5 and day <= 27;
查询冻结表的冻结分区
查询冷冻分区:
show frozen partitions 表名;
- 默认元数据库冻结分区类型只支持int、string、varchar、date、timestamp类型。
- 外置元数据库只支持Postgres数据库,且冻结分区类型只支持int、string、varchar、timestamp类型。
- 对冻结后的表进行Msck元数据修复时,需要先解冻数据。如果对冻结表进行过备份后恢复操作,则可以直接执行Msck元数据修复操作,且解冻只能通过msck repair命令进行操作。
- 对冻结后的分区进行rename时,需要先解冻数据,否则会提示分区不存在。
- 删除存在冻结数据的表时,被冻结的数据会同步删除。
- 删除存在冻结数据的分区时,被冻结的分区信息不会被删除,HDFS业务数据也不会被删除。
- select查询数据时,会自动添加排查冷分区数据的过滤条件,查询结果将不包含冷分区的数据。
- show partitions table查询表下的分区数据时,查询结果将不包含冷分区,可通过show frozen partitions table进行冷冻分区查询。