Todos os produtos
Search
Central de documentação

Hologres:Espelhamento de dados

Última atualização: Jun 28, 2026

Introduzido no Hologres V3.2, o espelhamento de tabelas de data lake acelera consultas ao sincronizar metadados e dados de fontes externas para o Hologres em tempo quase real ou em intervalos agendados. Espelhe tabelas inteiras ou partições específicas de tabelas particionadas e controle o escopo dos dados espelhados por meio de parâmetros.

Como funciona

O espelhamento opera em dois níveis: metadados e dados.

O espelhamento de metadados inicia automaticamente na primeira consulta a uma tabela de data lake. O Hologres aciona uma tarefa de sincronização em segundo plano que busca os metadados mais recentes da tabela de origem e os armazena em cache localmente. O intervalo padrão de sincronização é de um minuto. Consultas subsequentes utilizam os metadados em cache, eliminando idas e vindas repetidas ao catálogo externo.

Ative o espelhamento de dados manualmente com o comando ALTER EXTERNAL TABLE. Após a ativação, o Hologres copia os dados reais da tabela — não apenas os metadados — para o armazenamento local e os mantém sincronizados com a origem. O espelhamento de dados oferece suporte a:

  • Tabelas append-only e tabelas com chave primária do Paimon com vetores de exclusão habilitados

  • Tabelas não particionadas e particionadas, incluindo subconjuntos específicos de partições

  • Evolução de schema: adição, exclusão, reordenação e renomeação de colunas. Alterações de schema não suportadas revertem para leitura direta da tabela externa.

  • Descoberta e sincronização automáticas de novas partições

  • Índices comuns do Hologres (chave de clustering, codificação de dicionário, bitmap) nos dados espelhados para reduzir I/O e acelerar consultas

  • Consulta de dados espelhados a partir de instâncias secundárias, instâncias de virtual warehouse e recursos serverless

  • Visualize a partição mais recente de um espelhamento completo

  • Visualize o uso de armazenamento do espelhamento nos níveis de instância, banco de dados e tabela

  • Modifique as configurações de espelhamento de dados de uma tabela

  • Desativação do espelhamento de dados para uma tabela

Quando usar o espelhamento de dados

O espelhamento de dados traz maiores benefícios quando:

  • Consultas fazem varredura repetida nas mesmas tabelas ou partições de data lake

  • A latência de rede para o armazenamento remoto é alta ou instável

  • O desempenho da consulta tem gargalo no I/O remoto, e não na computação do Hologres

Para tabelas acessadas apenas ocasionalmente, o espelhamento de metadados pode ser suficiente.

Pré-requisitos e limitações

Antes de ativar o espelhamento de dados, certifique-se de ter:

  • Data Lake Formation (DLF) na versão mais recente ou posterior ativado, com tabelas Apache Paimon criadas.

  • Uma instância do Hologres com o serviço de aceleração de data lake habilitado (consulte Aceleração de data lake OSS usando DLF).

  • Um External Database criado para mapear metadados de tabelas de data lake para o Hologres (consulte CREATE EXTERNAL DATABASE).

O espelhamento de dados apresenta as seguintes limitações:

  • As tabelas externas devem usar o método de mapeamento External Database. Não há suporte para o método de tabela estrangeira.

  • Há suporte apenas para tabelas externas cujos metadados são gerenciados pelo Data Lake Formation (DLF).

  • Atualmente, não há suporte para espelhamento de dados de branches do Apache Paimon.

Ative o espelhamento de dados

Sintaxe

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table> 
SET(
   -- Enable data mirroring
  data_mirroring_speed_up_enable = 'on|off', 
  [data_mirroring_partition_num='1~N|all',] |[data_mirroring_partition_list='pt1,pt2...',] 
  
  -- Assign resources to data mirroring
  [data_mirroring_guc_hg_computing_resource='[serverless | local]',]
  [data_mirroring_guc_hg_experimental_serverless_computing_required_cores='<num>',] 

  -- Index
  [data_mirroring_clustering_key='[columnName{:asc]} [,...]]',]
  [data_mirroring_dictionary_encoding_columns='[columnName [,...]]',]
  [data_mirroring_bitmap_columns='[columnName [,...]]',]
  );

Parâmetros

Parâmetro

Obrigatório

Descrição

data_mirroring_speed_up_enable

Sim

Ativa ou desativa o espelhamento de dados. Valores válidos: on, off.

data_mirroring_partition_num

Não

Aplicável a tabelas particionadas. Especifique o número de partições mais recentes a espelhar. Valores válidos: all (todas as partições) ou um inteiro de 1 a N (as N partições mais recentes).

data_mirroring_partition_list

Não

Aplicável a tabelas particionadas. Defina uma lista separada por vírgulas com os nomes das partições a espelhar.

data_mirroring_guc_hg_computing_resource

Não

Determina os recursos usados no processo de construção do espelhamento. Padrão: local. Valores válidos: local (recursos da instância atual) ou serverless (recursos Serverless).

data_mirroring_guc_hg_experimental_serverless_computing_required_cores

Não

