Tipo VARBYTE - Amazon Redshift

Tipo VARBYTE

Use uma coluna VARBYTE, VARBINARY ou BINARY VARYING para armazenar valores binários de tamanho variável com limite fixo.

varbyte [ (n) ]

O número máximo de bytes (n) pode variar de 1 a 16.777.216. O padrão é 64.000.

Estes são alguns exemplos em que convém usar um tipo de dados VARBYTE:

  • Unir tabelas em colunas VARBYTE.

  • Criar visões materializadas que contenham colunas VARBYTE. Há suporte para a atualização incremental de visões materializadas que contêm colunas VARBYTE. Porém, funções agregadas que não sejam COUNT, MIN e MAX e GROUP BY nas colunas VARBYTE não são compatíveis com atualização incremental.

Para garantir que todos os bytes sejam caracteres imprimíveis, o Amazon Redshift usa o formato hexadecimal para imprimir valores VARBYTE. Por exemplo, o seguinte SQL converte a cadeia de caracteres hexadecimal 6162 em um valor binário. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais 6162.

select from_hex('6162'); from_hex ---------- 6162

O Amazon Redshift é compatível com a conversão entre VARBYTE e os seguintes tipos de dados:

  • CHAR

  • VARCHAR

  • SMALLINT

  • INTEGER

  • BIGINT

Ao converter CHAR e VARCHAR, utiliza-se o formato UTF-8. Para obter mais informações sobre o formato do UTF-8, consulte TO_VARBYTE. Ao converter SMALLINT, INTEGER e BIGINT, mantém-se o número de bytes do tipo de dados original. São dois bytes para SMALLINT, quatro bytes para INTEGER e oito bytes para BIGINT.

A instrução SQL a seguir converte uma cadeia de caracteres VARCHAR para VARBYTE. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais 616263.

select 'abc'::varbyte; varbyte --------- 616263

A instrução SQL a seguir converte um valor CHAR em uma coluna para VARBYTE. Este exemplo cria uma tabela com uma coluna (c) CHAR(10), insere valores de caracteres menores que o comprimento de 10. A conversão resultante insere o resultado com caracteres de espaço (hex'20') para o tamanho de coluna definido. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais.

create table t (c char(10)); insert into t values ('aa'), ('abc'); select c::varbyte from t; c ---------------------- 61612020202020202020 61626320202020202020

A instrução SQL a seguir converte uma cadeia de caracteres SMALLINT para VARBYTE. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais 0005, que são caracteres hexadecimais de dois ou quatro bytes.

select 5::smallint::varbyte; varbyte --------- 0005

A instrução SQL a seguir converte um INTEGER para VARBYTE. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais 00000005, que são caracteres hexadecimais de quatro ou oito bytes.

select 5::int::varbyte; varbyte ---------- 00000005

A instrução SQL a seguir converte um BIGINT para VARBYTE. Mesmo que o valor retornado seja um valor binário, os resultados são impressos como hexadecimais 0000000000000005, que são caracteres hexadecimais de oito ou 16 bytes.

select 5::bigint::varbyte; varbyte ------------------ 0000000000000005

Os recursos do Amazon Redshift compatíveis com o tipo de dados VARBYTE incluem:

Limitações ao usar dados do tipo VARBYTE com o Amazon Redshift

Estas são as limitações ao usar dados do tipo VARBYTE com o Amazon Redshift:

  • O Amazon Redshift Spectrum é compatível com o tipo de dado VARBYTE somente para arquivos Parquet e ORC.

  • O editor de consultas do Amazon Redshift e o editor de consultas do Amazon Redshift v2 ainda não são totalmente compatíveis com o tipo de dados VARBYTE. Portanto, use um cliente SQL diferente ao trabalhar com expressões VARBYTE.

    Como uma solução alternativa para usar o editor de consultas, se o comprimento dos dados estiver abaixo de 64 KB e o conteúdo for caracteres UTF-8 válidos, você poderá converter os valores VARBYTE para VARCHAR, por exemplo:

    select to_varbyte('6162', 'hex')::varchar;
  • Não é possível usar tipos de dados VARBYTE com funções definidas pelo usuário (UDFs) em Python ou Lambda.

  • Não é possível criar uma coluna HLLSKETCH a partir de uma coluna VARBYTE ou usar APPROXIMATE COUNT DISTINCT em uma coluna VARBYTE.

  • Valores de VARBYTE maiores que 1 MB só podem ser ingeridos nos seguintes formatos de arquivo:

    • Parquet

    • Texto

    • Valores separados por vírgula (CSV)