Codificação do dicionário de bytes - Amazon Redshift

Codificação do dicionário de bytes

Na codificação do dicionário de bytes, um dicionário separado de valores exclusivos é criado para cada bloco de valores de coluna em disco. (Um bloco de disco do Amazon Redshift ocupa 1 MB.) O dicionário contém até 256 valores de um byte que são armazenados como índices para os valores de dados originais. Se mais do que 256 valores forem armazenados em um único bloco, os valores adicionais serão gravados no bloco em formato bruto, descompactado. O processo é repetido para cada bloco de disco.

Essa codificação é muito eficaz em colunas de strings de baixa cardinalidade. Esta codificação é ótima quando o domínio de dados de uma coluna é menor do que 256 valores exclusivos.

Para colunas com o tipo de dado string (CHAR e VARCHAR) codificado com BYTEDICT, o Amazon Redshift executa varreduras vetorizadas e avaliações de predicados que operam diretamente sobre dados compactados. Essas varreduras usam instruções SIMD (instrução única, vários dados) específicas do hardware para processamento paralelo. Isso acelera significativamente a varredura de colunas de strings. A codificação do dicionário de bytes é especialmente eficiente em termos de espaço se uma coluna CHAR/VARCHAR contém strings de caracteres longas.

Suponha que uma tabela tenha uma coluna COUNTRY com um tipo de dados CHAR(30). Conforme os dados são carregados, o Amazon Redshift cria o dicionário e preenche a coluna COUNTRY com o valor do índice. O dicionário contém os valores exclusivos indexados e a tabela em si contém somente as subscrições de um byte dos valores correspondentes.

nota

Os espaços em branco são armazenados para colunas de caracteres de comprimento fixo. Portanto, em uma coluna CHAR(30), cada valor compactado economiza 29 bytes de armazenamento quando você usa a codificação do dicionário de bytes.

A tabela a seguir representa o dicionário para a coluna COUNTRY.

Valor de dado exclusivo Índice do dicionário Tamanho (tamanho fixo, 30 bytes por valor)
England 0 30
United States of America 1 30
Venezuela 2 30
Sri Lanka 3 30
Argentina 4 30
Japan 5 30
Total 180

A tabela a seguir representa os valores na coluna COUNTRY.

Valor original dos dados Tamanho original (tamanho fixo, 30 bytes por valor) Valor compactado (índice) Novo tamanho (bytes)
England 30 0 1
England 30 0 1
United States of America 30 1 1
United States of America 30 1 1
Venezuela 30 2 1
Sri Lanka 30 3 1
Argentina 30 4 1
Japan 30 5 1
Sri Lanka 30 3 1
Argentina 30 4 1
Total 300 10

O tamanho total compactado neste exemplo é calculado da seguinte forma: 6 entradas diferentes são armazenadas no dicionário (6 x 30 = 180) e a tabela contém 10 valores de 1 byte compactados, totalizando 190 bytes.