Este tópico descreve como crie e modifique uma tabela particionada LIST DEFAULT HASH.
Informações básicas
PolarDB oferece suporte a uma estratégia de particionamento híbrida que combina os particionamentos LIST e HASH no mesmo nível. Nesse modelo, o sistema avalia primeiro os dados em relação a um conjunto de partições LIST. Dados que não correspondam a um valor LIST definido vão para uma partição padrão. Se essa partição padrão for subdividida, uma função HASH distribui os dados entre as subdivisões. Essa abordagem é ideal para casos de uso em que os valores LIST têm distribuição desigual ou quando enumerar todos os valores possíveis é impraticável.
Limitações
-
O cluster deve atender a um dos seguintes requisitos de versão. Para verificar a versão do cluster, consulte Visualizar a versão de um cluster.
PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.34 ou posterior.
PolarDB for MySQL 8.0.2 com versão de revisão 8.0.2.2.1 ou posterior.
O nível de partição aceita uma ou mais partições padrão.
É possível usar uma combinação de LIST e DEFAULT para subpartições, mas cada partição aceita apenas uma subpartição padrão.
Se uma partição tiver apenas uma partição padrão, todos os tipos de subpartições serão aceitos.
Se uma partição tiver múltiplas partições padrão, apenas subpartições HASH ou KEY serão aceitas.
Crie uma tabela particionada LIST DEFAULT HASH
Sintaxe
O PolarDB permite criar tabelas particionadas que armazenam, em uma partição padrão, dados sem correspondência com uma partição LIST especificada. Se essa partição crescer excessivamente, use o método HASH para dividi-la em várias partições.
CREATE TABLE [ schema. ]table_name
table_definition
PARTITION BY LIST [COLUMNS] (expr)
SUBPARTITION BY ...
(list_partition_definition[, ..., list_partition_definition],
default_partition_definition
)
A definição de default_partition_definition é a seguinte:
PARTITION partition_name DEFAULT [PARTITIONS number]
Cada definição de partição também pode incluir subpartições. O LIST DEFAULT também tem suporte para subpartições e segue esta definição:
SUBPARTITION subpartition_name DEFAULT
Descrição dos parâmetros
|
Parâmetro |
Descrição |
|
table_name |
Nome da tabela a ser criada. |
|
partition_name |
|
|
subpartition_name |
Nome da subpartição. Deve ser único na tabela. Cada partição pode ter no máximo uma subpartição padrão. |
|
number |
Especifica o número de partições a serem criadas a partir da partição padrão usando o método HASH. A cláusula |
Exemplo
O exemplo abaixo demonstra como criar uma única partição padrão:
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);
Veja a seguir como criar múltiplas partições padrão:
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);
Este exemplo ilustra o uso de LIST COLUMNS quando a chave de partição possui o tipo de dados 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 a instrução EXPLAIN para visualize as partições:
EXPLAIN SELECT * FROM list_default_hash;
A saída será semelhante a esta:
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| 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)
O exemplo a seguir mostra como aplicar LIST DEFAULT em subpartições:
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));
Se uma partição tiver múltiplas partições padrão, apenas subpartições HASH ou KEY serão aceitas:
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);
Modifique uma tabela particionada LIST DEFAULT HASH
As partições LIST DEFAULT HASH aceitam operações 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 e ALTER TABLE CHECK PARTITION.
Este tópico aborda o uso de ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION e ALTER TABLE REORGANIZE PARTITION. Para detalhes sobre outras operações de modificação de tabelas particionadas LIST DEFAULT HASH, consulte Modifique uma tabela particionada.
ALTER TABLE ADD PARTITION
-
ADD DEFAULT PARTITION
Sintaxe
Para uma tabela particionada LIST padrão sem partição padrão, use a instrução
ADD PARTITIONpara adicionar uma partição padrão. Isso converte a tabela em uma tabela particionada LIST DEFAULT HASH.ALTER TABLE table_name ADD PARTITION(default_partition_definition)Exemplo
O exemplo a seguir mostra como adicionar uma única partição padrão:
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);Já o exemplo abaixo ilustra a adição de duas partições padrão:
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
No PolarDB for MySQL 8.0.2.2.11 e versões posteriores, é possível usar a opção
WITHOUT VALIDATIONcom a instruçãoALTER TABLE ADD PARTITIONpara adicionar uma partição LIST a uma tabela particionada LIST DEFAULT HASH.Certifique-se de que os valores da nova partição LIST não existam previamente na partição padrão. Caso existam, use a instrução
ALTER TABLE REORGANIZE PARTITIONpara mover os dados da partição padrão para a nova partição LIST.Sintaxe
ALTER TABLE table_name ADD PARTITION( list_partition_definition[, ..., list_partition_definition]) WITHOUT VALIDATIONExemplo
Adicione uma nova partição 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;Após a execução, uma partição LIST
p2é adicionada à tabelalist_default_hash, ep2não contém dados.NotaGaranta que a partição padrão não contenha os valores 11, 12 e 13 para a coluna a. Caso contrário, após a adição da nova partição LIST, essas linhas podem tornar-se inacessíveis.
ALTER TABLE DROP PARTITION
Para mais informações sobre a sintaxe de DROP PARTITION, consulte DROP PARTITION.
Exemplo
Ao usar a operação DROP PARTITION, remova todas as partições padrão simultaneamente. Não é possível remover apenas um subconjunto das partições padrão.
Execute o comando DROP PARTITION para remover todas as partições.
ALTER TABLE list_default_hash DROP PARTITION pd0,pd1,pd2;
Query OK, 0 rows affected (0.33 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mensagem de erro
Um erro ocorre se você tentar remover apenas algumas das partições padrão.
ALTER TABLE list_default_hash DROP PARTITION pd0;
O comando retorna a seguinte mensagem de erro:
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 obter mais detalhes sobre a sintaxe de REORGANIZE PARTITION, consulte REORGANIZE PARTITION.
Exemplo
Ao executar a operação REORGANIZE PARTITION, modifique todas as partições padrão de uma só vez. A modificação de apenas um subconjunto de partições padrão não é permitida.
-
Use
REORGANIZE PARTITIONpara alterar o número de partições padrão:ALTER TABLE list_default_hash REORGANIZE PARTITION pd0,pd1 INTO( PARTITION pd DEFAULT PARTITIONS 3);Após executar esta instrução, o número de partições padrão muda de dois para três.
-
Use
REORGANIZE PARTITIONpara extrair uma nova partição LIST das partições padrão:ALTER TABLE list_default_hash REORGANIZE PARTITION pd0,pd1 INTO ( PARTITION p2 VALUES IN (20,21), PARTITION pd DEFAULT PARTITIONS 2);Esta instrução adiciona uma nova partição LIST chamada
p2à tabela e move as linhas correspondentes aVALUES IN (20,21)das partições padrão parap2. -
Use
REORGANIZE PARTITIONpara mesclar uma partição LIST nas partições padrão:ALTER TABLE list_default_hash REORGANIZE PARTITION p2, pd0, pd1 INTO ( PARTITION pd DEFAULT PARTITIONS 2);Esta instrução mescla a partição LIST
p2nas partições padrão. -
Use
REORGANIZE PARTITIONpara expandir uma partição LIST movendo valores das partições padrão: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);Esta instrução altera a definição de
p2dePARTITION p2 VALUES IN (20,21)paraPARTITION p2 VALUES IN (20,21,22,23,24). Ela também move os dados correspondentes das partições padrão parap2.