

# Athena에서 압축 사용
<a name="compression-formats"></a>

Athena는 여러 압축 형식을 사용하는 테이블에서 데이터를 읽는 것을 비롯하여, 데이터 읽기 및 쓰기를 위한 다양한 압축 형식을 지원합니다. 예를 들어 Athena는 일부 Parquet 파일이 Snappy로 압축되고 다른 Parquet 파일이 GZIP으로 압축된 경우 Parquet 파일 형식을 사용하는 테이블의 데이터를 성공적으로 읽을 수 있습니다. ORC, 텍스트 파일, JSON 스토리지 형식에도 동일한 원칙이 적용됩니다.

## 지원되는 압축 형식
<a name="compression-support-formats"></a>

Athena는 다음 압축 형식을 지원합니다.
+ **BZIP2** – Burrows-Wheeler 알고리즘을 사용하는 형식입니다.
+ **DEFLATE** - [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) 및 [Huffman 코딩](https://en.wikipedia.org/wiki/Huffman_coding)을 기반으로 한 압축 알고리즘입니다. [Deflate](https://en.wikipedia.org/wiki/Deflate)는 Avro 파일 형식에만 해당됩니다.
+ **GZIP** - Deflate를 기반으로 한 압축 알고리즘입니다. Athena 엔진 버전 2 및 3의 Hive 테이블과 Athena 엔진 버전 2의 Iceberg 테이블의 경우 GZIP은 Parquet 및 텍스트 파일 스토리지 형식의 파일에 대한 기본 쓰기 압축 형식입니다. `tar.gz` 형식의 파일은 지원되지 않습니다.
+ **LZ4** - Lempel-Ziv 77(LZ7) 패밀리의 이 멤버도 최대 데이터 압축이 아닌 압축 및 압축 해제 속도에 중점을 둡니다. LZ4에는 다음과 같은 프레이밍 형식이 있습니다.
  + **LZ4 Raw/Unframed** – LZ4 블록 압축 형식의 프레이밍되지 않은 표준 구현입니다. 자세한 내용은 GitHub에서 [LZ4 블록 형식 설명](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md)을 참조하세요.
  + **LZ4 framed** - LZ4의 일반적인 프레이밍 구현입니다. 자세한 내용은 GitHub에서 [LZ4 프레임 형식 설명](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md)을 참조하세요.
  + **LZ4 hadoop-compatible** - LZ4의 Apache Hadoop 구현입니다. 이 구현은 LZ4 압축을 [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) 클래스로 래핑합니다.
+ **LZO** - 최대 데이터 압축이 아닌 높은 압축 및 압축 해제 속도에 중점을 둔 Lempel–Ziv–Oberhumer 알고리즘을 사용하는 형식입니다. LZO에는 두 가지 구현이 있습니다.
  + **Standard LZO** - 자세한 내용은 Oberhumer 웹 사이트에서 LZO [요약](http://www.oberhumer.com/opensource/lzo/#abstract)을 참조하세요.
  + **LZO hadoop-compatible** - 이 구현은 LZO 알고리즘을 [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) 클래스로 래핑합니다.
+ **SNAPPY** – Lempel-Ziv 77 (LZ7) 패밀리의 일부인 압축 알고리즘입니다. Snappy는 데이터를 최대한 압축하는 것이 아니라, 높은 압축 및 압축 해제 속도에 중점을 둡니다.
+ **ZLIB** - Deflate를 기반으로 한 ZLIB는 ORC 데이터 스토리지 형식의 파일에 대한 기본 쓰기 압축 형식입니다. 자세한 내용은 GitHub에서 [zlib](https://github.com/madler/zlib) 페이지를 참조하세요.
+  **ZSTD** - [Zstandard 실시간 데이터 압축 알고리즘](http://facebook.github.io/zstd/)은 높은 압축비를 제공하는 빠른 압축 알고리즘입니다. Zstandard(ZSTD) 라이브러리는 BSD 라이선스를 사용하는 오픈 소스 소프트웨어로 제공됩니다. ZSTD는 Iceberg 테이블의 기본 압축입니다. ZSTD 압축 데이터를 작성할 때 Athena는 기본적으로 ZSTD 압축 수준 3을 사용합니다. Athena의 ZSTD 압축 수준 사용에 대한 자세한 내용은 [ZSTD 압축 수준 사용](compression-support-zstd-levels.md) 섹션을 참조하세요.

**참고**  
Athena는 LZ4 또는 LZO 형식으로 압축된 Parquet 파일 쓰기를 지원하지 않습니다. 이러한 압축 형식에 대한 읽기는 계속 지원됩니다.

## 압축 형식 지정
<a name="compression-support-specifying-compression-formats"></a>

CREATE TABLE 또는 CTAS 문을 작성할 때, Athena가 해당 테이블에 쓸 경우 사용할 압축 유형을 지정하는 압축 속성을 지정할 수 있습니다.
+ CTAS의 경우 [CTAS 테이블 속성](create-table-as.md#ctas-table-properties) 섹션을 참조하세요. 예시는 [CTAS 쿼리 예제](ctas-examples.md) 섹션을 참조하세요.
+ CREATE TABLE의 경우 [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md)에서 압축 테이블 속성 목록을 참조하세요.

## 압축 안 함 지정
<a name="compression-support-specifying-no-compression"></a>

CREATE TABLE 문은 압축되지 않은 파일을 지원합니다. 압축되지 않은 파일을 작성하려면 다음 구문을 사용합니다.
+ 테이블 만들기(텍스트 파일 또는 JSON) —`TBLPROPERTIES`를 지정합니다.`write.compression = NONE`.
+ 테이블 만들기(Parquet) —`parquet.compression = UNCOMPRESSED`에서 `TBLPROPERTIES`를 지정합니다.
+ 테이블 생성 (ORC) — `orc.compress = NONE`에서 `TBLPROPERTIES`를 지정합니다.

## 참고 및 리소스
<a name="compression-support-notes-and-resources"></a>
+ 현재 `.GZ` 또는 `.BZIP2`와 같은 대문자 파일 확장명은 Athena에서 인식되지 않습니다. 파일 확장명이 대문자인 데이터 세트을 사용하지 않거나 데이터 파일 확장명의 이름을 소문자로 바꿉니다.
+ CSV, TSV 및 JSON 형식 데이터의 경우 Athena는 파일 확장명에서 압축 형식을 결정합니다. 파일 확장자가 없는 경우 Athena는 데이터를 압축되지 않은 일반 텍스트로 처리합니다. 데이터가 압축된 경우 파일 이름에 `gz`와 같은 압축 확장명이 포함되어 있는지 확인하세요.
+ ZIP 파일 형식은 지원되지 않습니다.
+ Athena에서 querying Amazon Data Firehose 로그를 쿼리하는 경우, 지원되는 형식에는 GZIP 압축 또는 SNAPPY 압축을 사용하는 ORC 파일이 포함됩니다.
+ 압축 사용에 대한 자세한 내용은 AWS 빅 데이터 블로그 게시물 [Top 10 performance tuning tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)(Amazon Athena의 성능 튜닝을 위한 10가지 팁)의 섹션 3(“Compress and split files(파일 압축 및 분할)”)을 참조하세요.

**Topics**
+ [압축 형식 지정](#compression-support-specifying-compression-formats)
+ [압축 안 함 지정](#compression-support-specifying-no-compression)
+ [참고 및 리소스](#compression-support-notes-and-resources)
+ [Hive 테이블 압축](compression-support-hive.md)
+ [Iceberg 테이블 최적화](compression-support-iceberg.md)
+ [ZSTD 압축 수준](compression-support-zstd-levels.md)