From 45f53a9b7dabf80c2f768f976b9a75d29617c47b Mon Sep 17 00:00:00 2001 From: crazycs520 Date: Fri, 17 Apr 2020 21:09:58 +0800 Subject: [PATCH 01/16] sql: update docs for split partition table Signed-off-by: crazycs520 --- reference/sql/statements/split-region.md | 160 +++++++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index bbef170898b3..0b59348f2a7b 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -27,6 +27,19 @@ SPLIT TABLE table_name [INDEX index_name] BY (value_list) [, (value_list)] ... `BY value_list…` 语法将手动指定一系列的点,然后根据这些指定的点切分 Region,适用于数据不均匀分布的场景。 +Split 语句的返回结果的示例如下: + +```sql ++--------------------+----------------------+ +| TOTAL_SPLIT_REGION | SCATTER_FINISH_RATIO | ++--------------------+----------------------+ +| 4 | 1.0 | ++--------------------+----------------------+ +``` + +* `TOTAL_SPLIT_REGION`:表示新增预切分的 region 数量。 +* `SCATTER_FINISH_RATIO` :表示新增预切分 region 中,打散完成的比率。如 `1.0` 表示全部完成。`0.5`表示只有一半的 region 已经打散完成了,剩下的还在打散过程中。 + ### Split Table Region 表中行数据的 key 由 `table_id` 和 `row_id` 编码组成,格式如下: @@ -168,6 +181,149 @@ region3 [("b", "2019-04-17 14:26:19") , ("c", "") ) region4 [("c", "") , maxIndexValue ) ``` +### Split Partition Table Region + +预切分分区表的 REGION 使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 + +均匀切分的语法如下: + +```sql +SPLIT [PARTITION] TABLE t [PARTITION] [(partition_name_list...)] [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num +``` + +不均匀切分的语法如下: + +```sql +SPLIT [PARTITION] TABLE table_name [PARTITION (partition_name_list...)] [INDEX index_name] BY (value_list) [, (value_list)] ... +``` + +#### 示例 + +首先创建一个分区表: + +{{< copyable "sql" >}} + +```sql +create table t (a int,b int,index idx(a)) partition by hash(a) partitions 2; +``` + +此时建完表后会为每个 partition 都单独 split 一个 region,用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下: + +{{< copyable "sql" >}} + +```sql +show table t regions; +``` + +```sql ++-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | ++-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| 1978 | t_1400_ | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 0 | 0 | 1 | 0 | +| 6 | t_1401_ | | 17 | 4 | 17, 18, 21 | 0 | 223 | 0 | 1 | 0 | ++-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +``` + +再用 `SPLIT` 语法为每个 partition 切分 region,示例如下,在 [0,10000] 范围内切分成 4 个 region: + +{{< copyable "sql" >}} + +```sql +split partition table t between (0) and (10000) regions 4; +``` + +再用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下,会发现该表现在一共有 10 个 region,每个 partition 分别有 5 个 region,其中 4 个 region 是表的行数据,1 个 region 是表的索引数据。 + +{{< copyable "sql" >}} + +```sql +show table t regions; +``` + +```sql ++-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | ++-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| 1998 | t_1400_r | t_1400_r_2500 | 2001 | 5 | 2000, 2001, 2015 | 0 | 132 | 0 | 1 | 0 | +| 2006 | t_1400_r_2500 | t_1400_r_5000 | 2016 | 1 | 2007, 2016, 2017 | 0 | 35 | 0 | 1 | 0 | +| 2010 | t_1400_r_5000 | t_1400_r_7500 | 2012 | 2 | 2011, 2012, 2013 | 0 | 35 | 0 | 1 | 0 | +| 1978 | t_1400_r_7500 | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 621 | 0 | 1 | 0 | +| 1982 | t_1400_ | t_1400_r | 2014 | 3 | 1983, 1984, 2014 | 0 | 35 | 0 | 1 | 0 | +| 1990 | t_1401_r | t_1401_r_2500 | 1992 | 2 | 1991, 1992, 2020 | 0 | 120 | 0 | 1 | 0 | +| 1994 | t_1401_r_2500 | t_1401_r_5000 | 1997 | 5 | 1996, 1997, 2021 | 0 | 129 | 0 | 1 | 0 | +| 2002 | t_1401_r_5000 | t_1401_r_7500 | 2003 | 4 | 2003, 2023, 2022 | 0 | 141 | 0 | 1 | 0 | +| 6 | t_1401_r_7500 | | 17 | 4 | 17, 18, 21 | 0 | 601 | 0 | 1 | 0 | +| 1986 | t_1401_ | t_1401_r | 1989 | 5 | 1989, 2018, 2019 | 0 | 123 | 0 | 1 | 0 | ++-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +``` + +也可以给每个分区的索引切分 region ,如将索引 `idx` 的 [1000,10000] 范围切分成 2 个 region: + +{{< copyable "sql" >}} + +```sql +split partition table t index idx between (1000) and (10000) regions 2; +``` + +#### Split 单个分区 的 region + +可以单独指定要 切分的 partition,示例如下: + +首先创建一个分区表: + +{{< copyable "sql" >}} + +```sql +create table t ( a int, b int, index idx(b)) partition by range( a ) ( + partition p1 values less than (10000), + partition p2 values less than (20000), + partition p3 values less than (MAXVALUE) ); +``` + +为 `p1` 分区的 [0,10000] 预切分 2 个 region: + +{{< copyable "sql" >}} + +```sql +split partition table t partition (p1) between (0) and (10000) regions 2; +``` + +为 `p2` 分区的 [10000,20000] 预切分 4 个 region: + +{{< copyable "sql" >}} + +```sql +split partition table t partition (p2) between (10000) and (20000) regions 2; +``` + +用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下: + +{{< copyable "sql" >}} + +```sql +show table t regions; +``` + +```sql ++-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | ++-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +| 2040 | t_1406_ | t_1406_r_5000 | 2045 | 3 | 2043, 2045, 2044 | 0 | 0 | 0 | 1 | 0 | +| 2032 | t_1406_r_5000 | t_1407_ | 2033 | 4 | 2033, 2034, 2035 | 0 | 0 | 0 | 1 | 0 | +| 2046 | t_1407_ | t_1407_r_15000 | 2048 | 2 | 2047, 2048, 2050 | 0 | 35 | 0 | 1 | 0 | +| 2036 | t_1407_r_15000 | t_1408_ | 2037 | 4 | 2037, 2038, 2039 | 0 | 0 | 0 | 1 | 0 | +| 6 | t_1408_ | | 17 | 4 | 17, 18, 21 | 0 | 214 | 0 | 1 | 0 | ++-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ +``` + +为 `p1` 和 `p2` 分区的索引 `idx` 的 [0,20000] 范围预切分 2 个 region: + +{{< copyable "sql" >}} + +```sql +split partition table t partition (p1,p2) index idx between (0) and (20000) regions 2; +``` + ## pre_split_regions 使用带有 `shard_row_id_bits` 的表时,如果希望建表时就均匀切分 Region,可以考虑配合 `pre_split_regions` 一起使用,用来在建表成功后就开始预均匀切分 `2^(pre_split_regions)` 个 Region。 @@ -198,3 +354,7 @@ region4: [ 3<<61 , +inf ) ## 相关 session 变量 和 `SPLIT REGION` 语句相关的 session 变量有 `tidb_scatter_region`,`tidb_wait_split_region_finish` 和 `tidb_wait_split_region_timeout`,具体可参考 [TiDB 专用系统变量和语法](/reference/configuration/tidb-server/tidb-specific-variables.md)。 + +## 另请参阅 + +* [SHOW TABLE REGIONS](/reference/sql/statements/show-table-regions.md) From 2d95294661a14dca81cc8349f531f643f3ada7c5 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 15:39:13 +0800 Subject: [PATCH 02/16] Update reference/sql/statements/split-region.md --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 0b59348f2a7b..72ca9899ba32 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -288,7 +288,7 @@ create table t ( a int, b int, index idx(b)) partition by range( a ) ( split partition table t partition (p1) between (0) and (10000) regions 2; ``` -为 `p2` 分区的 [10000,20000] 预切分 4 个 region: +为 `p2` 分区的 [10000,20000] 预切分 2 个 region: {{< copyable "sql" >}} From 2ad9014c0ef780613a46742168dedc5ddf25f4bd Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:36:24 +0800 Subject: [PATCH 03/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 72ca9899ba32..5cce73e44f6b 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -27,7 +27,7 @@ SPLIT TABLE table_name [INDEX index_name] BY (value_list) [, (value_list)] ... `BY value_list…` 语法将手动指定一系列的点,然后根据这些指定的点切分 Region,适用于数据不均匀分布的场景。 -Split 语句的返回结果的示例如下: +`SPLIT` 语句的返回结果示例如下: ```sql +--------------------+----------------------+ From 305b1ce4d0491075cd962cf8a726ff9ebcf270c1 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:36:41 +0800 Subject: [PATCH 04/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 5cce73e44f6b..2600556382a1 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -38,7 +38,7 @@ SPLIT TABLE table_name [INDEX index_name] BY (value_list) [, (value_list)] ... ``` * `TOTAL_SPLIT_REGION`:表示新增预切分的 region 数量。 -* `SCATTER_FINISH_RATIO` :表示新增预切分 region 中,打散完成的比率。如 `1.0` 表示全部完成。`0.5`表示只有一半的 region 已经打散完成了,剩下的还在打散过程中。 +* `SCATTER_FINISH_RATIO`:表示新增预切分 Region 中,打散完成的比率。如 `1.0` 表示全部完成。`0.5`表示只有一半的 Region 已经打散完成,剩下的还在打散过程中。 ### Split Table Region From 2e4557a205b2d80d4a93cbb00eefdcab6c9a3c86 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:37:43 +0800 Subject: [PATCH 05/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 2600556382a1..8daed41aa272 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -37,7 +37,7 @@ SPLIT TABLE table_name [INDEX index_name] BY (value_list) [, (value_list)] ... +--------------------+----------------------+ ``` -* `TOTAL_SPLIT_REGION`:表示新增预切分的 region 数量。 +* `TOTAL_SPLIT_REGION`:表示新增预切分的 Region 数量。 * `SCATTER_FINISH_RATIO`:表示新增预切分 Region 中,打散完成的比率。如 `1.0` 表示全部完成。`0.5`表示只有一半的 Region 已经打散完成,剩下的还在打散过程中。 ### Split Table Region From 43a6f0f917da44aa98e8c70ac523c518f5e53ff1 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:39:21 +0800 Subject: [PATCH 06/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 8daed41aa272..215a1ca823eb 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -187,6 +187,8 @@ region4 [("c", "") , maxIndexValue ) 均匀切分的语法如下: +{{< copyable "sql" >}} + ```sql SPLIT [PARTITION] TABLE t [PARTITION] [(partition_name_list...)] [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num ``` From b61fa88ab0facf500332e1d0dc0747ca8addf026 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:40:42 +0800 Subject: [PATCH 07/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 215a1ca823eb..e0ee615b9967 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -183,7 +183,7 @@ region4 [("c", "") , maxIndexValue ) ### Split Partition Table Region -预切分分区表的 REGION 使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 +预切分分区表的 Region 使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 均匀切分的语法如下: From 018f8db5f9979d227a0a9df17c9b402d1bb418b7 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:42:01 +0800 Subject: [PATCH 08/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index e0ee615b9967..1df58ea4e7ee 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -195,6 +195,8 @@ SPLIT [PARTITION] TABLE t [PARTITION] [(partition_name_list...)] [INDEX index_na 不均匀切分的语法如下: +{{< copyable "sql" >}} + ```sql SPLIT [PARTITION] TABLE table_name [PARTITION (partition_name_list...)] [INDEX index_name] BY (value_list) [, (value_list)] ... ``` From 60d29ed7bdb4e147369e44901bcf03076e92d629 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:42:11 +0800 Subject: [PATCH 09/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 1df58ea4e7ee..7a5c9cecfeaa 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -211,7 +211,7 @@ SPLIT [PARTITION] TABLE table_name [PARTITION (partition_name_list...)] [INDEX i create table t (a int,b int,index idx(a)) partition by hash(a) partitions 2; ``` -此时建完表后会为每个 partition 都单独 split 一个 region,用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下: +此时建完表后会为每个 partition 都单独 split 一个 Region,用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下: {{< copyable "sql" >}} From d6b4798c7b946546eadab61e9c8010440298e2a1 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:43:42 +0800 Subject: [PATCH 10/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 7a5c9cecfeaa..bfb6af9a12ac 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -228,7 +228,7 @@ show table t regions; +-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ ``` -再用 `SPLIT` 语法为每个 partition 切分 region,示例如下,在 [0,10000] 范围内切分成 4 个 region: +再用 `SPLIT` 语法为每个 partition 切分 Region,示例如下,在 [0,10000] 范围内切分成 4 个 Region: {{< copyable "sql" >}} From e1e095b91623c40da85c8e42c11fcf493dc5a17e Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:44:53 +0800 Subject: [PATCH 11/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index bfb6af9a12ac..7f8573013db9 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -236,7 +236,7 @@ show table t regions; split partition table t between (0) and (10000) regions 4; ``` -再用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下,会发现该表现在一共有 10 个 region,每个 partition 分别有 5 个 region,其中 4 个 region 是表的行数据,1 个 region 是表的索引数据。 +再用 `SHOW TABLE REGIONS` 语法查看该表的 Region。如下会发现该表现在一共有 10 个 Region,每个 partition 分别有 5 个 Region,其中 4 个 Region 是表的行数据,1 个 Region 是表的索引数据。 {{< copyable "sql" >}} From a2b3f66faef7ce14b54d0e468792a6b61841c256 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:45:15 +0800 Subject: [PATCH 12/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 7f8573013db9..6c59887f0fdc 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -261,7 +261,7 @@ show table t regions; +-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ ``` -也可以给每个分区的索引切分 region ,如将索引 `idx` 的 [1000,10000] 范围切分成 2 个 region: +也可以给每个分区的索引切分 Region ,如将索引 `idx` 的 [1000,10000] 范围切分成 2 个 Region: {{< copyable "sql" >}} From 6dac47e2bfda545a936fc05dad7f2477a81599f7 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:46:03 +0800 Subject: [PATCH 13/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 6c59887f0fdc..b7efb33b912d 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -269,7 +269,7 @@ show table t regions; split partition table t index idx between (1000) and (10000) regions 2; ``` -#### Split 单个分区 的 region +#### Split 单个分区的 Region 可以单独指定要 切分的 partition,示例如下: From a08bd77ec6e5818dd927cb798b4e6b473467fd05 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 20 Apr 2020 16:46:19 +0800 Subject: [PATCH 14/16] Update reference/sql/statements/split-region.md Co-Authored-By: Lilian Lee --- reference/sql/statements/split-region.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index b7efb33b912d..14b127f49abe 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -271,7 +271,7 @@ split partition table t index idx between (1000) and (10000) regions 2; #### Split 单个分区的 Region -可以单独指定要 切分的 partition,示例如下: +可以单独指定要切分的 partition,示例如下: 首先创建一个分区表: From 8396d9c8e81f5e2d5386dd4a24e103e91522545c Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 20 Apr 2020 17:12:14 +0800 Subject: [PATCH 15/16] reference/sql: update format and wording --- reference/sql/statements/split-region.md | 202 +++++++++++------------ 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 14b127f49abe..4bf1dd561fbc 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -181,152 +181,152 @@ region3 [("b", "2019-04-17 14:26:19") , ("c", "") ) region4 [("c", "") , maxIndexValue ) ``` -### Split Partition Table Region +### 切分分区表的 Region -预切分分区表的 Region 使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 +预切分分区表的 Region 在使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 -均匀切分的语法如下: +- 均匀切分的语法如下: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -SPLIT [PARTITION] TABLE t [PARTITION] [(partition_name_list...)] [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num -``` + ```sql + SPLIT [PARTITION] TABLE t [PARTITION] [(partition_name_list...)] [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num + ``` -不均匀切分的语法如下: +- 不均匀切分的语法如下: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -SPLIT [PARTITION] TABLE table_name [PARTITION (partition_name_list...)] [INDEX index_name] BY (value_list) [, (value_list)] ... -``` + ```sql + SPLIT [PARTITION] TABLE table_name [PARTITION (partition_name_list...)] [INDEX index_name] BY (value_list) [, (value_list)] ... + ``` #### 示例 -首先创建一个分区表: +1. 首先创建一个分区表。 -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -create table t (a int,b int,index idx(a)) partition by hash(a) partitions 2; -``` + ```sql + create table t (a int,b int,index idx(a)) partition by hash(a) partitions 2; + ``` -此时建完表后会为每个 partition 都单独 split 一个 Region,用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下: + 此时建完表后会为每个 partition 都单独 split 一个 Region,用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -show table t regions; -``` + ```sql + show table t regions; + ``` -```sql -+-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | -+-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| 1978 | t_1400_ | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 0 | 0 | 1 | 0 | -| 6 | t_1401_ | | 17 | 4 | 17, 18, 21 | 0 | 223 | 0 | 1 | 0 | -+-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -``` + ```sql + +-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | + +-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | 1978 | t_1400_ | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 0 | 0 | 1 | 0 | + | 6 | t_1401_ | | 17 | 4 | 17, 18, 21 | 0 | 223 | 0 | 1 | 0 | + +-----------+-----------+---------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + ``` -再用 `SPLIT` 语法为每个 partition 切分 Region,示例如下,在 [0,10000] 范围内切分成 4 个 Region: +2. 用 `SPLIT` 语法为每个 partition 切分 Region,示例如下,在 [0,10000] 范围内切分成 4 个 Region。 -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -split partition table t between (0) and (10000) regions 4; -``` + ```sql + split partition table t between (0) and (10000) regions 4; + ``` -再用 `SHOW TABLE REGIONS` 语法查看该表的 Region。如下会发现该表现在一共有 10 个 Region,每个 partition 分别有 5 个 Region,其中 4 个 Region 是表的行数据,1 个 Region 是表的索引数据。 +3. 用 `SHOW TABLE REGIONS` 语法查看该表的 Region。如下会发现该表现在一共有 10 个 Region,每个 partition 分别有 5 个 Region,其中 4 个 Region 是表的行数据,1 个 Region 是表的索引数据。 -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -show table t regions; -``` + ```sql + show table t regions; + ``` -```sql -+-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | -+-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| 1998 | t_1400_r | t_1400_r_2500 | 2001 | 5 | 2000, 2001, 2015 | 0 | 132 | 0 | 1 | 0 | -| 2006 | t_1400_r_2500 | t_1400_r_5000 | 2016 | 1 | 2007, 2016, 2017 | 0 | 35 | 0 | 1 | 0 | -| 2010 | t_1400_r_5000 | t_1400_r_7500 | 2012 | 2 | 2011, 2012, 2013 | 0 | 35 | 0 | 1 | 0 | -| 1978 | t_1400_r_7500 | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 621 | 0 | 1 | 0 | -| 1982 | t_1400_ | t_1400_r | 2014 | 3 | 1983, 1984, 2014 | 0 | 35 | 0 | 1 | 0 | -| 1990 | t_1401_r | t_1401_r_2500 | 1992 | 2 | 1991, 1992, 2020 | 0 | 120 | 0 | 1 | 0 | -| 1994 | t_1401_r_2500 | t_1401_r_5000 | 1997 | 5 | 1996, 1997, 2021 | 0 | 129 | 0 | 1 | 0 | -| 2002 | t_1401_r_5000 | t_1401_r_7500 | 2003 | 4 | 2003, 2023, 2022 | 0 | 141 | 0 | 1 | 0 | -| 6 | t_1401_r_7500 | | 17 | 4 | 17, 18, 21 | 0 | 601 | 0 | 1 | 0 | -| 1986 | t_1401_ | t_1401_r | 1989 | 5 | 1989, 2018, 2019 | 0 | 123 | 0 | 1 | 0 | -+-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -``` + ```sql + +-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | + +-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | 1998 | t_1400_r | t_1400_r_2500 | 2001 | 5 | 2000, 2001, 2015 | 0 | 132 | 0 | 1 | 0 | + | 2006 | t_1400_r_2500 | t_1400_r_5000 | 2016 | 1 | 2007, 2016, 2017 | 0 | 35 | 0 | 1 | 0 | + | 2010 | t_1400_r_5000 | t_1400_r_7500 | 2012 | 2 | 2011, 2012, 2013 | 0 | 35 | 0 | 1 | 0 | + | 1978 | t_1400_r_7500 | t_1401_ | 1979 | 4 | 1979, 1980, 1981 | 0 | 621 | 0 | 1 | 0 | + | 1982 | t_1400_ | t_1400_r | 2014 | 3 | 1983, 1984, 2014 | 0 | 35 | 0 | 1 | 0 | + | 1990 | t_1401_r | t_1401_r_2500 | 1992 | 2 | 1991, 1992, 2020 | 0 | 120 | 0 | 1 | 0 | + | 1994 | t_1401_r_2500 | t_1401_r_5000 | 1997 | 5 | 1996, 1997, 2021 | 0 | 129 | 0 | 1 | 0 | + | 2002 | t_1401_r_5000 | t_1401_r_7500 | 2003 | 4 | 2003, 2023, 2022 | 0 | 141 | 0 | 1 | 0 | + | 6 | t_1401_r_7500 | | 17 | 4 | 17, 18, 21 | 0 | 601 | 0 | 1 | 0 | + | 1986 | t_1401_ | t_1401_r | 1989 | 5 | 1989, 2018, 2019 | 0 | 123 | 0 | 1 | 0 | + +-----------+---------------+---------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + ``` -也可以给每个分区的索引切分 Region ,如将索引 `idx` 的 [1000,10000] 范围切分成 2 个 Region: +4. 也可以给每个分区的索引切分 Region,如将索引 `idx` 的 [1000,10000] 范围切分成 2 个 Region: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -split partition table t index idx between (1000) and (10000) regions 2; -``` + ```sql + split partition table t index idx between (1000) and (10000) regions 2; + ``` -#### Split 单个分区的 Region +#### 切分单个分区的 Region 可以单独指定要切分的 partition,示例如下: -首先创建一个分区表: +1. 首先创建一个分区表: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -create table t ( a int, b int, index idx(b)) partition by range( a ) ( - partition p1 values less than (10000), - partition p2 values less than (20000), - partition p3 values less than (MAXVALUE) ); -``` + ```sql + create table t ( a int, b int, index idx(b)) partition by range( a ) ( + partition p1 values less than (10000), + partition p2 values less than (20000), + partition p3 values less than (MAXVALUE) ); + ``` -为 `p1` 分区的 [0,10000] 预切分 2 个 region: +2. 为 `p1` 分区的 [0,10000] 预切分 2 个 Region: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -split partition table t partition (p1) between (0) and (10000) regions 2; -``` + ```sql + split partition table t partition (p1) between (0) and (10000) regions 2; + ``` -为 `p2` 分区的 [10000,20000] 预切分 2 个 region: +3. 为 `p2` 分区的 [10000,20000] 预切分 2 个 Region: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -split partition table t partition (p2) between (10000) and (20000) regions 2; -``` + ```sql + split partition table t partition (p2) between (10000) and (20000) regions 2; + ``` -用 `SHOW TABLE REGIONS` 语法查看该表的 REGION 如下: +4. 用 `SHOW TABLE REGIONS` 语法查看该表的 Region 如下: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -show table t regions; -``` + ```sql + show table t regions; + ``` -```sql -+-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | -+-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -| 2040 | t_1406_ | t_1406_r_5000 | 2045 | 3 | 2043, 2045, 2044 | 0 | 0 | 0 | 1 | 0 | -| 2032 | t_1406_r_5000 | t_1407_ | 2033 | 4 | 2033, 2034, 2035 | 0 | 0 | 0 | 1 | 0 | -| 2046 | t_1407_ | t_1407_r_15000 | 2048 | 2 | 2047, 2048, 2050 | 0 | 35 | 0 | 1 | 0 | -| 2036 | t_1407_r_15000 | t_1408_ | 2037 | 4 | 2037, 2038, 2039 | 0 | 0 | 0 | 1 | 0 | -| 6 | t_1408_ | | 17 | 4 | 17, 18, 21 | 0 | 214 | 0 | 1 | 0 | -+-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ -``` + ```sql + +-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS | + +-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + | 2040 | t_1406_ | t_1406_r_5000 | 2045 | 3 | 2043, 2045, 2044 | 0 | 0 | 0 | 1 | 0 | + | 2032 | t_1406_r_5000 | t_1407_ | 2033 | 4 | 2033, 2034, 2035 | 0 | 0 | 0 | 1 | 0 | + | 2046 | t_1407_ | t_1407_r_15000 | 2048 | 2 | 2047, 2048, 2050 | 0 | 35 | 0 | 1 | 0 | + | 2036 | t_1407_r_15000 | t_1408_ | 2037 | 4 | 2037, 2038, 2039 | 0 | 0 | 0 | 1 | 0 | + | 6 | t_1408_ | | 17 | 4 | 17, 18, 21 | 0 | 214 | 0 | 1 | 0 | + +-----------+----------------+----------------+-----------+-----------------+------------------+------------+---------------+------------+----------------------+------------------+ + ``` -为 `p1` 和 `p2` 分区的索引 `idx` 的 [0,20000] 范围预切分 2 个 region: +5. 为 `p1` 和 `p2` 分区的索引 `idx` 的 [0,20000] 范围预切分 2 个 Region: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -split partition table t partition (p1,p2) index idx between (0) and (20000) regions 2; -``` + ```sql + split partition table t partition (p1,p2) index idx between (0) and (20000) regions 2; + ``` ## pre_split_regions From bcf6bdc33b1b64edb130c0bb76f8eff0737b24a3 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 20 Apr 2020 17:18:25 +0800 Subject: [PATCH 16/16] reference/sql: update wording --- reference/sql/statements/split-region.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reference/sql/statements/split-region.md b/reference/sql/statements/split-region.md index 4bf1dd561fbc..58796be3be33 100644 --- a/reference/sql/statements/split-region.md +++ b/reference/sql/statements/split-region.md @@ -181,7 +181,7 @@ region3 [("b", "2019-04-17 14:26:19") , ("c", "") ) region4 [("c", "") , maxIndexValue ) ``` -### 切分分区表的 Region +### Split 分区表的 Region 预切分分区表的 Region 在使用上和普通表一样,差别是会为每一个 partition 都做相同的切分。 @@ -269,7 +269,7 @@ region4 [("c", "") , maxIndexValue ) split partition table t index idx between (1000) and (10000) regions 2; ``` -#### 切分单个分区的 Region +#### Split 单个分区的 Region 可以单独指定要切分的 partition,示例如下: