Carregamento de tabelas com compactação automática
Você pode aplicar codificações de compactação a colunas em tabelas manualmente com base em sua própria avaliação dos dados. Ou você pode usar o comando COPY com COMPUPDATE definido como ON para analisar e aplicar compactação automaticamente com base nos dados de amostra.
Você pode usar a compactação automática ao criar e carregar uma nova tabela. O comando COPY executa uma análise de compactação. Você também pode executar uma análise de compactação sem carregar dados ou alterar a compactação em uma tabela executando o comando ANALYZE COMPRESSION em uma tabela já preenchida. Por exemplo, você pode executar ANALYZE COMPRESSION quando quiser analisar a compactação em uma tabela para uso futuro, preservando as instruções de linguagem de definição de dados (DDL) existentes.
A compactação automática equilibra a performance geral ao escolher codificações de compactação. As varreduras restritas por intervalo podem apresentar má performance se as colunas de chaves de classificação forem mais altamente compactadas do que outras colunas na mesma consulta. Como resultado, a compactação automática ignora a fase de análise de dados nas colunas de chave de classificação e mantém os tipos de codificação definidos pelo usuário.
A compactação automática escolherá a codificação RAW se você não tiver definido explicitamente um tipo de codificação. ANALYZE COMPRESSION se comporta da mesma forma. Para obter a performance ideal de consultas, considere o uso de RAW para chaves de classificação.
Como a compactação automática funciona
Quando o parâmetro COMPUPDATE é definido como ON, o comando COPY aplica a compactação automática sempre que você executa o comando COPY com uma tabela de destino vazia e todas as colunas da tabela têm a codificação RAW ou nenhuma codificação.
Para aplicar a compactação automática em uma tabela vazia, independentemente de suas codificações atuais de compactação, execute o comando COPY com a opção COMPUPDATE definida como ON. Para desativar a compactação automática, execute o comando COPY com a opção COMPUPDATE definida como desativado.
Você não pode aplicar a compactação automática em uma tabela que já contém dados.
nota
A análise de compactação automática requer linhas suficientes nos dados de carregamento (pelo menos 100.000 linhas por fatia) para gerar uma amostra significativa.
A compactação automática executa essas operações em segundo plano como parte da transação de carregamento:
-
Uma amostra inicial das linhas do arquivo de entrada é carregada. O tamanho da amostra é baseado no valor do parâmetro COMPROWS. O padrão é 100,000.
-
As opções de compactação são escolhidas para cada coluna.
-
As linhas da amostra são removidas da tabela.
-
A tabela é recriada com as codificações de compactação escolhidas.
-
O arquivo de entrada é carregado e compactado usando as novas codificações.
Quando você executa o comando COPY, a tabela é totalmente carregada, compactada e está pronta para uso. Se você carregar mais dados depois, as linhas adicionadas são compactadas de acordo com a codificação existente.
Se você deseja executar somente uma análise de compactação, execute ANALYZE COMPRESSION que é mais eficiente que a execução de um COPY completo. Então, você pode avaliar os resultados para decidir se deve usar a compactação automática ou recriar a tabela manualmente.
A compactação automática é compatível somente com o comando COPY. Como alternativa, você pode aplicar a codificação de compactação manualmente ao criar a tabela. Para obter informações sobre a codificação de compactação manual, consulte Compactação de colunas para reduzir o tamanho dos dados armazenados.
Exemplo de compactação automática
Neste exemplo, suponha que o banco de dados TICKIT contenha uma cópia da tabela LISTING chamada BIGLIST e que você queira aplicar a compactação automática nessa tabela quando ela estiver carregada com aproximadamente 3 milhões de linhas.
Para carregar e compactar automaticamente a tabela
-
A tabela deve estar vazia. Você pode aplicar a compactação automática somente em uma tabela vazia:
TRUNCATE biglist;
-
Carregue a tabela com um único comando COPY. Embora a tabela esteja vazia, alguma codificação anterior pode ter sido especificada. Para garantir que o Amazon Redshift execute uma análise de compactação, defina o parâmetro COMPUPDATE como ativado.
COPY biglist FROM 's3://amzn-s3-demo-bucket/biglist.txt' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|' COMPUPDATE ON;
Como nenhuma opção COMPROWS está especificada, o tamanho padrão e recomendado de amostra de 100.000 linhas por fatia é usado.
-
Observe o novo esquema para a tabela BIGLIST para revisar os esquemas de codificação escolhidos automaticamente.
SELECT "column", type, encoding from pg_table_def where tablename = 'biglist';
Column | Type | Encoding ----------------+-----------------------------+---------- listid | integer | az64 sellerid | integer | az64 eventid | integer | az64 dateid | smallint | none numtickets | smallint | az64 priceperticket | numeric(8,2) | az64 totalprice | numeric(8,2) | az64 listtime | timestamp without time zone | az64
-
Verifique que o número esperado de linhas foi carregado:
select count(*) from biglist;
count --------- 3079952 (1 row)
Quando linhas forem adicionadas posteriormente a essa tabela usando instruções COPY ou INSERT, as mesmas codificações de compactação serão aplicadas.