Indica a quantidade de recursos serverless (vCPUs) para o processo de construção do espelhamento. Necessário apenas quando data_mirroring_guc_hg_computing_resource estiver definido como serverless.

data_mirroring_clustering_key

Não

Configura uma chave de clustering nos dados espelhados para acelerar consultas de intervalo.

data_mirroring_dictionary_encoding_columns

Não

Aplica codificação de dicionário em colunas especificadas para reduzir o armazenamento e agilizar consultas em dados de baixa cardinalidade.

data_mirroring_bitmap_columns

Não

Crie índices bitmap em colunas específicas para acelerar consultas com filtros.

Exemplos

Tabela não particionada

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  -- Enable data mirroring
  data_mirroring_speed_up_enable = 'on',

  -- Specify the resources for the mirror build process
  data_mirroring_guc_hg_computing_resource = 'local',

  -- Set indexes
  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Tabela particionada

Escolha um dos seguintes escopos de partição conforme sua necessidade.

Espelhar as N partições mais recentes (recomendado para tabelas grandes com partições baseadas em tempo):

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '7',

  -- Use Serverless resources for the mirror build process
  data_mirroring_guc_hg_computing_resource = 'serverless',
  data_mirroring_guc_hg_experimental_serverless_computing_required_cores = '16',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Espelhar todas as partições:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = 'all',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Espelhar uma lista específica de partições:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_list = 'pt1,pt2',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Combinar partition_num e partition_list para manter tanto as partições recentes quanto partições históricas específicas:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '7',
  data_mirroring_partition_list = 'pt1',

  data_mirroring_guc_hg_computing_resource = 'local',

  data_mirroring_clustering_key = 'c_int:asc,c_char:desc',
  data_mirroring_dictionary_encoding_columns = 'c_int:on,c_char:auto',
  data_mirroring_bitmap_columns = 'c_int:on'
);

Monitorar o espelhamento

Utilize as ferramentas abaixo dependendo do que deseja verificar.

Visualize a configuração de espelhamento

Execute a seguinte instrução para listar todas as tabelas com espelhamento de dados ativado:

SELECT * FROM hologres.hg_datalake_get_mirror_config();

Verificar o status de construção do espelhamento

Execute a instrução abaixo para checar o status de construção e o progresso de sincronização de arquivos das tarefas de espelhamento ativas:

SELECT * FROM hologres.hg_datalake_get_mirror_status();

A saída inclui os seguintes campos:

Campo

Descrição

external_db_name

Banco de dados externo onde a tabela espelhada reside.

external_schema_name

Schema externo onde a tabela espelhada reside.

external_table_name

Tabela externa espelhada.

partition

Partição sendo espelhada, se aplicável.

mirror_data_size

Tamanho dos dados espelhados da tabela ou partição.

mirror_start_time

Horário de início da tarefa de construção do espelhamento.

mirror_last_update_time

Última atualização dos dados espelhados.

total_file_count

Número total de arquivos na tabela ou partição de origem.

mirrored_file_count

Quantidade de arquivos já espelhados até o momento.

Para estimar o progresso da sincronização, compare mirrored_file_count com total_file_count. Quando ambos os valores forem iguais, a construção do espelhamento estará concluída.

Visualize o histórico de espelhamento

Execute a instrução a seguir para ver o histórico de agendamento e execução das tarefas de espelhamento de um banco de dados externo específico:

SELECT *
FROM hologres.hg_user_datalake_mirror_cron_tasks
WHERE command::jsonb->>'external_db_name' = '<external_database_name>'
ORDER BY start_time DESC;

Substitua <external_database_name> pelo nome do seu banco de dados externo.

Confirme se a consulta utiliza o espelhamento

Execute EXPLAIN ANALYZE na sua consulta para verificar se o Hologres serviu os resultados a partir dos dados espelhados:

EXPLAIN ANALYZE SELECT <columns> FROM <holo_ext_db.ext_schema.ext_table>;

No final da saída, procure pelas duas linhas abaixo:

Meta mirror table count: use 1 miss 0.
Data mirror file count: use 12 miss 0.

Um valor de miss igual a 0 indica que todos os dados foram servidos pelo espelhamento. Se miss for maior que 0, parte dos dados ainda foi lida diretamente do data lake remoto.

Modifique a configuração do espelhamento

Para atualizar a configuração do espelhamento — por exemplo, alterar o número de partições — execute novamente o comando ALTER EXTERNAL TABLE com os parâmetros atualizados:

ALTER EXTERNAL TABLE <ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'on',
  data_mirroring_partition_num = '12'
);

Desativar o espelhamento de dados

Para desativar o espelhamento em uma tabela, defina data_mirroring_speed_up_enable como off:

ALTER EXTERNAL TABLE <holo_ext_db.ext_schema.ext_table>
SET(
  data_mirroring_speed_up_enable = 'off'
);

Após a desativação do espelhamento, o Hologres interrompe a sincronização de dados e as consultas passam a acessar o data lake diretamente. Os arquivos de dados espelhados localmente são excluídos de forma assíncrona dentro de 30 minutos.

Próximos passos