分区字段一般来说都是重复性非常强的字段,比如说时间,某一天可能会产生几万条数据,把这一天产生的数据就存入到一个分区中,而时间(某天)就是分区字段,时间(某天)所在的列就是分区列。也就是说,基于分区列的数据作为一个纬度,进行了数据块的划分存储,加快查询速度。每一个分区块里面的数据是完整性的,而不是分区列里的一列或者几列数据。在odps中最多支持六级分区。也就是说partition by里面可以有六个字段可以设置为分区列,而且是有顺序的。比如说有两个分区列,sale_date和region , 那么这个表可能存在多少个分区呢?可能无数个,分区分为几级呢,两级。第一级为销售时间,第二级为区域。
Create table sale_detail(shop_name string, customer_id string , total_price decimal) partition by(sale_date string, region string);
Alter table sale_detail add partition (sale_date = ‘201703’, region=’hangzhou’);
其实可以理解更加简单一些,就是有个叫sale_detail的文件夹,下面存了一堆201703,201704...的文件夹,201703这个文件夹下面又存了一堆hangzhou、beijing、qingdao...的文件夹,这些文件夹里面存的是一条一条的数据,只不过数据都是基于时间和地域纬度的。想清楚了,就是一层窗户纸的事情。