查询分区表

最近更新时间:2024-08-23 15:17:31

我的收藏
若用户将数据以分区目录的方式进行存储,可以减少 DLC 计算任务的数据扫描量,大幅度提升运算性能。对数据进行分区最常见的做法是将数据按照时间存储到不同目录下,例如,将同一天产生的数据放到一个目录下,可以按照“年-月-日”组织多层数据目录。DLC 中的同一个表及其分区必须使用相同的数据格式。

创建分区表

创建分区表需要在建表语句中指定分区字段,具体可参见 数据表管理

添加分区数据

在创建数据表时指定分区仅是配置了分区字段,不能立刻执行查询语句获取数据。用户需要将分区数据添加至数据表。若有新的分区数据添加至数据目录,则需要添加分区信息到数据表。

手动添加分区

使用 ALTER TABLE ADD PARTITIO 语句,会把指定的分区目录添加至数据表。若区目录兼容 Hive 的分区规则(分区列名 = 分区列值),则无需指定数据路径。否则,需要显示指定数据路径。详情可参见 SQL 语法
示例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 语句,扫描在建表时指定的数据目录。若存在新的分区目录,则系统会自动将这些分区添加到数据表的元数据信息中,详情可参见 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_acosn://tablea_b
该语句可能会导致 COS 服务的数据读写开销,可参见 COS 服务的收费标准