一、创建分区表
创建分区表需要在建表语句中指定分区字段,具体可参见 数据表管理。
二、添加分区数据
在创建数据表时指定分区仅是配置了分区字段,不能立刻执行查询语句获取数据。用户需要将分区数据添加至数据表。若有新的分区数据添加至数据目录,则需要添加分区信息到数据表。
三、手动添加分区
使用 ALTER TABLE ADD PARTITIO 语句,会把指定的分区目录添加至数据表。若区目录兼容 Hive 的分区规则(分区列名 = 分区列值),则无需指定数据路径。否则,需要显示指定数据路径。详情可参见 SQL 语法。
·示例1:单个分区目录,分区目录符合。
ALTER TABLE tabel_demo ADDPARTITION (dt = '2021-01-01');
·示例2:多层分区目录嵌套
ALTER TABLE tabel_demo ADDPARTITION (year = '2021', month='01', day='01');
·示例3:显示指定分区路径
ALTER TABLE tabel_demo ADDPARTITION (year = '2021', month='01', day='01') LOCATION 'cosn://tablea_demo' ;
四、自动添加分区
使用 MSCK REPAIR TABLE 语句,扫描在建表时指定的数据目录。若存在新的分区目录,则系统会自动将这些分区添加到数据表的元数据信息中,详情可参见 SQL 语法。示例如下:
MSCK REPAIR TABLE table_demo
五、系统约束
·MSCK REPAIR TABLE仅向数据表元数据添加分区,不会删除它们。想要删除已经添加的分区,可执行语句 ALTER TABLE table-name DROP PARTITION。详情请参见 SQL 语法。
·若数据量非常大,MSCK REPAIR TABLE 不是推荐的方案。系统会扫描全量数据,并且消耗很长的时间,可能会导致任务超时,使得数据表的分区信息处于不完整状态。
·分区目录必须兼容 Hive 的分区规则:分区列名=分区列值,若不一致,请使用 ALTER TABLE ADD PARTITION 加载分区。详情请参见 SQL 语法。
·请确保在单独的文件夹层次结构中保留单独表的数据。例如,假设 COS 服务中有表 A 的数据cosn://tablea_a和表 B 的数据cosn://tablea_a/tablea_b,如果两个表都按字符串进行分区,MSCK REPAIR TABLE会将表 B 的分区添加到表 A。为了避免这种情况,请使用单独的文件夹结构,如cosn://tablea_a和cosn://tablea_b。
·该语句可能会导致 COS 服务的数据读写开销,可参见 COS 服务的收费标准。