ZSTD 압축 수준 사용 - Amazon Athena

ZSTD 압축 수준 사용

Zstandard 실시간 데이터 압축 알고리즘은 높은 압축비를 제공하는 빠른 압축 알고리즘입니다. Zstandard(ZSTD) 라이브러리는 오픈 소스 소프트웨어이며 BSD 라이선스를 사용합니다. Athena는 ZSTD 압축 ORC, Parquet 및 텍스트 파일 데이터 읽기 및 쓰기를 지원합니다.

ZSTD 압축 수준을 사용하여 요구 사항에 따라 압축률과 속도를 조정할 수 있습니다. ZSTD 라이브러리는 1~22의 압축 수준을 지원합니다. Athena는 기본적으로 ZSTD 압축 수준 3을 사용합니다.

압축 수준은 압축 속도와 달성된 압축량 간의 세분화된 균형을 제공합니다. 압축 수준이 낮을수록 속도는 빨라지지만 파일 크기는 커집니다. 예를 들어 속도가 가장 중요한 경우 수준 1을 사용하고 크기가 가장 중요한 경우 수준 22를 사용할 수 있습니다. 수준 3이 많은 사용 사례에 적합하며 기본값입니다. 수준 20부터는 더 많은 메모리가 필요하므로 주의하여 사용하세요. ZSTD 라이브러리는 또한 압축 속도와 비율의 범위를 확장하는 네거티브 압축 수준을 제공합니다. 자세한 내용은 Zstandard Compression RFC(Zstandard 압축 RFC)를 참조하세요.

많은 압축 수준은 미세 조정을 위한 상당한 기회를 제공합니다. 그러나 압축 수준을 결정할 때 데이터를 측정하고 장단점을 고려해야 합니다. 압축 속도와 압축된 데이터 크기 간의 적절한 균형을 위해 기본 수준 3 또는 수준 6~9를 사용하는 것이 좋습니다. 크기가 가장 중요하고 압축 속도가 중요하지 않은 경우에는 수준 20 이상을 예약하세요.

고려 사항 및 제한

Athena에서 ZSTD 압축 수준을 사용할 때 다음 사항을 고려하세요.

  • ZSTD compression_level 속성은 Athena 엔진 버전 3에서만 지원됩니다.

  • ZSTD compression_level 속성은 ALTER TABLE, CREATE TABLE, CREATE TABLE AS(CTAS) 및 UNLOAD 문에 지원됩니다.

  • compression_level 속성은 선택 사항입니다.

  • compression_level 속성은 ZSTD 압축에만 지원됩니다.

  • 가능한 압축 수준은 1~22입니다.

  • 기본 압축 수준은 3입니다.

Athena에서 Apache Hive ZSTD 압축 지원에 대한 자세한 내용은 Hive 테이블 압축 사용 섹션을 참조하세요. Athena에서 Apache Iceberg ZSTD 압축 지원에 대한 자세한 내용은 Iceberg 테이블 압축 사용 섹션을 참조하세요.

ZSTD 압축 수준 지정

ALTER TABLE, CREATE TABLE, CREATE TABLE ASUNLOAD 문에 ZSTD 압축 수준을 지정하려면 compression_level 속성을 사용합니다. ZSTD 압축 자체를 지정하려면 문의 구문에서 사용하는 개별 압축 속성을 사용해야 합니다.

ALTER TABLE SET TBLPROPERTIESSET TBLPROPERTIES 절에서 'write.compression' = ' ZSTD' 또는 'parquet.compression' = 'ZSTD'를 사용하여 ZSTD 압축을 지정합니다. 그런 다음 compression_level 속성을 사용하여 1에서 22 사이의 값을 지정합니다(예: 'compression_level' = '5'). 압축 수준 속성을 지정하지 않으면 압축 수준은 기본적으로 3으로 설정됩니다.

다음 예제에서는 ZSTD 압축 및 ZSTD 압축 수준 4와 함께 Parquet 파일 형식을 사용하도록 테이블 existing_table을 수정합니다. TBLPROPERTIES에서 압축 수준 값은 정수가 아닌 문자열로 입력해야 합니다. 따라서 작은 따옴표 또는 큰 따옴표로 묶어야 합니다.

ALTER TABLE existing_table SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = '4')

CREATE TABLETBLPROPERTIES 절에서 'write.compression' = 'ZSTD' 또는 'parquet.compression' = 'ZSTD'를 지정한 다음 compression_level = compression_level을 사용하고 1에서 22 사이의 값을 문자열로 지정합니다. compression_level 속성이 지정되지 않은 경우 기본 압축 수준은 3입니다.

다음 예제에서는 ZSTD 압축과 ZSTD 압축 수준 4를 사용하여 Parquet 파일 형식으로 테이블을 생성합니다.

CREATE EXTERNAL TABLE new_table ( `col0` string COMMENT '', `col1` string COMMENT '' ) STORED AS PARQUET LOCATION 's3://amzn-s3-demo-bucket/' TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = '4')

CREATE TABLE ASWITH 절에서 write_compression = 'ZSTD' 또는 parquet_compression = 'ZSTD'를 지정한 다음 compression_level = compression_level을 사용하고 1에서 22 사이의 값을 문자열로 지정합니다. compression_level 속성이 지정되지 않은 경우 기본 압축 수준은 3입니다.

다음 CTAS 예제에서는 ZSTD 압축과 압축 수준 4를 사용하여 Parquet를 파일 형식으로 지정합니다. 단, WITH 절에서는 압축 수준 값을 문자열이 아닌 정수로 지정해야 합니다.

CREATE TABLE new_table WITH ( format = 'PARQUET', write_compression = 'ZSTD', compression_level = 4) AS SELECT * FROM old_table

UNLOADWITH 절에서 compression = 'ZSTD'를 지정한 다음 compression_level = compression_level을 사용하고 1에서 22 사이의 값을 문자열로 지정합니다. compression_level 속성이 지정되지 않은 경우 기본 압축 수준은 3입니다.

다음 예제에서는 Parquet 파일 형식, ZSTD 압축 및 ZSTD 압축 수준 4를 사용하여 쿼리 결과를 지정된 위치로 언로드합니다.

UNLOAD (SELECT * FROM old_table) TO 's3://amzn-s3-demo-bucket/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)