Todos os produtos
Search
Central de documentação

MaxCompute:Merge small files

Última atualização: Jun 26, 2026

Gravações incrementais repetidas, jobs SQL e importações via Tunnel geram um arquivo de saída separado por tarefa. Com o tempo, as partições acumulam milhares de arquivos menores que 64 MB. Esse cenário prejudica o desempenho das consultas e aumenta a carga no Apsara Distributed File System (ADFS). A mesclagem de arquivos pequenos consolida esses dados em menos arquivos e de maior tamanho, restaurando o desempenho das consultas.

O MaxCompute mescla a maioria dos arquivos automaticamente. Execute o comando de mesclagem manualmente apenas quando a mesclagem automática não conseguir acompanhar o ritmo de gravações contínuas.

Como funciona

O MaxCompute utiliza dois mecanismos para controlar o acúmulo de arquivos pequenos:

Mesclagem automática — Após a conclusão de um job, o MaxCompute aloca uma tarefa Fuxi para mesclar arquivos pequenos quando a quantidade de arquivos em uma partição ultrapassa o limiar definido. Por padrão, uma instância Fuxi processa no máximo 100 arquivos pequenos. Identifique mesclagens automáticas pela entrada MergeTask no log do job. O MaxCompute também varre periodicamente o banco de dados de metadados e mescla arquivos pequenos em qualquer tabela ou partição com alta contagem de arquivos.

Mesclagem manual — Quando os dados são gravados continuamente em uma tabela e a mesclagem automática não consegue acompanhar esse fluxo, interrompa o job de gravação e execute o comando MERGE SMALLFILES manualmente.

Limitações

  • A mesclagem de arquivos pequenos consome recursos de computação. Em instâncias de pagamento conforme o uso, as tarifas seguem a mesma taxa do faturamento de SQL sob demanda. Para detalhes sobre preços, consulte Preços de computação (pagamento conforme o uso).

  • O comando MERGE SMALLFILES não oferece suporte a tabelas transacionais. Para compactar uma tabela transacional, utilize o comando COMPACTION.

Verificar a contagem de arquivos em uma tabela

Execute DESC EXTENDED para visualizar quantos arquivos uma tabela ou partição contém.

Sintaxe

DESC EXTENDED <table_name> [PARTITION (<pt_spec>)];

Parâmetros

Parâmetro

Obrigatório

Descrição

table_name

Sim

Nome da tabela a inspecionar

pt_spec

Não

Partição de destino. Formato: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)

Exemplo de saída

结果示例

O exemplo acima exibe a tabela odl_bpm_wfc_task_log: 3.607 arquivos, tamanho total de 274 MB (287.869.658 bytes) e tamanho médio de arquivo de aproximadamente 0,07 MB. Essa partição é uma boa candidata para mesclagem.

Quando mesclar: Se uma partição contiver mais de 100 arquivos e o tamanho médio for inferior a 64 MB, mescle os arquivos pequenos.

Mesclar arquivos pequenos

Usando um comando SQL

Execute o seguinte comando para mesclar arquivos pequenos sob demanda:

ALTER TABLE <table_name> [PARTITION (<pt_spec>)] MERGE SMALLFILES;

Após a mesclagem, a tabela odl_bpm_wfc_task_log passa de 3.607 arquivos para 19, e o armazenamento é reduzido de 274 MB para 37 MB.

即时合并

Os parâmetros padrão atendem à maioria dos casos. Utilize os seguintes parâmetros SET para ajustar o comportamento da mesclagem quando necessário:

Parâmetro

Descrição

Padrão

odps.merge.cross.paths

Define se os arquivos devem ser mesclados entre caminhos. Defina como true para mesclar arquivos pequenos em cada caminho separadamente, sem alterar a estrutura de diretórios.

odps.merge.smallfile.filesize.threshold

Arquivos com tamanho igual ou inferior a este valor (em MB) são elegíveis para mesclagem. Se não for definido, o sistema usa a variável global odps_g_merge_filesize_threshold (padrão: 32 MB). Ao substituir, defina um valor maior que 32.

32 MB

odps.merge.maxmerged.filesize.threshold

Tamanho máximo (em MB) de um único arquivo de saída após a mesclagem. Um novo arquivo de saída é criado quando esse limite é atingido. Caso não seja especificado, aplica-se a variável global odps_g_max_merged_filesize_threshold (padrão: 500 MB). Ao substituir, use um valor superior a 500.

500 MB

odps.merge.max.filenumber.per.instance

Quantidade máxima de arquivos que uma única instância de mesclagem pode processar.

odps.sql.mapper.merge.limit.size

Tamanho total máximo de arquivos lidos por uma instância Fuxi.

Usando PyODPS

Utilize o PyODPS para enviar tarefas de mesclagem de forma assíncrona, o que é útil para consolidar múltiplas partições geradas pelos jobs do dia anterior.

Todos os exemplos utilizam odps.run_merge_files() para submeter uma tarefa de mesclagem assíncrona por partição e, em seguida, aguardar a conclusão de todas as tarefas.

import os
from odps import ODPS

# Load credentials from environment variables.
# Do not hardcode your AccessKey ID or AccessKey secret in your code.
o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<your-project>',
    endpoint='<your-endpoint>',
)

# Replace <table_name> with the name of your table.
table_name = '<table_name>'
t = o.get_table(table_name)

# Set merge options.
hints = {'odps.merge.maxmerged.filesize.threshold': 256}

# Submit one merge task per partition under the target date.
# Replace <datetime> with the date value to target, e.g., '20240101'.
insts = []
for partition in t.iterate_partitions(spec='ds=<datetime>'):
    instance = o.run_merge_files(table_name, str(partition), hints=hints)
    # Open this Logview URL and click Waiting Queue to find the merge job log.
    print(instance.get_logview_address())
    insts.append(instance)

# Wait for all merge tasks to finish.
for inst in insts:
    inst.wait_for_completion()

Substitua os seguintes espaços reservados antes de executar o script:

Espaço reservado

Descrição

Exemplo

<your-project>

Nome do seu projeto MaxCompute

my_project

<your-endpoint>

Endpoint do seu MaxCompute

<your-region-endpoint>

<table_name>

Tabela alvo da mesclagem

my_log_table

<datetime>

Valor da data da partição de destino

20240101

Instale o PyODPS antes de executar o script. Para instruções de instalação, consulte a documentação do PyODPS.

Exemplo

Uma verificação de estabilidade de dados identificou que a tabela tbcdm.dwd_tb_log_pv_di precisa de mesclagem. A consulta à tabela de metadados tbcdm.dws_rmd_merge_task_1d revelou que a maioria das partições excede 1.000 arquivos, algumas passam de 7.000 arquivos e várias apresentam tamanho médio de arquivo abaixo de 1 MB.

使用示例

Execute os comandos abaixo para mesclar os arquivos pequenos:

SET odps.merge.cross.paths=true;
SET odps.merge.smallfile.filesize.threshold=128;
SET odps.merge.max.filenumber.per.instance = 2000;
ALTER TABLE tbcdm.dwd_tb_log_pv_di PARTITION (ds='20151116') MERGE SMALLFILES;

Resultado após a mesclagem:

优化结果

Próximos passos