O particionamento LIST atribui linhas a partições com base em listas explícitas de valores. Cada partição armazena linhas cujo valor da chave de partição consta em uma lista VALUES IN definida. Sem uma partição DEFAULT, inserir uma linha com valor de chave não abrangido por nenhuma partição gera erro. Adicione uma partição DEFAULT para capturar todas as linhas sem correspondência.
Para comparar o particionamento LIST e o particionamento LIST COLUMNS, consulte a tabela Comparação entre particionamento LIST e particionamento LIST COLUMNS no tópico "Visão geral".
Quando usar o particionamento LIST
O particionamento LIST é ideal quando os valores da chave de partição pertencem a um conjunto finito e conhecido, como códigos de região, IDs de categoria ou sinalizadores de status. Se o conjunto de valores distintos tender a crescer continuamente, considere o particionamento HASH, pois adicionar uma nova partição para cada novo valor torna-se rapidamente impraticável.
Sintaxe
CREATE TABLE ...
PARTITION BY LIST(partition_expr) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
)
partition_expr:
partition_column
| partition_func(partition_column)
list_bound_value_set:
list_bound_value[, list_bound_value, ...]
-- Supported partitioning functions
partition_func:
TO_DAYS
| TO_MONTHS
| TO_WEEKS
| TO_SECOND
| UNIX_TIMESTAMP
| MONTH
| DAYOFWEEK
| DAYOFMONTH
| DAYOFYEAR
| SUBSTR
| SUBSTRING
| RIGHT
| LEFT
Principais elementos da sintaxe:
|
Elemento |
Descrição |
|
|
Nome de coluna ou função de particionamento compatível aplicada a uma coluna |
|
|
Um ou mais valores separados por vírgula mapeados para esta partição |
|
|
Valor genérico que direciona todas as linhas sem correspondência para esta partição |
Limites
|
Limite |
Valor padrão |
|
Máximo de partições por tabela |
8.192 |
|
Máximo de colunas em uma chave de partição |
5 |
|
Comprimento máximo do nome da partição |
16 caracteres |
Restrições adicionais:
Funções de particionamento são compatíveis com chaves de partição de coluna única. Os tipos de dados aceitos dependem da função utilizada.
Não há suporte para funções de particionamento em chaves de partição vetoriais (chaves de partição com múltiplas colunas).
Funções de particionamento aninhadas não são permitidas.
Os nomes das partições devem ser exclusivos na tabela.
Se a coluna da chave de partição usar um tipo sensível a fuso horário, como
TIMESTAMP, utilize a função de particionamentoUNIX_TIMESTAMP.
Tipos de dados compatíveis
Os seguintes tipos de dados são aceitos como colunas de chave de partição:
|
Categoria |
Tipos de dados |
|
Inteiro |
|
|
Data e hora |
|
|
String |
|
Exemplos
Chave de partição de coluna única com função de particionamento
Este exemplo usa a coluna birthday, do tipo DATETIME, como chave de partição. A função TO_DAYS converte datas em contagem de dias e distribui as linhas nas partições conforme datas específicas. A partição pm usa DEFAULT para capturar linhas com datas não listadas em p1, p2 ou p3. Sem a partição pm, inserir essa linha geraria erro.
CREATE TABLE tb_l_fn(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(TO_DAYS(birthday))
(
PARTITION p1 VALUES IN (TO_DAYS('2020-01-01'), TO_DAYS('2020-02-01')),
PARTITION p2 VALUES IN (TO_DAYS('2021-01-01'), TO_DAYS('2021-02-01')),
PARTITION p3 VALUES IN (TO_DAYS('2022-01-01')),
PARTITION pm VALUES IN (DEFAULT)
)
Para outras funções de particionamento compatíveis, consulte Funções de particionamento.
Chave de partição de coluna única sem função de particionamento
Neste exemplo, a coluna id atua como chave de partição e atribui valores de ID específicos a três partições nomeadas. Linhas com IDs não listados em nenhuma partição vão para a partição padrão pm.
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(id)
(
PARTITION p1 VALUES IN (1000, 1001, 1002),
PARTITION p2 VALUES IN (2000, 2001, 2002),
PARTITION p3 VALUES IN (3000),
PARTITION pm VALUES IN (DEFAULT)
)
Chave de partição vetorial (múltiplas colunas)
Ao usar múltiplas colunas como chave de partição com PARTITION BY LIST, o PolarDB for Xscale converte automaticamente a instrução para particionamento LIST COLUMNS.
O exemplo a seguir usa birthday e id como chave de partição de duas colunas:
-- Original statement using LIST with a vector partition key
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(birthday, id)
(
PARTITION p1 VALUES IN (('1990-04-03', 1000), ('1991-04-03', 2000)),
PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
PARTITION pm VALUES IN (DEFAULT)
)
O PolarDB for Xscale transforma a instrução anterior na definição equivalente de LIST COLUMNS:
-- Equivalent LIST COLUMNS partitioning after automatic conversion
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST COLUMNS(birthday, id)
(
PARTITION p1 VALUES IN (('1990-04-03', 1000), ('1991-04-03', 2000)),
PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
PARTITION pm VALUES IN (DEFAULT)
)
Próximos passos
Funções de particionamento — funções compatíveis e respectivos tipos de dados aplicáveis
Tipos e políticas de tabelas particionadas — comparação entre particionamentos LIST, LIST COLUMNS, RANGE e HASH