Todos os produtos
Search
Central de documentação

MaxCompute:ANALYZE

Última atualização: Jun 26, 2026

A instrução ANALYZE TABLE coleta estatísticas de colunas de uma tabela. O otimizador de consultas usa essas estatísticas para gerar planos de execução eficientes.

Sintaxe

ANALYZE TABLE <table_name> [PARTITION (<pt_spec>)]
    COMPUTE STATISTICS FOR COLUMNS [(<column_name> [, <column_name> ...])];

Omita PARTITION em tabelas não particionadas. Omita a lista de colunas para coletar estatísticas de todas as colunas.

Excluir estatísticas

Para excluir estatísticas em vez de coletá-las:

-- Delete statistics for all columns
ANALYZE TABLE <table_name> DELETE STATISTICS FOR COLUMNS;

-- Delete statistics for specific columns
ANALYZE TABLE <table_name> DELETE STATISTICS FOR COLUMNS (<column_name> [, <column_name> ...]);

Parâmetros

Parâmetro

Descrição

table_name

Nome da tabela.

column_name

Nome da coluna a analisar. Omita para analisar todas as colunas.

pt_spec

Partição a analisar. Formato: <partition_key>='<value>'[, <partition_key>='<value>' ...]. Exemplo: ds='20201221' ou ds='20201221', hr='11'.

Campos de saída das estatísticas

Após executar ANALYZE TABLE, use SHOW STATISTIC para visualizar os resultados. A saída inclui os seguintes campos:

Campo

Aplica-se a

Descrição

MaxValue

Tipos numéricos

Valor máximo na coluna.

MinValue

Tipos numéricos

Valor mínimo na coluna.

DistinctNum

Todos os tipos

Número de valores distintos (NDV).

NullNum

Todos os tipos

Quantidade de valores nulos.

TopK

Todos os tipos

Até 20 valores com maior frequência de ocorrência. Por exemplo, 10=1.0 indica que o valor 10 aparece uma vez.

MaxLength

STRING, VARCHAR

Comprimento máximo do valor da coluna.

AvgLength

STRING, VARCHAR

Comprimento médio do valor da coluna.

Exemplos

Coletar estatísticas de uma tabela não particionada

O exemplo mínimo a seguir demonstra a sintaxe básica:

ANALYZE TABLE my_table COMPUTE STATISTICS FOR COLUMNS (col1, col2);

O exemplo completo abaixo cria uma tabela, insere dados, coleta estatísticas e verifica os resultados.

-- Create a non-partitioned table
CREATE TABLE IF NOT EXISTS analyze2_test (
    tinyint1   TINYINT,
    smallint1  SMALLINT,
    int1       INT,
    bigint1    BIGINT,
    double1    DOUBLE,
    decimal1   DECIMAL,
    decimal2   DECIMAL(20, 10),
    string1    STRING,
    varchar1   VARCHAR(10),
    boolean1   BOOLEAN,
    timestamp1 TIMESTAMP,
    datetime1  DATETIME
) LIFECYCLE 30;

-- Insert sample data
INSERT OVERWRITE TABLE analyze2_test
SELECT * FROM VALUES
    (1Y,  20S, 4, 8L,         123452.3, 12.4, 52.5,  'str1',   'str21',  false, TIMESTAMP '2018-09-17 00:00:00', DATETIME '2018-09-17 00:59:59'),
    (10Y,  2S, 7, 11111118L,   67892.3, 22.4, 42.5,  'str12',  'str200', true,  TIMESTAMP '2018-09-17 00:00:00', DATETIME '2018-09-16 00:59:59'),
    (20Y,  7S, 4, 2222228L,      12.3,   2.4,  2.57, 'str123', 'str2',   false, TIMESTAMP '2018-09-18 00:00:00', DATETIME '2018-09-17 00:59:59'),
    (null, null, null, null, null, null, null, null, null, null, null, null)
AS t(tinyint1, smallint1, int1, bigint1, double1, decimal1, decimal2, string1, varchar1, boolean1, timestamp1, datetime1);

-- Collect statistics for a single column
ANALYZE TABLE analyze2_test COMPUTE STATISTICS FOR COLUMNS (tinyint1);

-- Collect statistics for multiple columns
ANALYZE TABLE analyze2_test COMPUTE STATISTICS FOR COLUMNS (smallint1, string1, boolean1, timestamp1);

