Codificación mostly - Amazon Redshift

Codificación mostly

Las codificaciones mostly son útiles cuando el tipo de datos de una columna es mayor que lo que requieren la mayoría de los valores almacenados. Al especificar una codificación mostly para este tipo de columnas, puede comprimir la mayoría de los valores de la columna a un tamaño de almacenamiento estándar más pequeño. Los valores restantes que no pueden comprimirse se almacenan sin formato. Por ejemplo, puede comprimir una columna de 16 bits, como una columna IT2, a un almacenamiento de 8 bits.

Por lo general, las codificaciones mostly funcionan con los siguientes tipos de datos:

  • SMALLINT/INT2 (16 bits)

  • INTEGER/INT (32 bits)

  • BIGINT/INT8 (64 bits)

  • DECIMAL/NUMERIC (64 bits)

Seleccione la variación adecuada de codificación mostly en función del tamaño de los tipos de datos de la columna. Por ejemplo, aplique la codificación MOSTLY8 a una columna definida para valores enteros de 16 bits. No está permitido aplicar MOSTLY16 a una columna con tipos de datos de 16 bits o MOSTLY32 a una columna con tipos de datos de 32 bits.

La mayoría de las codificaciones pueden ser menos eficaces que la ausencia de compresión cuando no se puede comprimir un número relativamente elevado de los valores de la columna. Antes de aplicar una de estas codificaciones a una columna, realice la comprobación correspondiente. La mayoría de los valores que se vayan a cargar ahora (y que es probable que se carguen más adelante) deberían ajustarse a los rangos que se muestran en la siguiente tabla.

Codificación Tamaño de almacenamiento comprimido Rango de valores que pueden comprimirse (los valores fuera del rango se almacenan sin formato)
MOSTLY8 1 byte (8 bits) De -128 a 127
MOSTLY16 2 bytes (16 bits) De -32768 a 32767
MOSTLY32 4 bytes (32 bits) De -2147483648 a 2147483647
nota

Para los valores decimales, omita la coma decimal para determinar si el valor se ajusta al rango. Por ejemplo, 1 234,56 es tratado como 123 456 y se puede comprimir en una columna MOSTLY32.

Por ejemplo, la columna VENUEID de la tabla VENUE está definida como una columna de valores enteros sin formato, lo que significa que su valor consume 4 bytes de almacenamiento. No obstante, el rango actual de valores de la columna es de 0 a 309. Por lo tanto, si se vuelve a crear y a cargar esta tabla con la codificación MOSTLY16 para VENUEID, se reduciría el almacenamiento de cada valor en esa columna a 2 bytes.

Si la mayoría de los valores de VENUEID a los que se hace referencia en otra tabla estuvieran en el rango de 0 a 127, podría tener sentido codificar esa columna de clave externa como MOSTLY8. Antes de tomar una decisión, ejecute algunas consultas en los datos de la tabla de referencia para averiguar si la mayoría de los valores están comprendidos en el intervalo de 8 bits, 16 bits o 32 bits.

En la siguiente tabla, se muestran los tamaños comprimidos para valores numéricos específicos cuando se utilizan codificaciones MOSTLY8, MOSTLY16 y MOSTLY32:

Valor original Tamaño original INT o BIGINT (bytes) Tamaño comprimido con MOSTLY8 (bytes) Tamaño comprimido con MOSTLY16 (bytes) Tamaño comprimido con MOSTLY32 (bytes)
1 4 1 2 4
10 4 1 2 4
100 4 1 2 4
1 000 4 Igual que el tamaño de datos sin formato 2 4
10000 4 2 4
20000 4 2 4
40000 8 Igual que el tamaño de datos sin formato 4
100000 8 4
2000000000 8 4