List 分区
自 v3.1 起,StarRocks 支持 List 分区,数据按照您显式定义的枚举值列表进行分区,适用于按枚举值来查询和管理数据。
功能介绍
您需要显式列出每个 List 分区所包含的枚举值列表,并且值不需要连续,区别于包含连续日期或者数值范围的 Range 分区。当新数据导入表中时,StarRocks 会根据数据的分区列值与分区的映射关系将数据分配到相应的分区中。
List 分区适用于存储具有少量枚举值列的数据、并且经常按列的枚举值来查询和管理数据的场景。例如表示地理位置、状态、类别的列。列的每个值都代表一种独立的类别。按照列的枚举值对数据进行分区,可以提高查询性能和方便数据管理。
尤其适用于一个分区中需要包含各分区列的多个值的场景。例如表中存在 City
列表示个体所属的城市,并且您经常按照州和城市查询和管理数据,则建表时可以使用 City
列作为分区列进行 List 分区,指定同属一个州的多个城市的数据分在同一分区 PARTITION pCalifornia VALUES IN ("Los Angeles","San Francisco","San Diego")
,可以加速查询和方便数据管理。
如果一个分区只需要包含各分区列的一个值,则推荐您使用表达式分区。
List 分区和表达式分区的区别
两者主要区别在于 List 分区需要您手动一个一个创建分区。而表达式分区(推荐)可以实现导入时自动创建分区,来简化分区创建,并且大部分情况下可以替代 List 分区。两者具体对比如下表:
分区方式 | List 分区 | 表达式分区 |
---|---|---|
语法 | PARTITION BY LIST (partition_columns)( PARTITION <partition_name> VALUES IN (value_list) [, ...] ) | PARTITION BY <partition_columns> |
一个分区中包含各分区列的多值 | 支持。一个分区中可以包含各分区列的多值。如下所示,如果导入数据的 city 列值为 Los Angeles 、San Francisco 或 San Diego ,则都被划分在一个分区 pCalifornia 中。PARTITION BY LIST (city) ( PARTITION pCalifornia VALUES IN ("Los Angeles","San Francisco","San Diego") [, ...] ) | 不支持。一个分区中只包含在各分区列上应用表达式来计算出一个值。例如使用表达式分区 PARTITION BY (city) ,并且所导入多行数据的 city 列值包含 Los Angeles 、San Francisco 或 San Diego ,则会自动创建三个分区 pLosAngeles 、pSanFrancisco 和 pSanDiego ,分别包含 city 列值为Los Angeles 、San Francisco 和 San Diego 的数据。 |
导入数据前需要提前建分区 | 必须,并且是在建表时就创建分区。 | 不需要,导入数据时自动创建分区。 |
导入数据时自动建分区 | 不支持。导入数据时,如果表中不存在数据对应的分区,StarRocks 不会自动创建分区,并且会报错。 | 支持。导入数据时,如果表中不存在数据对应的分区,则 StarRocks 自动创建分区并将导入数据,并且一个分区只包含各分区列的一个值。 |
SHOW CERATE TABLE | 返回建表语句定义的分区。 |