更新时间:2024-07-24 GMT+08:00

配置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 tables;

  • 查询指定数据库下的所有冻结表:

    show frozen tables in 数据库名称;

查询冻结表的冻结分区

查询冷冻分区:

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进行冷冻分区查询。