적색 변이 복사본은 분석에서 다른 압축 인코딩을 만듭니다.

amazon-redshift amazon-s3 data-compression sql sqlbulkcopy

문제

AWS Redshift는 데이터를 COPY를 통해 빈 테이블에로드 할 때 자동으로 생성되는 열 압축 인코딩과 다른 열 압축 인코딩을 권장합니다.

예를 들어, 다음과 같이 S3에서 테이블을로드하고 데이터를로드했습니다.

CREATE TABLE Client (Id varchar(511) , ClientId integer , CreatedOn timestamp, 
UpdatedOn timestamp ,  DeletedOn timestamp , LockVersion integer , RegionId 
varchar(511) , OfficeId varchar(511) , CountryId varchar(511) ,  
FirstContactDate timestamp , DidExistPre boolean , IsActive boolean , 
StatusReason integer ,  CreatedById varchar(511) , IsLocked boolean , 
LockType integer , KeyWorker varchar(511) ,  InactiveDate timestamp , 
Current_Flag varchar(511) );

테이블 클라이언트 생성 실행 시간 : 0.3s

copy Client from 's3://<bucket-name>/<folder>/Client.csv' 
credentials 'aws_access_key_id=<access key>; aws_secret_access_key=<secret>' 
csv fillrecord truncatecolumns ignoreheader 1 timeformat as 'YYYY-MM-
DDTHH:MI:SS' gzip acceptinvchars compupdate on region 'ap-southeast-2';    

경고 : '클라이언트'테이블에로드 완료, 24284 레코드가 성공적으로로드되었습니다. '클라이언트'테이블에로드가 완료되면 ACCEPTINVCHARS를 (를) 대체하여 6 개의 레코드가로드되었습니다. 자세한 내용은 'stl_replacements'시스템 테이블을 확인하십시오.

영향을받은 행 0 개가 COPY가 성공적으로 실행되었습니다.

실행 시간 : 3.39s

이 작업을 수행하면 COPY에 의해 적용된 열 압축 인코딩을 볼 수 있습니다.

select "column", type, encoding, distkey, sortkey, "notnull" 
from pg_table_def where tablename = 'client';

기부 :

╔══════════════════╦═════════════════════════════╦═══════╦═══════╦═══╦═══════╗
â•‘ id               â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ clientid         â•‘ integer                     â•‘ delta â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ createdon        â•‘ timestamp without time zone â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ updatedon        â•‘ timestamp without time zone â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ deletedon        â•‘ timestamp without time zone â•‘ none  â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ lockversion      â•‘ integer                     â•‘ delta â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ regionid         â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ officeid         â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ countryid        â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ firstcontactdate â•‘ timestamp without time zone â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ didexistprecirts â•‘ boolean                     â•‘ none  â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ isactive         â•‘ boolean                     â•‘ none  â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ statusreason     â•‘ integer                     â•‘ none  â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ createdbyid      â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ islocked         â•‘ boolean                     â•‘ none  â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ locktype         â•‘ integer                     â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ keyworker        â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ inactivedate     â•‘ timestamp without time zone â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
â•‘ current_flag     â•‘ character varying(511)      â•‘ lzo   â•‘ false â•‘ 0 â•‘ false â•‘
╚══════════════════╩═════════════════════════════╩═══════╩═══════╩═══╩═══════╝

그 때 나는 할 수있다 :

analyze compression client;

기부 :

╔════════╦══════════════════╦═══════╦═══════╗
â•‘ client â•‘ id               â•‘ zstd  â•‘ 40.59 â•‘
â•‘ client â•‘ clientid         â•‘ delta â•‘ 0.00  â•‘
â•‘ client â•‘ createdon        â•‘ zstd  â•‘ 19.85 â•‘
â•‘ client â•‘ updatedon        â•‘ zstd  â•‘ 12.59 â•‘
â•‘ client â•‘ deletedon        â•‘ raw   â•‘ 0.00  â•‘
â•‘ client â•‘ lockversion      â•‘ zstd  â•‘ 39.12 â•‘
â•‘ client â•‘ regionid         â•‘ zstd  â•‘ 54.47 â•‘
â•‘ client â•‘ officeid         â•‘ zstd  â•‘ 88.84 â•‘
â•‘ client â•‘ countryid        â•‘ zstd  â•‘ 79.13 â•‘
â•‘ client â•‘ firstcontactdate â•‘ zstd  â•‘ 22.31 â•‘
â•‘ client â•‘ didexistprecirts â•‘ raw   â•‘ 0.00  â•‘
â•‘ client â•‘ isactive         â•‘ raw   â•‘ 0.00  â•‘
â•‘ client â•‘ statusreason     â•‘ raw   â•‘ 0.00  â•‘
â•‘ client â•‘ createdbyid      â•‘ zstd  â•‘ 52.43 â•‘
â•‘ client â•‘ islocked         â•‘ raw   â•‘ 0.00  â•‘
â•‘ client â•‘ locktype         â•‘ zstd  â•‘ 63.01 â•‘
â•‘ client â•‘ keyworker        â•‘ zstd  â•‘ 38.79 â•‘
â•‘ client â•‘ inactivedate     â•‘ zstd  â•‘ 25.40 â•‘
â•‘ client â•‘ current_flag     â•‘ zstd  â•‘ 90.51 â•‘
╚════════╩══════════════════╩═══════╩═══════╝

즉 아주 다른 결과.

왜 이런 일이 일어날 지 알고 싶어? 나는 ~ 24K 레코드가 AWS 가 의미있는 압축 분석 샘플에 필요한 것으로 지정한 100K보다 적지 만 COPY 및 ANALYZE가 동일한 24K 행 테이블에 대해 다른 결과를 제공한다는 것이 여전히 이상하게 보입니다.

수락 된 답변

COPY는 현재 권장되는 압축 설정이 다른 ZSTD를 권장하지 않습니다.

압축을 극대화하려는 영구 테이블 (최소 공간 사용)에 압축을 적용하려면 ZSTD를 보드 전체에 걸쳐 설정하면 최적의 압축에 가까워집니다.

RAW가 일부 열에 돌아 오는 이유는이 경우 압축을 적용 할 때 이점이 없기 때.입니다 (압축의 유무와 동일한 블록 수). 테이블이 커질 것이라는 것을 알고 있다면 해당 컬럼에도 압축을 적용하는 것이 좋습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.