关于表分区的问题

有哪位大神知道range分区和range colomns分区有什么区别?分别在什么场景使用?

Range分区:

  1. 可以做一级和二级分区
  2. RANGE分区是按用户指定的表达式范围将每一条记录划分到不同分区;常用场景: 按时间字段进行分区

3.目前提供对range分区的分区操作功能,能add/drop分区

存在maxvalue的分区的情况, 由于add分区现在只能加在最后,所以会添加分区失败。

不存在maxvalue的分区的情况,当插入的数据超出当前分区的最大值,则会插入失败

  1. 适用场景:按时间字段区分。例如将历史流水表按日、周、月分区,实现批量数据清理、备份和导入导出

注意:任何类型的分区都可以做一级分区和二级分区,并配合使用

#########

Range columns分区

  1. 可以做一级和二级分区
  2. RANGE COLUMNS分区与RANGE分区类似,但不同点在于RANGE COLUMNS分区可以按一个或多个分区键向量

进行分区,并且每个分区键的类型除了INT类型还可以支持其他类型,比如VARCHAR、 DATETIME等

range column和range的区别是

  1. 分区不要求是int类型,可以是任意类型
  2. 不能写表达式
  3. 分区支持向量
1 个赞

@论坛小助手

Range 分区和 Range Columns 分区的主要区别和适用场景如下:

主要区别

  1. 分区键数据类型

    • Range 分区:分区键必须是整数类型或 YEAR 类型,如果对其他类型的日期字段分区,则需要使用函数进行转换。
    • Range Columns 分区:分区键可以是任意数据类型,包括数值类型(如 TINYINTSMALLINTINTBIGINTDECIMALFLOATDOUBLE)、时间日期类型(如 DATEDATETIMETIMESTAMP)、字符型(如 CHARVARCHAR)、二进制类型(如 BINARYVARBINARY)。
  2. 分区键支持多列

    • Range 分区:分区键仅支持一列。
    • Range Columns 分区:分区键可以写多个列(即列向量)。
  3. 分区键表达式

    • Range 分区:不支持表达式。
    • Range Columns 分区:同样不支持表达式。

适用场景

  • Range 分区

    • 适用于需要按单一列进行范围分区的场景,尤其是日期字段。例如,可以将业务日志表按日/周/月分区。
    • 示例 SQL:
      CREATE TABLE sales (
          id INT PRIMARY KEY,
          sale_date DATE
      )
      PARTITION BY RANGE (sale_date) (
          PARTITION p0 VALUES LESS THAN ('2023-01-01'),
          PARTITION p1 VALUES LESS THAN ('2023-02-01'),
          PARTITION p2 VALUES LESS THAN ('2023-03-01')
      );
      
  • Range Columns 分区

    • 适用于需要按多列进行范围分区的场景,或者分区键不是整数类型的情况。例如,可以按日期和时间字段进行分区。
    • 示例 SQL:
      CREATE TABLE sales (
          id INT PRIMARY KEY,
          sale_date DATE,
          sale_time TIME
      )
      PARTITION BY RANGE COLUMNS (sale_date, sale_time) (
          PARTITION p0 VALUES LESS THAN ('2023-01-01', '00:00:00'),
          PARTITION p1 VALUES LESS THAN ('2023-02-01', '00:00:00'),
          PARTITION p2 VALUES LESS THAN ('2023-03-01', '00:00:00')
      );
      

总结来说,Range 分区适合单列范围分区且数据类型为整数或日期,而 Range Columns 分区适合多列范围分区且数据类型更加灵活。

具体信息可参考以下文档:

  1. 分区类型
  2. 分区概述
  3. 数据分布