Tipo VARBYTE - Amazon Redshift

Tipo VARBYTE

Utilice una columna VARBYTE, VARBINARY o VARYING BINARY para almacenar valores binarios de longitud variable con un límite fijo.

varbyte [ (n) ]

El número máximo de bytes (n) puede variar de 1 a 16 777 216. El valor predeterminado es 64 000.

Algunos ejemplos en los que podría ser conveniente utilizar un tipo de datos VARBYTE son los siguientes:

  • Puede unir tablas en columnas VARBYTE.

  • Puede crear vistas materializadas que contengan columnas VARBYTE. Se admite la actualización progresiva de las vistas materializadas que contienen columnas VARBYTE. Sin embargo, a diferencia de las funciones agregadas COUNT, MIN y MAX y GROUP BY en columnas VARBYTE, no son compatibles con la actualización progresiva.

Para garantizar que todos los bytes sean caracteres imprimibles, Amazon Redshift utiliza el formato hexadecimal cuando muestra los valores VARBYTE. Por ejemplo, el siguiente SQL convierte la cadena hexadecimal 6162 en un valor binario. Aunque el valor devuelto es un valor binario, los resultados aparecen como hexadecimal 6162.

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

Amazon Redshift es compatible con la conversión entre VARBYTE y los siguientes tipos de datos:

  • CHAR

  • VARCHAR

  • SMALLINT

  • INTEGER

  • BIGINT

Cuando se hace una conversión con CHAR y VARCHAR, se utiliza el formato UTF-8. Para obtener más información acerca del formato UTF-8, consulte TO_VARBYTE. Cuando se hace una conversión desde SMALLINT, INTEGER y BIGINT, se mantiene el número de bytes del tipo de datos original. Es decir, dos bytes para SMALLINT, cuatro bytes para INTEGER y ocho bytes para BIGINT.

La siguiente instrucción SQL convierte un string VARCHAR en un VARBYTE. Aunque el valor devuelto es un valor binario, los resultados aparecen como hexadecimal 616263.

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

La siguiente instrucción SQL convierte un valor CHAR de una columna e un VARBYTE. En este ejemplo, se crea una tabla con una columna CHAR (10) (c), se insertan valores de caracteres más cortos que la longitud de 10. La conversión obtenida completa el resultado con un espacio de caracteres (hex “20”) hasta el tamaño de columna definido. Aunque el valor devuelto es un valor binario, los resultados se muestran como hexadecimal.

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

La siguiente instrucción SQL convierte una cadena SMALLINT en un VARBYTE. Aunque el valor devuelto es un valor binario, los resultados aparecen como hexadecimal 0005, es decir, dos bytes o cuatro caracteres hexadecimales.

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

La siguiente instrucción SQL convierte un INTEGER en un VARBYTE. Aunque el valor devuelto es un valor binario, los resultados aparecen como hexadecimal 00000005, es decir, cuatro bytes u ocho caracteres hexadecimales.

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

La siguiente instrucción SQL convierte un BIGINT en un VARBYTE. Aunque el valor devuelto es un valor binario, los resultados aparecen como hexadecimal 0000000000000005, es decir, ocho bytes o 16 caracteres hexadecimales.

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

Las características de Amazon Redshift compatibles con el tipo de datos VARBYTE son las siguientes:

Limitaciones a la hora de utilizar el tipo de datos VARBYTE con Amazon Redshift

A continuación, se indican las limitaciones a la hora de utilizar el tipo de datos VARBYTE con Amazon Redshift:

  • Amazon Redshift Spectrum solo admite el tipo de datos VARBYTE para archivos Parquet y ORC.

  • El editor de consultas de Amazon Redshift y el de Amazon Redshift v2 aún no son totalmente compatibles con el tipo de datos VARBYTE. Por ello, se debe utilizar un cliente SQL diferente cuando trabaje con expresiones VARBYTE.

    Una solución para utilizar el editor de consultas es que, si la longitud de sus datos es inferior a 64 KB y el contenido es un UTF-8 válido, se pueden convertir los valores VARBYTE en VARCHAR, por ejemplo:

    select to_varbyte('6162', 'hex')::varchar;
  • No se pueden utilizar tipos de datos VARBYTE con funciones definidas por el usuario (UDF) de Python o Lambda.

  • No se puede crear una columna HLLSKETCH a partir de una columna VARBYTE ni utilizar APPROXIMATE COUNT DISTINCT en una columna VARBYTE.

  • Solo se puede hacer la ingesta de valores VARBYTE de más de 1 MB a partir de los siguientes formatos de archivo:

    • Parquet

    • Texto

    • Valores separados por comas (CSV)