Este tema describe cómo crear y modificar una tabla particionada con LIST DEFAULT HASH.
Contexto
PolarDB admite una estrategia de particionamiento híbrido que combina el particionamiento LIST y HASH en el mismo nivel. En este modelo, los datos se evalúan primero contra un conjunto de particiones LIST. Los datos que no coinciden con ningún valor definido de LIST se colocan en una partición predeterminada. Si esta partición predeterminada se subdivide, una función HASH distribuye los datos entre las subdivisiones. Este enfoque es ideal para casos de uso donde los valores de LIST tienen una distribución desigual o cuando resulta poco práctico enumerar todos los valores posibles.
Límites
-
Su clúster debe cumplir con uno de los siguientes requisitos de versión. Para comprobar la versión de su clúster, consulte View the version of a cluster.
PolarDB for MySQL 8.0.1 con la versión de revisión 8.0.1.1.34 o posterior.
PolarDB for MySQL 8.0.2 con la versión de revisión 8.0.2.2.1 o posterior.
Se admiten una o más particiones predeterminadas en el nivel de partición.
Es posible usar una combinación de LIST y DEFAULT para las subparticiones, pero cada partición solo admite una subpartición predeterminada.
Si una partición tiene solo una partición predeterminada, se admiten todos los tipos de subparticiones.
Si una partición tiene varias particiones predeterminadas, solo se admiten subparticiones HASH o KEY.
Creación de una tabla particionada con LIST DEFAULT HASH
Sintaxis
PolarDB le permite crear tablas particionadas que almacenan en una partición predeterminada los datos que no coinciden con una partición LIST especificada. Si esta partición crece demasiado, puede usar el método HASH para dividirla en varias particiones.
CREATE TABLE [ schema. ]table_name
table_definition
PARTITION BY LIST [COLUMNS] (expr)
SUBPARTITION BY ...
(list_partition_definition[, ..., list_partition_definition],
default_partition_definition
)
La definición default_partition_definition es la siguiente:
PARTITION partition_name DEFAULT [PARTITIONS number]
Cada definición de partición también puede incluir subparticiones. LIST DEFAULT también es compatible con las subparticiones y se define de la siguiente manera:
SUBPARTITION subpartition_name DEFAULT
Parameter Description
|
Parámetro |
Descripción |
|
table_name |
El nombre de la tabla que se va a crear. |
|
partition_name |
|
|
subpartition_name |
El nombre de la subpartición. Debe ser único dentro de la tabla. Cada partición puede tener como máximo una subpartición predeterminada. |
|
number |
Especifica el número de particiones que se crearán a partir de la partición predeterminada mediante un método HASH. La cláusula |
Example
A continuación se muestra cómo crear una sola partición predeterminada:
CREATE TABLE list_default (
a INT,
b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
PARTITION p1 VALUES IN (6,7,8,9,10),
PARTITION pd DEFAULT);
En el siguiente ejemplo se muestra cómo crear varias particiones predeterminadas:
CREATE TABLE list_default_hash (
a INT,
b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
PARTITION p1 VALUES IN (6,7,8,9,10),
PARTITION pd DEFAULT PARTITIONS 3);
El siguiente ejemplo muestra cómo usar LIST COLUMNS cuando la clave de particionamiento tiene el tipo de dato VARCHAR:
CREATE TABLE t_goods
(
country VARCHAR(30),
year VARCHAR(60),
goods TEXT
) PARTITION BY LIST COLUMNS(country)
(
PARTITION p1 VALUES IN ('China'),
PARTITION p2 VALUES IN ('USA'),
PARTITION p3 VALUES IN ('Asia'),
PARTITION p4 VALUES IN ('Singapore'),
PARTITION p_deft DEFAULT PARTITIONS 5
);
Use el comando EXPLAIN para consultar las particiones:
EXPLAIN SELECT * FROM list_default_hash;
El resultado es el siguiente:
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | list_default_hash | p0,p1,pd0,pd1,pd2 | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set (0.04 sec)
El siguiente ejemplo muestra cómo usar LIST DEFAULT para las subparticiones:
CREATE TABLE test (a int, b int)
PARTITION BY RANGE(a)
SUBPARTITION BY LIST(b) (
PARTITION part0 VALUES LESS THAN (10)
( SUBPARTITION sub0 VALUES IN (1,2,3,4,5),
SUBPARTITION sub1 DEFAULT),
PARTITION part1 VALUES LESS THAN (20)
( SUBPARTITION sub2 VALUES IN (1,2,3,4,5),
SUBPARTITION sub3 DEFAULT),
PARTITION part2 VALUES LESS THAN (30)
( SUBPARTITION sub4 VALUES IN (1,2,3,4,5),
SUBPARTITION sub5 DEFAULT));
Si una partición tiene varias particiones predeterminadas, solo se admiten subparticiones HASH o KEY:
CREATE TABLE list_default_hash_sub (
a INT,
b INT
)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (b) SUBPARTITIONS 20
(PARTITION p0 VALUES IN (1,2,3,4,5),
PARTITION p1 VALUES IN (6,7,8,9,10),
PARTITION pd DEFAULT PARTITIONS 3);
Modificación de una tabla particionada con LIST DEFAULT HASH
Las particiones LIST DEFAULT HASH admiten operaciones como ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION, ALTER TABLE REORGANIZE PARTITION, ALTER TABLE TRUNCATE PARTITION, ALTER TABLE EXCHANGE PARTITION, ALTER TABLE OPTIMIZE PARTITION, ALTER TABLE REBUILD PARTITION, ALTER TABLE REPAIR PARTITION, ALTER TABLE ANALYZE PARTITION y ALTER TABLE CHECK PARTITION.
Este tema describe cómo usar ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION y ALTER TABLE REORGANIZE PARTITION. Para obtener información sobre otras operaciones para modificar tablas particionadas con LIST DEFAULT HASH, consulte Modify a partitioned table.
ALTER TABLE ADD PARTITION
-
ADD DEFAULT PARTITION
Sintaxis
Para una tabla particionada con LIST estándar sin partición predeterminada, puede usar el comando
ADD PARTITIONpara agregar una partición predeterminada. Esto convierte la tabla en una tabla particionada con LIST DEFAULT HASH.ALTER TABLE table_name ADD PARTITION(default_partition_definition)Example
A continuación se muestra cómo agregar una sola partición predeterminada:
CREATE TABLE list_tab ( a INT, b INT ) PARTITION BY LIST (a) (PARTITION p0 VALUES IN (1,2,3,4,5), PARTITION p1 VALUES IN (6,7,8,9,10) ); ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT);En el siguiente ejemplo se muestra cómo agregar dos particiones predeterminadas:
CREATE TABLE list_tab ( a INT, b INT ) PARTITION BY LIST (a) (PARTITION p0 VALUES IN (1,2,3,4,5), PARTITION p1 VALUES IN (6,7,8,9,10) ); ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT PARTITIONS 2); -
ADD LIST PARTITION
En PolarDB for MySQL 8.0.2.2.11 y versiones posteriores, puede usar la opción
WITHOUT VALIDATIONcon el comandoALTER TABLE ADD PARTITIONpara agregar una partición LIST a una tabla particionada con LIST DEFAULT HASH.Asegúrese de que los valores de la nueva partición LIST no existan ya en la partición predeterminada. Si ya existen, use el comando
ALTER TABLE REORGANIZE PARTITIONpara mover los datos de la partición predeterminada a una nueva partición LIST.Sintaxis
ALTER TABLE table_name ADD PARTITION( list_partition_definition[, ..., list_partition_definition]) WITHOUT VALIDATIONExample
Agregue una nueva partición LIST.
CREATE TABLE list_default_hash ( a INT, b INT ) PARTITION BY LIST (a) (PARTITION p0 VALUES IN (1,2,3,4,5), PARTITION p1 VALUES IN (6,7,8,9,10), PARTITION pd DEFAULT PARTITIONS 3); ALTER TABLE list_default_hash ADD PARTITION( PARTITION p2 VALUES IN (11,12,13) )WITHOUT VALIDATION;Después de la ejecución, se agrega una partición LIST
p2a la tablalist_default_hash, yp2no contiene datos.NotaAsegúrese de que la partición predeterminada no contenga los valores 11, 12 y 13 para la columna a. De lo contrario, después de agregar la nueva partición LIST, estas filas podrían volverse inaccesibles.
ALTER TABLE DROP PARTITION
Para obtener más información sobre la sintaxis de DROP PARTITION, consulte DROP PARTITION.
Example
Cuando utilice la operación DROP PARTITION, debe eliminar todas las particiones predeterminadas a la vez. No es posible eliminar solo un subconjunto de ellas.
Ejecute el comando DROP PARTITION para eliminar todas las particiones.
ALTER TABLE list_default_hash DROP PARTITION pd0,pd1,pd2;
Query OK, 0 rows affected (0.33 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mensaje de error
Se produce un error si intenta eliminar solo algunas de las particiones predeterminadas.
ALTER TABLE list_default_hash DROP PARTITION pd0;
El comando devuelve el siguiente mensaje de error:
ERROR 8078 (HY000): DROP PARTITION cannot be used on default partitions of LIST DEFAULT, except once dropping all default partitions
ALTER TABLE REORGANIZE PARTITION
Para obtener más información sobre la sintaxis de REORGANIZE PARTITION, consulte REORGANIZE PARTITION.
Example
Cuando utilice la operación REORGANIZE PARTITION, debe modificar todas las particiones predeterminadas a la vez. No es posible modificar solo un subconjunto de ellas.
-
Use
REORGANIZE PARTITIONpara cambiar el número de particiones predeterminadas:ALTER TABLE list_default_hash REORGANIZE PARTITION pd0,pd1 INTO( PARTITION pd DEFAULT PARTITIONS 3);Después de ejecutar este comando, el número de particiones predeterminadas cambia de dos a tres.
-
Use
REORGANIZE PARTITIONpara separar una nueva partición LIST de las particiones predeterminadas:ALTER TABLE list_default_hash REORGANIZE PARTITION pd0,pd1 INTO ( PARTITION p2 VALUES IN (20,21), PARTITION pd DEFAULT PARTITIONS 2);Este comando agrega una nueva partición LIST llamada
p2a la tabla y mueve las filas que coinciden conVALUES IN (20,21)desde las particiones predeterminadas haciap2. -
Use
REORGANIZE PARTITIONpara fusionar una partición LIST con las particiones predeterminadas:ALTER TABLE list_default_hash REORGANIZE PARTITION p2, pd0, pd1 INTO ( PARTITION pd DEFAULT PARTITIONS 2);Este comando fusiona la partición LIST
p2con las particiones predeterminadas. -
Use
REORGANIZE PARTITIONpara expandir una partición LIST al mover valores desde las particiones predeterminadas:ALTER TABLE list_default_hash REORGANIZE partition p2, pd0, pd1 INTO ( PARTITION p2 VALUES IN (20,21,22,23,24), PARTITION pd DEFAULT PARTITIONS 4);Este comando cambia la definición de
p2dePARTITION p2 VALUES IN (20,21)aPARTITION p2 VALUES IN (20,21,22,23,24). También mueve los datos correspondientes de las particiones predeterminadas ap2.