자동 압축을 사용하여 테이블 로드 - Amazon Redshift

자동 압축을 사용하여 테이블 로드

데이터 평가에 따라 수동으로 테이블의 열에 압축 인코딩을 적용할 수 있습니다. 또는 COMPUPDATE가 [켜짐(ON)]으로 설정된 COPY 명령을 사용하여 샘플 데이터를 기반으로 압축을 자동으로 분석하고 적용할 수 있습니다.

새 테이블을 만들고 로드할 때 자동 압축을 사용할 수 있습니다. COPY 명령은 압축 분석을 수행합니다. 이미 채워진 테이블에 대해 ANALYZE COMPRESSION 명령을 실행하여 테이블에서 데이터를 로드하거나 압축을 변경하지 않고 압축 분석을 수행할 수도 있습니다. 예를 들어 기존 데이터 정의 언어(DDL) 문을 유지하면서 나중에 사용하기 위해 테이블에서 압축을 분석하려는 경우 ANALYZE COMPRESSION을 실행할 수 있습니다.

자동 압축은 압축 인코딩을 선택할 때 전반적인 성능의 밸런스를 유지합니다. 범위가 제한된 스캔은 정렬 키 열이 동일한 쿼리의 다른 열보다 훨씬 높게 압축된 경우 성능이 떨어질 수 있습니다. 따라서 자동 압축은 정렬 키 열에서 데이터 분석 단계를 건너뛰고 사용자 정의 인코딩 유형을 유지합니다.

인코딩 유형을 명시적으로 정의하지 않은 경우 자동 압축은 RAW 인코딩을 선택합니다. ANALYZE COMPRESSION은 동일하게 동작합니다. 최적의 쿼리 성능을 얻으려면 정렬 키에 RAW를 사용해 보십시오.

자동 압축 작동 원리

COMPUPDATE 파라미터가 ON으로 설정된 경우 COPY 명령은 빈 대상 테이블에 COPY 명령을 실행할 때마다 항상 자동 압축을 적용하고 모든 테이블 열에는 RAW 인코딩이 있거나 인코딩이 없습니다.

현재의 압축 인코딩에 상관없이 빈 테이블에 자동 압축을 적용하려면 COMPUPDATE 옵션을 ON으로 설정하여 COPY 명령을 실행합니다. 자동 압축을 끄려면 COMPUPDATE 옵션을 OFF로 설정하여 COPY 명령을 실행합니다.

이미 데이터가 포함되어 있는 테이블에는 자동 압축을 적용할 수 없습니다.

참고

자동 압축 분석이 유의미한 샘플을 생성하려면 로드 데이터에 충분한 행이 필요합니다(조각당 100,000행 이상).

자동 압축은 로드 트랜잭션의 일환으로 백그라운드에서 이러한 작업을 수행합니다.

  1. 초기 행 샘플은 입력 파일에서 로드됩니다. 샘플 크기는 COMPROWS 파라미터의 값에 기반합니다. 기본값은 100,000입니다.

  2. 각 열마다 압축 옵션이 선택됩니다.

  3. 테이블에서 샘플 행이 제거됩니다.

  4. 선택한 압축 인코딩을 사용하여 테이블이 다시 생성됩니다.

  5. 전체 입력 파일이 로드되고 새 인코딩을 사용하여 압축됩니다.

COPY 명령을 실행한 후에 테이블이 완전히 로드되고 압축되며, 사용할 수 있게 됩니다. 나중에 더 많은 데이터를 로드하는 경우, 추가되는 행은 기존 인코딩에 따라 압축됩니다.

압축 분석만을 수행하려면 ANALYZE COMPRESSION을 실행하는 것이 전체 COPY를 실행하는 것보다 효율적입니다. 그런 다음 결과를 평가하여 자동 압축을 사용할지 수동으로 테이블을 다시 생성할지 결정합니다.

자동 압축은 COPY 명령에만 지원됩니다. 아니면 테이블을 만들 때 수동으로 압축 인코딩을 적용할 수 있습니다. 수동 압축 인코딩에 대한 자세한 내용은 열 압축 작업 섹션을 참조하세요.

자동 압축 예

이 예에서는 TICKIT 데이터베이스에 BIGLIST라고 하는 LISTING 테이블의 사본이 포함되어 있고 이 테이블이 약 300만 개의 행과 함께 로드될 때 자동 압축을 적용하려 한다고 가정합니다.

테이블을 로드하고 자동으로 압축하려면
  1. 테이블이 비어 있는지 확인합니다. 자동 압축은 비어 있는 테이블에만 적용할 수 있습니다.

    truncate biglist;
  2. 단일 COPY 명령을 사용하여 테이블을 로드합니다. 테이블이 비어 있어도 이전의 일부 인코딩이 지정되어 있을 수 있습니다. Amazon Redshift가 압축 분석을 수행하도록 촉진하려면 COMPUPDATE 파라미터를 ON으로 설정합니다.

    copy biglist from 's3://mybucket/biglist.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|' COMPUPDATE ON;

    COMPROWS 옵션이 지정되지 않았기 때문에 기본적인 권장 샘플 크기인 조각당 100,000행이 사용됩니다.

  3. 자동으로 선택된 인코딩 체계를 검토하려면 BIGLIST의 새 스키마를 살펴보십시오.

    select "column", type, encoding from pg_table_def where tablename = 'biglist'; Column | Type | Encoding ----------------+-----------------------------+---------- listid | integer | az64 sellerid | integer | az64 eventid | integer | az64 dateid | smallint | none numtickets | smallint | az64 priceperticket | numeric(8,2) | az64 totalprice | numeric(8,2) | az64 listtime | timestamp without time zone | az64
  4. 예상되는 수의 행이 로드되었는지 확인합니다.

    select count(*) from biglist; count --------- 3079952 (1 row)

나중에 COPY 또는 INSERT 문을 사용하여 이 테이블에 행을 추가하는 경우 동일한 압축 인코딩이 적용됩니다.