若用户将数据以分区目录的方式进行存储,可以减少 DLC 计算任务的数据扫描量,大幅度提升运算性能。对数据进行分区最常见的做法是将数据按照时间存储到不同目录下,例如,将同一天产生的数据放到一个目录下,可以按照“年-月-日”组织多层数据目录。DLC 中的同一个表及其分区必须使用相同的数据格式。
创建分区表
创建分区表需要在建表语句中指定分区字段。
添加分区数据
在创建数据表时指定分区仅是配置了分区字段,不能立刻执行查询语句获取数据。用户需要将分区数据添加至数据表。若有新的分区数据添加至数据目录,则需要添加分区信息到数据表。
手动添加分区
使用 ALTER TABLE ADD PARTITIO
语句,会把指定的分区目录添加至数据表。若区目录兼容 Hive 的分区规则(分区列名 = 分区列值),则无需指定数据路径。否则,需要显示指定数据路径。
示例1:单个分区目录,分区目录符合
ALTER TABLE tabel_demo ADD
PARTITION (dt = '2021-01-01');
示例2:多层分区目录嵌套
ALTER TABLE tabel_demo ADD
PARTITION (year = '2021', month='01', day='01');
示例3:显示指定分区路径
ALTER TABLE tabel_demo ADD
PARTITION (year = '2021', month='01', day='01') LOCATION 'cosn://tablea_demo' ;
自动添加分区
使用 MSCK REPAIR TABLE
语句,扫描在建表时指定的数据目录。若存在新的分区目录,则系统会自动将这些分区添加到数据表的元数据信息中。示例如下:
MSCK REPAIR TABLE table_demo
系统约束
MSCK REPAIR TABLE
仅向数据表元数据添加分区,不会删除它们。想要删除已经添加的分区,可执行语句ALTER TABLE table-name DROP PARTITION
。
若数据量非常大,MSCK REPAIR TABLE不是推荐的方案。系统会扫描全量数据,并且消耗很长的时间,可能会导致任务超时,使得数据表的分区信息处于不完整状态。
分区目录必须兼容 Hive 的分区规则:分区列名=分区列值,若不一致,请使用ALTER TABLE ADD PARTITIO
加载分区。
请确保在单独的文件夹层次结构中保留单独表的数据。例如,假设 COS 服务中有表 A 的数据cosn://tablea_a
和表 B 的数据s3://table_a/table_b
如果两个表都按字符串进行分区,MSCK REPAIR TABLE
会将表 B 的分区添加到表 A。为了避免这种情况,请使用单独的文件夹结构,如cosn://tablea_a
和cosn://tablea_b
。
本页内容是否解决了您的问题?