<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # 分區策略 OceanBase 支持多種分區策略: * 范圍(RANGE)分區 * RANGE COLUMNS 分區 * 列表(LIST)分區 * LIST COLUMNS 分區 * 哈希(HASH)分區 * 組合分區 ## 范圍(RANGE)分區 RANGE 分區根據分區表定義時為每個分區建立的分區鍵值范圍,將數據映射到相應的分區中。它是常見的分區類型,經常跟日期類型一起使用。比如說,可以將業務日志表按日/周/月分區。RANGE 分區簡單的語法格式如下: ~~~ CREATE TABLE table_name ( column_name1 column_type [, column_nameN column_type] ) PARTITION BY RANGE ( expr(column_name1) ) ( PARTITION p0 VALUES LESS THAN ( expr ) [, PARTITION pN VALUES LESS THAN (expr ) ] [, PARTITION pX VALUES LESS THAN (maxvalue) ] ); ~~~ 當使用 RANGE 分區時,需要遵守如下幾個規則: * PARTITION BY RANGE ( expr ) 里的 expr 表達式的結果必須為整形。 * 每個分區都有一個 VALUES LESS THAN 子句,它為分區指定一個非包含的上限值。分區鍵的任何值等于或大于這個值時將被映射到下一個分區中。 * 除第一個分區外,所有分區都隱含一個下限值,即上一個分區的上限值。 * 允許且只允許最后一個分區上限定義為 MAXVALUE ,這個值沒有具體的數值,比其他所有分區的上限都要大,也包含空值。 示例:創建一個 RANGE 分區表。 ~~~ CREATE TABLE t_log_part_by_range ( log_id bigint NOT NULL , log_value varchar(50) , log_date timestamp NOT NULL ) PARTITION BY RANGE(UNIX_TIMESTAMP(log_date)) ( PARTITION M202001 VALUES LESS THAN(UNIX_TIMESTAMP('2020/02/01')) , PARTITION M202002 VALUES LESS THAN(UNIX_TIMESTAMP('2020/03/01')) , PARTITION M202003 VALUES LESS THAN(UNIX_TIMESTAMP('2020/04/01')) , PARTITION M202004 VALUES LESS THAN(UNIX_TIMESTAMP('2020/05/01')) , PARTITION M202005 VALUES LESS THAN(UNIX_TIMESTAMP('2020/06/01')) , PARTITION M202006 VALUES LESS THAN(UNIX_TIMESTAMP('2020/07/01')) , PARTITION M202007 VALUES LESS THAN(UNIX_TIMESTAMP('2020/08/01')) , PARTITION M202008 VALUES LESS THAN(UNIX_TIMESTAMP('2020/09/01')) , PARTITION M202009 VALUES LESS THAN(UNIX_TIMESTAMP('2020/10/01')) , PARTITION M202010 VALUES LESS THAN(UNIX_TIMESTAMP('2020/11/01')) , PARTITION M202011 VALUES LESS THAN(UNIX_TIMESTAMP('2020/12/01')) , PARTITION M202012 VALUES LESS THAN(UNIX_TIMESTAMP('2021/01/01')) ); ~~~ RANGE 分區可以新增、刪除分區。如果最后一個 RANGE 分區指定了 MAXVALUE ,則不能新增分區。 RANGE 分區要求表拆分鍵表達式的結果必須為整型,如果要按時間類型列做 RANGE 分區,則必須使用 timestamp 類型,并且使用函數 UNIX\_TIMESTAMP 將時間類型轉換為數值。這個需求也可以使用 RANGE COLUMNS 分區實現,就沒有整型這個要求。 ## RANGE COLUMNS 分區 RANGE COLUMNS 分區作用跟 RANGE 分區基本類似,不同之處在于: * RANGE COLUMNS 拆分列結果不要求是整型,可以是任意類型。 * RANGE COLUMNS 拆分列不能使用表達式。 * RANGE COLUMNS 拆分列可以寫多個列(即列向量)。 RANGE COLUMNS 分區的簡單語法格式如下: ~~~ CREATE TABLE table_name ( column_name1 column_type [, column_nameN column_type] ) PARTITION BY RANGE ( column_name1 [, column_name2] ) ( PARTITION p0 VALUES LESS THAN ( expr ) [, PARTITION pN VALUES LESS THAN (expr ) ] [, PARTITION pX VALUES LESS THAN (maxvalue) ] ); ~~~ 示例:創建一個 RANGE COLUMNS 分區 ~~~ CREATE TABLE t_log_part_by_range_columns ( log_id bigint NOT NULL , log_value varchar(50) , log_date date NOT NULL ) PARTITION BY RANGE COLUMNS(log_date) ( PARTITION M202001 VALUES LESS THAN('2020/02/01') , PARTITION M202002 VALUES LESS THAN('2020/03/01') , PARTITION M202003 VALUES LESS THAN('2020/04/01') , PARTITION M202004 VALUES LESS THAN('2020/05/01') , PARTITION M202005 VALUES LESS THAN('2020/06/01') , PARTITION M202006 VALUES LESS THAN('2020/07/01') , PARTITION M202007 VALUES LESS THAN('2020/08/01') , PARTITION M202008 VALUES LESS THAN('2020/09/01') , PARTITION M202009 VALUES LESS THAN('2020/10/01') , PARTITION M202010 VALUES LESS THAN('2020/11/01') , PARTITION M202011 VALUES LESS THAN('2020/12/01') , PARTITION M202012 VALUES LESS THAN('2021/01/01') , PARTITION MMAX VALUES LESS THAN MAXVALUE ); ~~~ ## 列表(LIST)分區 LIST 分區使得您可以顯式的控制記錄行如何映射到分區,具體方法是為每個分區的分區鍵指定一組離散值列表,這點跟 RANGE 分區和 HASH 分區都不同。LIST 分區的優點是可以方便的對無序或無關的數據集進行分區。LIST 分區的簡單語法格式如下: ~~~ CREATE TABLE table_name ( column_name1 column_type [, column_nameN column_type] ) PARTITION BY LIST ( expr(column_name1) ) ( PARTITION p0 VALUES IN ( v01 [, v0N] ) [, PARTITION pN VALUES IN ( vN1 [, vNN] ) ] [, PARTITION pX VALUES IN (default) ] ); ~~~ 當使用列表分區時,需要遵守以下規則: * 分區表達式結果必須是整型。 * 分區表達式只能引用一列,不能有多列(即列向量)。 示例:創建一個 LIST 分區表。 ~~~ CREATE TABLE t_part_by_list ( c1 BIGINT PRIMARY KEY , c2 VARCHAR(50) ) PARTITION BY list(c1) ( PARTITION p0 VALUES IN (1, 2, 3) , PARTITION p1 VALUES IN (5, 6) , PARTITION p2 VALUES IN (DEFAULT) ); ~~~ LIST 分區可以新增分區,指定新的不重復的列表。也可以刪除分區。 ## LIST COLUMNS 分區 LIST COLUMNS 分區作用跟 LIST 分區基本相同,不同之處在于: * LIST COLUMNS 的拆分列不能是表達式。 * LIST COLUMNS 的拆分列可以是多列(即列向量)。 LIST COLUMNS 分區簡單的語法格式如下: ~~~ CREATE TABLE table_name ( column_name1 column_type [, column_nameN column_type] ) PARTITION BY LIST COLUMNS ( column_name1 [, column_nameN ] ) ( PARTITION p0 VALUES IN ( v01 [, v0N] ) [, PARTITION pN VALUES IN ( vN1 [, vNN] ) ] [, PARTITION pX VALUES IN (default) ] ); ~~~ 示例:創建一個 LIST COLUMNS 分區 ~~~ CREATE TABLE t2 ( id varchar(64), type varchar(16), info varchar(512), gmt_create datetime(6), gmt_modified datetime(6), partition_id varchar(2) GENERATED ALWAYS AS (substr(`id`,19,20)) VIRTUAL, PRIMARY KEY (id) ) partition by list columns(partition_id) (partition p0 values in ('00','01'), partition p1 values in ('02','03'), partition p2 values in (default)); ~~~ ## 哈希(HASH)分區 HASH 分區適合于對不能用 RANGE 分區、LIST 分區方法的場景,它的實現方法簡單,通過對分區鍵上的 HASH 函數值來散列記錄到不同分區中。如果您的數據符合下列特點,使用 HASH 分區是個很好的選擇: * 不能指定數據的分區鍵的列表特征。 * 不同范圍內的數據大小相差非常大,并且很難手動調整均衡。 * 使用 RANGE 分區后數據聚集嚴重。 * 并行 DML、分區剪枝和分區連接等性能非常重要。 示例:創建一個 HASH 分區表。 ~~~ CREATE TABLE ware( w_id int , w_ytd number(12,2) , w_tax number(4,4) , w_name varchar(10) , w_street_1 varchar(20) , w_street_2 varchar(20) , w_city varchar(20) , w_state char(2) , w_zip char(9) , primary key(w_id) ) PARTITION by hash(w_id) partitions 60; ~~~ HASH 分區不適合做刪除操作。 ## 組合分區 組合分區通常是先使用一種分區策略,然后在子分區再使用另外一種分區策略,適合于業務表的數據量非常大時。使用組合分區能發揮多種分區策略的優點。 在指定二級分區分區策略細節時,可以使用 SUBPARTITION TEMPLATE 子句。 示例:創建組合分區表。 ~~~ CREATE TABLE t_ordr_part_by_hash_range (o_w_id int , o_d_id int , o_id int , o_c_id int , o_carrier_id int , o_ol_cnt int , o_all_local int , o_entry_d TIMESTAMP NOT NULL , index idx_ordr(o_w_id, o_d_id, o_c_id, o_id) LOCAL , primary key ( o_w_id, o_d_id, o_id, o_entry_d ) ) PARTITION BY hash(o_w_id) SUBPARTITION BY RANGE(UNIX_TIMESTAMP(o_entry_d)) SUBPARTITION template ( SUBPARTITION M202001 VALUES LESS THAN(UNIX_TIMESTAMP('2020/02/01')) , SUBPARTITION M202002 VALUES LESS THAN(UNIX_TIMESTAMP('2020/03/01')) , SUBPARTITION M202003 VALUES LESS THAN(UNIX_TIMESTAMP('2020/04/01')) , SUBPARTITION M202004 VALUES LESS THAN(UNIX_TIMESTAMP('2020/05/01')) , SUBPARTITION M202005 VALUES LESS THAN(UNIX_TIMESTAMP('2020/06/01')) , SUBPARTITION M202006 VALUES LESS THAN(UNIX_TIMESTAMP('2020/07/01')) , SUBPARTITION M202007 VALUES LESS THAN(UNIX_TIMESTAMP('2020/08/01')) , SUBPARTITION M202008 VALUES LESS THAN(UNIX_TIMESTAMP('2020/09/01')) , SUBPARTITION M202009 VALUES LESS THAN(UNIX_TIMESTAMP('2020/10/01')) , SUBPARTITION M202010 VALUES LESS THAN(UNIX_TIMESTAMP('2020/11/01')) , SUBPARTITION M202011 VALUES LESS THAN(UNIX_TIMESTAMP('2020/12/01')) , SUBPARTITION M202012 VALUES LESS THAN(UNIX_TIMESTAMP('2021/01/01')) , SUBPARTITION MMAX VALUES LESS THAN MAXVALUE ) partitions 16; CREATE TABLE t_log_part_by_range_hash ( log_id int NOT NULL , log_value varchar(50) , log_date TIMESTAMP NOT NULL , PRIMARY key(log_id, log_date) ) PARTITION BY RANGE(UNIX_TIMESTAMP(log_date)) SUBPARTITION BY HASH(log_id) SUBPARTITIONS 16 ( PARTITION M202001 VALUES LESS THAN(UNIX_TIMESTAMP('2020/02/01')) , PARTITION M202002 VALUES LESS THAN(UNIX_TIMESTAMP('2020/03/01')) , PARTITION M202003 VALUES LESS THAN(UNIX_TIMESTAMP('2020/04/01')) , PARTITION M202004 VALUES LESS THAN(UNIX_TIMESTAMP('2020/05/01')) , PARTITION M202005 VALUES LESS THAN(UNIX_TIMESTAMP('2020/06/01')) , PARTITION M202006 VALUES LESS THAN(UNIX_TIMESTAMP('2020/07/01')) , PARTITION M202007 VALUES LESS THAN(UNIX_TIMESTAMP('2020/08/01')) , PARTITION M202008 VALUES LESS THAN(UNIX_TIMESTAMP('2020/09/01')) , PARTITION M202009 VALUES LESS THAN(UNIX_TIMESTAMP('2020/10/01')) , PARTITION M202010 VALUES LESS THAN(UNIX_TIMESTAMP('2020/11/01')) , PARTITION M202011 VALUES LESS THAN(UNIX_TIMESTAMP('2020/12/01')) , PARTITION M202012 VALUES LESS THAN(UNIX_TIMESTAMP('2021/01/01')) , PARTITION MMAX VALUES LESS THAN MAXVALUE ); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看