全部产品
MaxCompute

分区

更新时间:2017-09-11 18:55:58   分享:   

分区表是指在创建表时指定分区空间,即指定表内的某几个字段作为分区列。大多数情况下,您可以将分区类比为文件系统下的目录。

MaxCompute 将分区列的每个值作为一个分区(目录),您可以指定多级分区,即将表的多个字段作为表的分区,分区之间正如多级目录的关系。

使用数据时,如果指定需要访问的分区名称,则只会读取相应的分区,可避免全表扫描,提高处理效率,降低费用。

aaa

分区类型

MaxCompute2.0 对分区类型的支持进行了扩充,目前 MaxCompute 支持:TINYINT、 SMALLINT、INT、BIGINT、VARCHAR 和 STRING 分区类型。

注意:

在旧版 MaxCompute 中,仅承诺 STRING 类型分区。因为历史原因,虽然可以指定分区类型为 BIGINT,但是除了表的 schema 表示其为 BIGINT 外,任何其他情况实际都被处理为 STRING。

示例如下:

  1. create table parttest (a bigint) partitioned by (pt bigint);
  2. insert into parttest partition(pt) select 1, 2 from dual;
  3. insert into parttest partition(pt) select 1, 10 from dual;
  4. select * from parttest where pt >= 2;

执行上述语句后,返回的结果只有一行,因为 10 被当作字符串和 2 比较,没能返回。

分区使用限制

分区有以下使用限制:

  • 单表分区层级最多 6 级。
  • 单表分区数最多允许 60000 个分区。

  • 一次查询最多查询分区数为 10000 个分区。

示例如下:

  1. --创建一个二级分区表,以日期为一级分区,地域为二级分区
  2. create table src (key string, value bigint) partitioned by (pt string,region string);

查询时,Where 条件过滤中使用分区列作为过滤条件:

  1. select * from src where pt='20170601' and region='hangzhou'; -- 正确使用方式。MaxCompute 在生成查询计划时只会将'20170601'分区下 region 'hangzhou'二级分区的数据纳入输入中。
  2. select * from src where pt = 20170601; -- 错误的使用方式。在这样的使用方式下,MaxCompute并不能保障分区过滤机制的有效性。pt String 类型,当 String 类型与 Bigint20151201)比较时,MaxCompute 会将二者转换为 Double 类型,此时有可能会有精度损失。

部分对分区操作的 SQL 的运行效率则较低,会给您带来较高的计费,例如使用动态分区

对于部分 MaxCompute 的操作命令,处理分区表和非分区表时的语法有差别,详情请参见 DDL 语句INSERT 操作

本文导读目录
本文导读目录
以上内容是否对您有帮助?