Todos os produtos
Search
Central de documentação

MaxCompute:Overview of partitioned tables

Última atualização: Jun 26, 2026

Uma tabela particionada armazena dados em locais físicos separados com base em uma ou mais colunas. Ao consultar uma tabela particionada, o MaxCompute verifica apenas as partições correspondentes em vez de toda a tabela. Isso reduz os custos de computação e torna o gerenciamento de dados em grande escala mais flexível.

Opções de particionamento

O MaxCompute oferece duas abordagens de particionamento:

Abordagem

Como as partições são criadas

Mais indicado para

Tabelas de partição padrão

Defina uma ou mais colunas como chaves de partição

Tabelas em que você conhece antecipadamente a coluna de partição e seu intervalo de valores — por exemplo, particionar uma tabela de vendas por region ou date

Tabelas de partição automática

As colunas de partição são geradas automaticamente com base no tempo

Cenários em que se deseja criar partições automaticamente à medida que os dados chegam, sem operações manuais de ALTER TABLE

As tabelas de partição automática suportam dois métodos:

Método de partição automática

Descrição

Tabela de partição automática baseada em função de cálculo de tempo

O MaxCompute aplica a função TRUNC_TIME a uma coluna baseada em tempo (DATE, DATETIME ou TIMESTAMP) e usa o resultado como valor da partição.

Tabela de partição automática baseada no horário de gravação dos dados

O MaxCompute aplica a função TRUNC_TIME ao horário de ingestão — o momento em que os dados são gravados no sistema. Esse processo também é conhecido como particionamento por horário de ingestão.

Quando usar tabelas particionadas

As tabelas particionadas são adequadas nas seguintes situações:

  • Sua tabela é grande e as consultas estão lentas: Os filtros de partição permitem que o MaxCompute ignore completamente as partições não correspondentes e elimine varreduras completas na tabela.

  • Os padrões de consulta se concentram em intervalos de tempo ou categorias específicas: Quanto mais seletivo for o filtro de partição, maior será o ganho de desempenho.

  • É necessário gravar ou excluir dados com uma granularidade maior do que linhas individuais: Com tabelas particionadas, direcione uma partição específica diretamente. Por exemplo, remova os dados do mês anterior em segundos em vez de emitir exclusões no nível de linha.

  • Você deseja expiração automática de dados: As políticas de ciclo de vida operam no nível da partição; portanto, a limpeza não requer intervenção manual.

Diretrizes de tamanho de partição

A granularidade da partição afeta diretamente o desempenho da consulta e a sobrecarga do sistema:

Restrição

Valor

Orientação

Mínimo de linhas por partição

10.000

Partições com menos linhas aumentam a sobrecarga de metadados sem melhorar a eficácia da eliminação.

Máximo de partições por tabela

60.000

Evite designs que criam um grande número de partições de granularidade fina (por exemplo, particionamento por segundo ou por ID de usuário individual).

Máximo de partições por consulta

10.000

Se suas consultas se aproximarem regularmente desse limite, considere uma granularidade de partição mais grossa ou reestruture sua hierarquia de partições.

Limitações

  • Uma tabela pode ter no máximo 6 níveis de partição.

  • Uma tabela pode ter no máximo 60.000 partições.

  • Uma única consulta pode verificar no máximo 10.000 partições.

  • Os valores de chave de partição STRING não podem conter caracteres chineses.

Tipos de dados para colunas de partição

O MaxCompute V2.0 suporta STRING, TINYINT, SMALLINT, INT, BIGINT e VARCHAR como tipos de coluna de partição. O MaxCompute armazena internamente todos os valores de partição como STRING e converte outros tipos automaticamente. Para evitar erros relacionados a tipos, defina as colunas de partição como STRING.

A versão de tipo de dados do MaxCompute 1.0 suporta apenas STRING para colunas de partição. Definir uma coluna de partição como BIGINT afeta apenas como o tipo aparece no esquema da tabela. Em todos os cálculos e comparações, o MaxCompute trata a coluna como STRING.

Essa distinção é importante para a eliminação de partições. Quando uma cláusula WHERE compara uma chave de partição STRING a um valor BIGINT (sem aspas), o MaxCompute converte implicitamente ambos os lados para DOUBLE. A conversão implícita pode causar perda de precisão e interromper a eliminação de partições. Isso força uma varredura completa da tabela mesmo quando você especificou uma condição de partição. O exemplo a seguir mostra esse comportamento:

-- Create a partitioned table with a BIGINT partition column (MaxCompute 1.0 data type version)
CREATE TABLE parttest (a BIGINT) PARTITIONED BY (pt BIGINT);

-- Insert data
INSERT INTO parttest PARTITION(pt)(a, pt) VALUES (1, 1);
INSERT INTO parttest PARTITION(pt)(a, pt) VALUES (1, 10);

-- Query the rows where the value of pt is greater than or equal to 2.
-- The returned result is empty.
SELECT * FROM parttest WHERE pt >= '2';

Os tipos de data e hora (DATE, DATETIME, TIMESTAMP) não são suportados como tipos de coluna de partição. Para particionar por tempo, use uma tabela de partição automática com a função TRUNC_TIME.

Exemplos de tabela de partição padrão

Os exemplos a seguir usam uma tabela particionada em dois níveis: o primeiro nível é pt (data) e o segundo é region.

Etapa 1: Crie a tabela particionada.

-- Two-level partitioned table: first level by date (pt), second level by region
CREATE TABLE src (shop_name STRING, customer_id BIGINT) PARTITIONED BY (pt STRING, region STRING);

Etapa 2: Adicione partições e insira dados.

ALTER TABLE src ADD PARTITION (pt='20170506', region='hangzhou') PARTITION (pt='20180101', region='shanghai');

INSERT INTO src PARTITION (pt='20170506', region='hangzhou') VALUES ('s1', 1), ('s2', 2), ('s3', 3);
INSERT INTO src PARTITION (pt='20180101', region='shanghai') VALUES ('c1', 4), ('c2', 5), ('c3', 6);

Etapa 3: Consulte usando filtros de partição.

Use literais de string para valores de chave de partição. O MaxCompute localiza as partições correspondentes diretamente usando metadados e ignora todos os dados não correspondentes.

-- Correct: string literals trigger partition pruning
SELECT * FROM src WHERE pt='20170506' AND region='hangzhou';

Saída:

+------------+-------------+------------+------------+
| shop_name  | customer_id | pt         | region     |
+------------+-------------+------------+------------+
| s1         | 1           | 20170506   | hangzhou   |
| s2         | 2           | 20170506   | hangzhou   |
| s3         | 3           | 20170506   | hangzhou   |
+------------+-------------+------------+------------+

Evite comparar uma chave de partição STRING com um literal numérico. O MaxCompute converte implicitamente ambos os lados para DOUBLE. Isso pode causar perda de precisão e ignorar completamente a eliminação de partições:

-- Incorrect: numeric literals cause an implicit cast to DOUBLE, breaking partition pruning
SELECT * FROM src WHERE pt = 20170506 AND region = hangzhou;

Exemplos de tabela de partição automática

Próximos passos