

# Amazon Ion Hive SerDe
<a name="ion-serde"></a>

Amazon Ion Hive SerDe를 사용하여 [Amazon Ion](https://amzn.github.io/ion-docs/guides/cookbook.html) 형식으로 저장된 데이터를 쿼리할 수 있습니다. Amazon Ion은 서식 있는 자기 기술형 오픈 소스 데이터 형식입니다. Amazon Ion 형식은 오픈 소스 SQL 쿼리 언어 [PartiQL](https://partiql.org/)에서 사용됩니다.

Amazon Ion은 상호 교환 가능한 이진 및 텍스트 형식을 갖습니다. 이 기능은 텍스트의 사용 편의성과 이진 인코딩의 효율성을 결합합니다.

Athena에서 Amazon Ion 데이터를 쿼리하려면 Amazon Ion 데이터를 직렬화 및 역직렬화하는 [Amazon Ion Hive SerDe](https://github.com/amzn/ion-hive-serde)를 사용할 수 있습니다. 역직렬화를 사용하면 Parquet 또는 ORC와 같은 다른 형식으로 기록하기 위해 Amazon Ion 데이터에 쿼리를 실행하거나 읽을 수 있습니다. 직렬화를 사용하면 `CREATE TABLE AS SELECT`(CTAS) 또는 기존 테이블에서 데이터를 복사하는 `INSERT INTO` 쿼리를 사용하여 Amazon Ion 형식으로 데이터를 생성할 수 있습니다.

**참고**  
Amazon Ion은 JSON의 상위 집합이므로 Amazon Ion Hive SerDe를 사용하여 Amazon Ion JSON이 아닌 데이터 집합을 쿼리할 수 있습니다. 다른 [JSON SerDe 라이브러리](https://docs.aws.amazon.com/athena/latest/ug/json-serde.html)와 달리 Amazon Ion SerDe는 각 데이터 행이 한 줄에 있을 것으로 예상하지 않습니다. 이 기능은 “예쁜 인쇄” 형식의 JSON 데이터 집합을 쿼리하려 하거나 줄 바꿈 문자로 필드를 행으로 분할하려는 경우에 유용합니다.

Athena에서 Amazon Ion을 쿼리하는 방법에 대한 추가 정보 및 예제는 [Analyze Amazon Ion datasets using Amazon Athena](https://aws.amazon.com/blogs/big-data/analyze-amazon-ion-datasets-using-amazon-athena/)를 참조하세요.

## 직렬화 라이브러리 이름
<a name="library-name"></a>

Amazon Ion SerDe의 직렬화 라이브러리 이름은 `com.amazon.ionhiveserde.IonHiveSerDe`입니다. 소스 코드 정보는 GitHub.com에서 [Amazon Ion Hive SerDe](https://github.com/amazon-ion/ion-hive-serde)를 참조하세요.

## 고려 사항 및 제한 사항
<a name="ion-serde-considerations-and-limitations"></a>
+ **중복된 필드** - Amazon Ion 구조체는 정렬되어 있고 중복된 필드를 지원하는 반면 Hive의 `STRUCT<>` 및 `MAP<>`은 그렇지 않습니다. 따라서 Amazon Ion 구조체에서 중복된 필드를 역직렬화하면 하나의 값이 비결정론적으로 선택되고 다른 값은 무시됩니다.
+ **외부 기호 테이블 지원되지 않음** - 현재 Athena는 외부 기호 테이블 또는 다음 Amazon Ion Hive SerDe 속성을 지원하지 않습니다.
  + `ion.catalog.class`
  + `ion.catalog.file`
  + `ion.catalog.url`
  + `ion.symbol_table_imports`
+ **파일 확장자** - Amazon Ion은 파일 확장자를 사용하여 Amazon Ion 파일을 역직렬화하는 데 사용할 압축 코덱을 결정합니다. 따라서 압축된 파일은 사용된 압축 알고리즘에 해당하는 파일 확장자를 가져야 합니다. 예를 들어 ZSTD를 사용하는 경우 해당 파일은 `.zst` 확장자를 가져야 합니다.
+ **동종 데이터** - Amazon Ion은 특정 필드의 값에 사용할 수 있는 데이터 형식에 제약을 두지 않습니다. 예를 들어 두 개의 서로 다른 Amazon Ion 문서에 서로 다른 데이터 형식을 갖는 이름이 같은 필드가 있을 수 있습니다. 그러나 Hive는 스키마를 사용하기 때문에 하나의 Hive 열에 추출한 모든 값은 동일한 데이터 형식을 가져야 합니다.
+ **맵 키 형식 제한** - 다른 형식의 데이터를 Amazon Ion으로 직렬화할 때 맵 키 형식이 `STRING`, `VARCHAR` 또는`CHAR` 중 하나인지 확인합니다. Hive를 사용하면 어떤 기본 데이터 형식이라도 맵 키로 사용할 수 있지만 [Amazon Ion 기호](https://amzn.github.io/ion-docs/docs/symbols.html)는 문자열 형식이어야 합니다.
+ **공용 구조체 형식** - Athena는 현재 Hive [Union 형식](https://cwiki.apache.org/confluence/display/hive/languagemanual+types/#LanguageManualTypes-UnionTypesunionUnionTypes)을 지원하지 않습니다.
+ **Double 데이터 유형** - Amazon Ion은 현재 `double` 데이터 유형을 지원하지 않습니다.

**Topics**
+ [직렬화 라이브러리 이름](#library-name)
+ [고려 사항 및 제한 사항](#ion-serde-considerations-and-limitations)
+ [Amazon Ion 테이블 생성](ion-serde-using-create-table.md)
+ [CTAS 및 INSERT INTO를 사용하여 Amazon Ion 테이블 생성](ion-serde-using-ctas-and-insert-into-to-create-ion-tables.md)
+ [Amazon Ion SerDe 속성 참조](ion-serde-using-ion-serde-properties.md)
+ [경로 추출기 사용](ion-serde-using-path-extractors.md)