Mostly 인코딩 - Amazon Redshift

Mostly 인코딩

Mostly 인코딩은 열의 데이터 형식이 대부분 저장되는 값에 필요한 데이터 형식보다 큰 경우에 유용합니다. 이러한 열 형식에 Mostly 인코딩을 지정하면 열에 저장되어 있는 대부분 값을 더 작은 표준 스토리지 크기로 압축할 수 있습니다. 압축되지 않는 나머지 값들은 원시 형태로 저장됩니다. 예를 들어 INT2 열 같은 16비트 열을 8비트 스토리지로 압축할 수 있습니다.

일반적으로 Mostly 인코딩은 다음과 같은 데이터 형식에서 유효합니다.

  • SMALLINT/INT2(16비트)

  • INTEGER/INT(32비트)

  • BIGINT/INT8(64비트)

  • DECIMAL/NUMERIC(64비트)

열의 데이터 형식 크기에 따라 적합한 유형의 Mostly 인코딩을 선택합니다. 예를 들어 16비트 정수 열로 정의되어 있는 열에는 MOSTLY8을 적용합니다. 16비트 데이터 형식의 열에 MOSTLY16을 적용하거나, 혹은 32비트 데이터 형식의 열에 MOSTLY32를 적용하는 것은 허용되지 않습니다.

열에서 압축할 수 없는 값이 비교적 많은 경우에는 인코딩이 압축하지 않는 것보다 대부분 효과적이지 못할 수도 있습니다. 이러한 인코딩 중 하나를 열에 적용하기 전에 확인합니다. 로드하려고 하는(혹은 앞으로 로드할 가능성이 있는) 대부분 값이 다음 표의 범위에 해당해야 합니다.

인코딩 압축된 스토리지 크기 압축할 수 있는 값의 범위(범위를 벗어나는 값은 원시 형태로 저장됨)
MOSTLY8 1바이트(8비트) -128~127
LZO 2바이트(16비트) -32768~32767
MOSTLY32 4바이트(32비트) 4 bytes
참고

소수 값인 경우에는 값이 범위에 해당하는지 확인할 때 소수점을 무시하십시오. 예를 들어 1,234.56은 123,456으로 처리되어 MOSTLY32 열에서 압축될 수 있습니다.

예를 들어 VENUE 테이블의 VENUEID 열은 원시 형태의 정수 열로 정의됩니다. 이 말은 열의 값이 4바이트의 스토리지를 소비한다는 것을 의미합니다. 하지만 현재 열 값의 범위는 0~309입니다. 따라서 이 테이블을 재생성한 후 VENUEID 열에 MOSTLY16 인코딩을 적용하여 다시 로드하면 해당 열 값의 스토리지가 2바이트로 줄어듭니다.

다른 테이블에서 참조한 VENUEID 값의 범위가 대부분 0~127이었다면 외래 키 열을 MOSTLY8로 인코딩하는 것이 좋을 수도 있습니다. 따라서 선택을 하기 전에 참조 테이블 데이터를 대상으로 여러 쿼리를 실행하여 값이 해당하는 범위가 8비트인지, 16비트인지 또는 32비트인지 확인해야 합니다.

다음 표는 MOSTLY8, MOSTLY16 및 MOSTLY32 인코딩을 사용할 때 특정 숫자 값의 압축 크기를 나타낸 것입니다.

원래 값 원래 INT 또는 BIGINT 크기(바이트) MOSTLY8 압축 크기(바이트) MOSTLY16 압축 크기(바이트) MOSTLY32 압축 크기(바이트)
1 4 1 2 4
10 4 1 2 4
100 4 1 2 4
1000 4 원시 데이터 크기와 동일함 2 4
10000 4 2 4
20000 4 2 4
40000 8 원시 데이터 크기와 동일함 4
100000 8 4
2000000000 8 4