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 |
|
|
Sim |
Ativa ou desativa o espelhamento de dados. Valores válidos: |
|
|
Não |
Aplicável a tabelas particionadas. Especifique o número de partições mais recentes a espelhar. Valores válidos: |
|
|
Não |
Aplicável a tabelas particionadas. Defina uma lista separada por vírgulas com os nomes das partições a espelhar. |
|
|
Não |
Determina os recursos usados no processo de construção do espelhamento. Padrão: |
|
|
Não |
Indica a quantidade de recursos serverless (vCPUs) para o processo de construção do espelhamento. Necessário apenas quando |
|
|
Não |
Configura uma chave de clustering nos dados espelhados para acelerar consultas de intervalo. |
|
|
Não |
Aplica codificação de dicionário em colunas especificadas para reduzir o armazenamento e agilizar consultas em dados de baixa cardinalidade. |
|
|
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 |
|
|
Banco de dados externo onde a tabela espelhada reside. |
|
|
Schema externo onde a tabela espelhada reside. |
|
|
Tabela externa espelhada. |
|
|
Partição sendo espelhada, se aplicável. |
|
|
Tamanho dos dados espelhados da tabela ou partição. |
|
|
Horário de início da tarefa de construção do espelhamento. |
|
|
Última atualização dos dados espelhados. |
|
|
Número total de arquivos na tabela ou partição de origem. |
|
|
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
Definir propriedades e índices de tabela — saiba mais sobre os tipos de índice suportados em dados espelhados
Aceleração de data lake OSS — visão geral do serviço de aceleração de data lake
CREATE EXTERNAL DATABASE — configure o External Database necessário para o espelhamento de dados