Antes da versão V0.10 do Hologres, as tabelas orientadas a colunas utilizavam o formato legado Segment. A partir da V0.10, novas tabelas orientadas a colunas passaram a usar o formato AliORC (orc) por padrão, o que oferece melhor compressão de dados e menores custos de armazenamento. O Hologres V1.3 e versões posteriores não permitem mais a criação de tabelas no formato Segment. Este tópico descreve como verificar o formato de armazenamento atual das suas tabelas e migrar as existentes para o formato ORC.
Formatos de armazenamento
O Hologres armazena dados em três formatos:
|
Formato |
Tipo de tabela |
Descrição |
|
|
Orientada a colunas |
Formato de arquivo legado por coluna. Era o padrão para tabelas orientadas a colunas em versões anteriores à V0.10. Não há mais suporte para novas tabelas na V1.3 e posteriores. |
|
|
Orientada a colunas |
Formato colunar AliORC. Padrão para tabelas orientadas a colunas desde a V0.10. Oferece melhor compressão de dados e custos de armazenamento inferiores aos do formato |
|
|
Orientada a linhas |
Formato padrão para tabelas orientadas a linhas. |
Não é possível converter uma tabela orientada a colunas em uma tabela orientada a linhas apenas alterando o formato de armazenamento. Para mudar o tipo de tabela, crie uma nova tabela com o schema desejado.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do Hologres executando a V0.10 ou superior. Verifique a versão da sua instância na página de detalhes da instância no console do Hologres. Caso sua instância esteja em uma versão anterior à V0.10, atualize-a primeiro. Se encontrar erros durante a atualização, consulte Erros comuns durante a preparação da atualização ou obtenha suporte online.
-
Uma tabela Segment do Hologres.
NotaPara tabelas particionadas, execute o comando apenas na tabela pai.
Verificar o formato de armazenamento
Execute a seguinte instrução SQL para visualizar o formato de armazenamento de cada tabela no banco de dados atual:
SELECT *
FROM hologres.hg_table_properties
WHERE property_key = 'storage_format';
Exemplo de saída:
table_namespace | table_name | property_key | property_value
-----------------+--------------------+----------------+----------------
public | part | storage_format | segment
public | partsupp | storage_format | segment
public | customer | storage_format | segment
public | orders_row | storage_format | sst
public | sp_orders | storage_format | segment
public | sp_orders_20161231 | storage_format | segment
public | sp_orders_20171231 | storage_format | segment
public | sp_orders_20181231 | storage_format | segment
public | lineitem | storage_format | segment
public | nation | storage_format | orc
public | region | storage_format | orc
public | supplier | storage_format | orc
public | orders | storage_format | orc
(13 rows)
Migre para o formato ORC as tabelas com property_value igual a segment.
Converter uma única tabela para o formato ORC
Após a execução do comando, um processo em segundo plano converte os dados para ORC de forma assíncrona. Esse processo consome recursos de CPU, I/O e largura de banda de rede, podendo afetar o desempenho de serviços online. Execute este comando fora dos horários de pico.
Execute o comando abaixo para alterar o formato de armazenamento de uma tabela:
call set_table_property ('table_name', 'storage_format', 'orc');
Substitua table_name pelo nome da sua tabela. O exemplo a seguir converte a tabela part:
call set_table_property ('public.part', 'storage_format', 'orc');
Limitações
Converta uma tabela por vez. Este comando não suporta conversão em lote.
Em tabelas particionadas, execute o comando somente na tabela pai.
Converter tabelas em lote do formato Segment para ORC
O Hologres V1.3.35 e versões posteriores suportam a conversão em lote do formato Segment para ORC. Utilize esta abordagem quando houver muitas tabelas Segment para migrar.
O comando de conversão em lote é executado de forma assíncrona e consome recursos de CPU e memória, o que pode impactar serviços de processamento em lote. Execute-o fora dos horários de pico.
Etapa 1: Identificar as tabelas Segment no banco de dados atual.
select * from hologres.hg_table_properties
where property_key = 'storage_format' and property_value like '%segment%';
Se a consulta retornar um resultado vazio, nenhuma tabela no banco de dados atual precisa de conversão.
Etapa 2: Iniciar a conversão em lote.
call hg_convert_segment_orc([<BATCH_SIZE>]);
O parâmetro BATCH_SIZE é opcional e especifica o número de tabelas a serem convertidas simultaneamente. O valor padrão é 100.
O comando funciona da seguinte maneira:
Retorna imediatamente uma mensagem de sucesso e inicia a conversão em segundo plano.
Converte até
BATCH_SIZEtabelas simultaneamente por execução.Consome recursos de CPU e memória durante a conversão. Monitore essas métricas: uma queda no uso de CPU e memória indica que a conversão foi concluída. Dependendo do volume de dados, o processo pode levar de alguns minutos a várias horas.
Caso o comando retorne um resultado vazio, todas as tabelas do banco de dados atual já foram convertidas ou estão em processo de conversão.
Se o comando retornar
continue to call hg_convert_segment_orc() if you want to convert all tables in current database., ainda restam tabelas Segment. Continue executando o comando até obter um resultado vazio.
Repita as Etapas 1 e 2 para cada banco de dados da sua instância.
Conversão automática ao criar uma tabela Segment (V1.3.29 e posteriores)
A partir do Hologres V1.3.29, se você executar uma instrução CREATE TABLE especificando o formato Segment, o sistema converterá automaticamente o formato para ORC e exibirá o seguinte aviso:
NOTICE:storage format 'segment' is no longer supported,converted to 'orc'