閱讀95 返回首頁    go 阿裏雲


子分區__分區_SQL語法參考_雲數據庫 OceanBase-阿裏雲

子分區是分區表中每個分區的再次分割。

語法

    ...
 PARTITON BY RANGE(expr)
     SUBPARTITION BY HASH(expr)
    ...

舉例

CREATE TABLE ts (id INT, purchased DATE)
 PARTITION BY RANGE(YEAR(purchased))
 SUBPARTITION BY HASH(TO_DAYS(purchased))
 SUBPARTITIONS 2
 (
     PARTITION p0 VALUES LESS THAN (1990),
     PARTITION p1 VALUES LESS THAN (2000),
     PARTITION p2 VALUES LESS THAN MAXVALUE
 );

表 ts 有 3 個 RANGE 分區。這 3 個分區中的每一個分區 p0, p1 和 p2 又被進一步分成了 2 個子分區。實際上,整個表被分成了 3 * 2 = 6 個分區。但是,由於 PARTITION BY RANGE 子句的作用,這些分區的頭 2 個隻保存“purchased”列中值小於 1990 的那些記錄。等價於:

CREATE TABLE ts (id INT, purchased DATE)
 PARTITION BY RANGE(YEAR(purchased))
 SUBPARTITION BY HASH(TO_DAYS(purchased))
 (
     PARTITION p0 VALUES LESS THAN (1990)
          (
             SUBPARTITION s0,
             SUBPARTITION s1
         ),
         PARTITION p1 VALUES LESS THAN (2000)
         (
             SUBPARTITION s2,
             SUBPARTITION s3
         ),
         PARTITION p2 VALUES LESS THAN MAXVALUE
         (
             SUBPARTITION s4,
             SUBPARTITION s5
         )
 );

幾點要注意的語法項:

  • 每個分區必須有相同數量的子分區。
  • 如果在一個分區表上的任何分區上使用 SUBPARTITION 來明確定義任何子分區,那麼就必須定義所有的子分區。換句話說,下麵的語句將執行失敗:
CREATE TABLE ts (id INT, purchased DATE)
 PARTITION BY RANGE(YEAR(purchased))
 SUBPARTITION BY HASH(TO_DAYS(purchased))
 (
     PARTITION p0 VALUES LESS THAN (1990)
     (
         SUBPARTITION s0,
         SUBPARTITION s1
     ),
     PARTITION p1 VALUES LESS THAN (2000),
     PARTITION p2 VALUES LESS THAN MAXVALUE
     (
         SUBPARTITION s2,
         SUBPARTITION s3
     )
 );

即便這個語句包含了一個 SUBPARTITIONS 2 子句,但是它仍然會執行失敗。

每個 SUBPARTITION 子句必須包括 (至少)子分區的一個名字。否則,你可能要對該子分區設置任何你所需要的選項,或者允許該子分區對那些選項采用其默認的設置。

在每個分區內,子分區的名字必須是唯一的,但是在整個表中,沒有必要保持唯一。例如,下麵的 CREATE TABLE 語句是有效的:

CREATE TABLE ts (id INT, purchased DATE)
 PARTITION BY RANGE(YEAR(purchased))
 SUBPARTITION BY HASH(TO_DAYS(purchased))
 (
     PARTITION p0 VALUES LESS THAN (1990)
     (
         SUBPARTITION s0,
         SUBPARTITION s1
     ),
     PARTITION p1 VALUES LESS THAN (2000)
     (
         SUBPARTITION s0,
         SUBPARTITION s1
     ),
     PARTITION p2 VALUES LESS THAN MAXVALUE
     (
         SUBPARTITION s0,
         SUBPARTITION s1
     )
 );

最後更新:2016-11-24 11:23:47

  上一篇:go key分區__分區_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go NULL值處理__分區_SQL語法參考_雲數據庫 OceanBase-阿裏雲