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 adotam por padrão o formato AliORC (orc), 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 tabelas 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. Proporciona melhor compressão de dados e custos de armazenamento reduzidos em comparação ao |
|
|
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ê possui:
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 Common errors during upgrade preparation ou get online support.
-
Uma tabela Segment no 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)
Tabelas com property_value igual a segment precisam ser migradas para o formato ORC.
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 services 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');
Converter tabelas em lote do formato Segment para ORC
O Hologres V1.3.35 e versões posteriores oferecem suporte à conversão em lote do formato Segment para ORC. Utilize esta abordagem quando houver muitas tabelas Segment existentes 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 workloads online. Execute-o fora dos horários de pico.
Etapa 1: Identificar 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 existem tabelas Segment restantes. Continue executando o comando até que ele retorne um resultado vazio.
Repita as Etapas 1 e 2 para cada banco de dados na 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 com o formato Segment, o sistema converterá automaticamente o formato para ORC e retornará o seguinte aviso:
NOTICE:storage format 'segment' is no longer supported,converted to 'orc'