Todos os produtos
Search
Central de documentação

MaxCompute:Verifique a eficácia do partition pruning

Última atualização: Jun 26, 2026

O partition pruning permite que o MaxCompute ignore partições fora das condições de filtro da consulta. Dessa forma, o SQL lê apenas as partições necessárias em vez de varrer toda a tabela. Quando o partition pruning falha, as consultas recorrem à varredura completa da tabela, o que aumenta custos e degrada o desempenho. Este tópico explica como verifique se o partition pruning funciona e identifica cenários comuns de falha.

Verifique o partition pruning com EXPLAIN

Execute a instrução EXPLAIN para visualize o plano de execução da consulta e confirme quais partições serão lidas.

Partition pruning ineficaz — uso de expressão não constante como filtro de partição:

explain
select seller_id
from xxxxx_trd_slr_ord_1d
where ds=rand();

O plano de execução mostra a leitura de todas as 1.344 partições da tabela xxxxx_trd_slr_ord_1d, indicando que o partition pruning não surtiu efeito.

Partition pruning eficaz — uso de valor constante como filtro de partição:

explain
select seller_id
from xxxxx_trd_slr_ord_1d
where ds='20150801';

Partition pruning

O plano de execução indica a leitura apenas da partição 20150801 da tabela xxxxx_trd_slr_ord_1d.

Cenários em que o partition pruning não tem efeito

Uso inadequado de UDFs

Usar funções definidas pelo usuário (UDFs) ou certas funções integradas na expressão de filtro de partição pode impedir o funcionamento do partition pruning.

explain
select ...
from xxxxx_base2_brd_ind_cw
where ds = concat(SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 1), SPLIT_PART(bi_week_dim(' ${bdp.system.bizdate}'), ',', 2))

Execute EXPLAIN em qualquer consulta com UDFs na cláusula WHERE para confirme se o partition pruning está ativo.

Para obter detalhes sobre o partition pruning baseado em UDF, consulte a seção "WHERE" em WHERE .

Uso inadequado de joins

A posição das condições de filtro de partição — na cláusula ON ou na cláusula WHERE — determina quais tabelas se beneficiam do partition pruning:

  • Cláusula WHERE: O partition pruning aplica-se a todas as tabelas unidas.

  • Cláusula ON: O partition pruning aplica-se apenas à tabela secundária (direita); a tabela primária (esquerda) ainda passa por varredura completa.

A tabela a seguir resume o comportamento do partition pruning nos diferentes tipos de JOIN:

Tipo de JOIN

Filtro na cláusula ON

Filtro na cláusula WHERE

LEFT OUTER JOIN

Apenas tabela direita

Ambas as tabelas

RIGHT OUTER JOIN

Apenas tabela esquerda

Ambas as tabelas

FULL OUTER JOIN

Sem pruning

Ambas as tabelas

Exemplos de LEFT OUTER JOIN

Filtro na cláusula ON — o pruning atua apenas na tabela direita:

set odps.sql.allow.fullscan=true;
explain
select a.seller_id
    ,a.pay_ord_pbt_1d_001
from xxxxx_trd_slr_ord_1d a
left outer join
     xxxxx_seller b
on a.seller_id=b.user_id
and a.ds='20150801'
and b.ds='20150801';

LEFT OUTER JOIN ON clause execution plan

O plano de execução demonstra que o partition pruning funciona na tabela direita, mas não na esquerda.

Filtro na cláusula WHERE — o pruning atua em ambas as tabelas:

set odps.sql.allow.fullscan=true;
explain
select a.seller_id
    ,a.pay_ord_pbt_1d_001
from xxxxx_trd_slr_ord_1d a
left outer join
    xxxxx_seller b
on a.seller_id=b.user_id
where a.ds='20150801'
and b.ds='20150801';

LEFT OUTER JOIN WHERE clause execution plan

O plano de execução confirma que o partition pruning atua em ambas as tabelas.

Recomendações

  • Use EXPLAIN para validar o partition pruning antes de enviar o código SQL. Se o partition pruning falhar silenciosamente, o custo e o desempenho da consulta podem sofrer degradação significativa.

  • Para ative o partition pruning baseado em UDF, modifique as classes da UDF ou adicione set odps.sql.udf.ppr.deterministic = true; antes das instruções SQL. Para mais informações, consulte WHERE.