-- Collect statistics for all columns
ANALYZE TABLE analyze2_test COMPUTE STATISTICS FOR COLUMNS;

Verifique os resultados com SHOW STATISTIC:

-- Verify single-column statistics
SHOW STATISTIC analyze2_test COLUMNS (tinyint1);

-- Verify multi-column statistics
SHOW STATISTIC analyze2_test COLUMNS (smallint1, string1, boolean1, timestamp1);

-- Verify all-column statistics
SHOW STATISTIC analyze2_test COLUMNS;

A coluna tinyint1 retorna o seguinte resultado:

ID = 20201126085225150gnqo****
tinyint1:MaxValue:     20
tinyint1:DistinctNum:  4.0
tinyint1:MinValue:     1
tinyint1:NullNum:      1.0
tinyint1:TopK:         {1=1.0, 10=1.0, 20=1.0}

Coletar estatísticas de uma tabela particionada

Este exemplo completo cria uma tabela particionada, insere dados em várias partições, coleta estatísticas para uma partição específica e valida os resultados.

-- Create a partitioned table
CREATE TABLE IF NOT EXISTS srcpart_test (
    key   STRING,
    value STRING
)
PARTITIONED BY (ds STRING, hr STRING)
LIFECYCLE 30;

-- Insert data into multiple partitions
INSERT INTO TABLE srcpart_test PARTITION(ds='20201220', hr='11') VALUES
    ('123', 'val_123'), ('76', 'val_76'), ('447', 'val_447'), ('1234', 'val_1234');

INSERT INTO TABLE srcpart_test PARTITION(ds='20201220', hr='12') VALUES
    ('3', 'val_3'), ('12331', 'val_12331'), ('42', 'val_42'), ('12', 'val_12');

INSERT INTO TABLE srcpart_test PARTITION(ds='20201221', hr='11') VALUES
    ('543', 'val_543'), ('2', 'val_2'), ('4', 'val_4'), ('9', 'val_9');

INSERT INTO TABLE srcpart_test PARTITION(ds='20201221', hr='12') VALUES
    ('23', 'val_23'), ('56', 'val_56'), ('4111', 'val_4111'), ('12333', 'val_12333');

-- Collect statistics for the ds='20201221' partition
ANALYZE TABLE srcpart_test PARTITION(ds='20201221') COMPUTE STATISTICS FOR COLUMNS (key, value);

Valide os resultados:

SHOW STATISTIC srcpart_test PARTITION (ds='20201221') COLUMNS (key, value);

O resultado a seguir apresenta estatísticas detalhadas por subpartição:

ID = 20210105121800689g28p****
(ds=20201221,hr=11) key:MaxLength      3.0
(ds=20201221,hr=11) key:AvgLength:     1.0
(ds=20201221,hr=11) key:DistinctNum:   4.0
(ds=20201221,hr=11) key:NullNum:       0.0
(ds=20201221,hr=11) key:TopK:          {2=1.0, 4=1.0, 543=1.0, 9=1.0}

(ds=20201221,hr=11) value:MaxLength    7.0
(ds=20201221,hr=11) value:AvgLength:   5.0
(ds=20201221,hr=11) value:DistinctNum: 4.0
(ds=20201221,hr=11) value:NullNum:     0.0
(ds=20201221,hr=11) value:TopK:        {val_2=1.0, val_4=1.0, val_543=1.0, val_9=1.0}

(ds=20201221,hr=12) key:MaxLength      5.0
(ds=20201221,hr=12) key:AvgLength:     3.0
(ds=20201221,hr=12) key:DistinctNum:   4.0
(ds=20201221,hr=12) key:NullNum:       0.0
(ds=20201221,hr=12) key:TopK:          {12333=1.0, 23=1.0, 4111=1.0, 56=1.0}

(ds=20201221,hr=12) value:MaxLength    9.0
(ds=20201221,hr=12) value:AvgLength:   7.0
(ds=20201221,hr=12) value:DistinctNum: 4.0
(ds=20201221,hr=12) value:NullNum:     0.0
(ds=20201221,hr=12) value:TopK:        {val_12333=1.0, val_23=1.0, val_4111=1.0, val_56=1.0}

Ao analisar uma partição, o MaxCompute retorna estatísticas separadas para cada subpartição no intervalo especificado.