本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

轉換分區表

更新時間:2024-07-05 21:12

您可以通過ALTER TABLE命令修改分區屬性,實現普通表和RANGE分區表與INTERVAL RANGE分區表之間的相互轉換。

前提條件

叢集版本需為PolarDB MySQL版8.0版本且Revision version為8.0.2.2.0及以上。您可以通過查詢版本號碼確認叢集版本。

轉換規則和方法

轉換規則如下:
  • 普通表可以轉換為INTERVAL RANGE分區表;INTERVAL RANGE分區表不可以轉換為普通表。您可以通過ALTER TABLE table_name partition_options命令來實現該轉換。
  • RANGE分區表與INTERVAL RANGE分區表之間可以互轉。對於PolarDB MySQL版8.0.2.2.0及以上版本,可以通過ALTER TABLE table_name partition_options命令來實現該轉換;對於PolarDB MySQL版8.0.2.2.1及以上版本,可以通過ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) }命令來實現該轉換。

文法

  • 文法一:
    ALTER TABLE table_name partition_options;
    其中,partition_options為:
     PARTITION BY
        { RANGE{(expr) | COLUMNS(column_list)} }
        { INTERVAL(type, expr) | INTERVAL(expr) }
        [(partition_definition [, partition_definition] ...)]
    partition_definition為:
    PARTITION partition_name
            [VALUES LESS THAN {expr | MAXVALUE}]
            [[STORAGE] ENGINE [=] engine_name]
            [COMMENT [=] 'string' ]
            [DATA DIRECTORY [=] 'data_dir']
            [INDEX DIRECTORY [=] 'index_dir']
            [MAX_ROWS [=] max_number_of_rows]
            [MIN_ROWS [=] min_number_of_rows]
            [TABLESPACE [=] tablespace_name]
  • 文法二:
    ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) };

參數

參數參數說明
參數參數說明
table_name要建立的表名稱。
RANGE(expr)RANGE分區欄位運算式,目前只支援INT類型,不支援字元類型。
column_listLIST COLUMNS的情況下使用,分區欄位列表,不支援運算式。
INTERVAL(type)目前支援8種時間類型(YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND),不顯式指定預設是數字類型的間隔。
INTERVAL(expr)指定間隔的數值大小。當type為SECOND類型時,間隔不能小於60。
MAXVALUE最大值。
engine_name儲存引擎名稱。

普通錶轉換為INTERVAL RANGE分區表

業務情境上,可以將一個現有的表,直接轉換成INTERVAL RANGE分區表。首先需要選取一個合適的分區鍵,並且為表裡現有的資料定義好分區,轉換完成之後,新插入的資料才可以觸發自動新增分區。

樣本:將orders錶轉換成INTERVAL RANGE分區表。
CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey BIGINT NOT NULL,
  orderdate DATE NOT NULL
);

ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

RANGE分區錶轉換為INTERVAL RANGE分區表

業務情境上,可以將一個現有的RANGE分區表,轉換成INTERVAL RANGE分區表。同樣需要為表裡現有的資料定義好分區,轉換完成之後,新插入的資料才可以觸發自動新增分區。您可以通過以下兩種方式來實現轉換:
  • 方式一:通過ALTER TABLE table_name partition_options命令實現轉換
    樣本:將orders分區錶轉換成INTERVAL RANGE分區表。
    CREATE TABLE orders(
      orderkey BIGINT NOT NULL,
      custkey BIGINT NOT NULL,
      orderdate DATE NOT NULL
    )
    PARTITION BY RANGE(orderkey) (
      PARTITION p0 VALUES LESS THAN(10000000)
    );
    
    ALTER TABLE orders
    PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
      PARTITION p0 VALUES LESS THAN('2021-10-01')
    );
  • 方式二:通過ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) }命令實現轉換
    樣本:將orders分區錶轉換成INTERVAL RANGE分區表。
    CREATE TABLE orders(
      orderkey BIGINT NOT NULL,
      custkey BIGINT NOT NULL,
      orderdate DATE NOT NULL
    )
    PARTITION BY RANGE COLUMNS(orderdate) (
      PARTITION p0 VALUES LESS THAN('2021-10-01')
    );
    
    ALTER TABLE orders SET INTERVAL(MONTH, 1);

INTERVAL RANGE分區錶轉換為RANGE分區表

業務情境上,也可以將一個現有的INTERVAL RANGE分區表,轉換成RANGE分區表。您可以通過以下兩種方式來實現轉換:
  • 方式一:通過ALTER TABLE table_name partition_options命令實現轉換
    樣本:將orders分區錶轉換成RANGE分區表。
    CREATE TABLE orders(
      orderkey BIGINT NOT NULL,
      custkey BIGINT NOT NULL,
      orderdate DATE NOT NULL
    )
    PARTITION BY RANGE(orderkey) INTERVAL(100000) (
      PARTITION p0 VALUES LESS THAN(10000000)
    );
    
    ALTER TABLE orders
    PARTITION BY RANGE COLUMNS(orderdate) (
      PARTITION p0 VALUES LESS THAN('2021-10-01')
    );
  • 方式二:通過ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) }命令實現轉換
    樣本:將orders分區錶轉換成RANGE分區表。
    CREATE TABLE orders(
      orderkey BIGINT NOT NULL,
      custkey BIGINT NOT NULL,
      orderdate DATE NOT NULL
    )
    PARTITION BY RANGE(orderkey) INTERVAL(100000) (
      PARTITION p0 VALUES LESS THAN(10000000)
    );
    
    ALTER TABLE orders SET INTERVAL();  /*通過不指定INTERVAL類型和值的方法就可以把INTERVAL RANGE分區錶轉換為RANGE分區表 */
  • 本頁導讀 (1, M)
  • 前提條件
  • 轉換規則和方法
  • 文法
  • 參數
  • 普通錶轉換為INTERVAL RANGE分區表
  • RANGE分區錶轉換為INTERVAL RANGE分區表
  • INTERVAL RANGE分區錶轉換為RANGE分區表
文檔反饋
phone 聯絡我們

立即和Alibaba Cloud在線服務人員進行交談,獲取您想了解的產品信息以及最新折扣。

alicare alicarealicarealicare