

# 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 Hive SerDe](https://github.com/amzn/ion-hive-serde) を使用できます。これにより、Amazon Ion データがシリアル化および逆シリアル化されます。逆シリアル化では、Amazon Ion データをクエリしたり、データを読み取って Parquet や ORC など別の形式に書き出したりできます。シリアル化では、`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 ではデータの各行が 1 行にあるとは想定していません。この機能は、「プリティ印刷」形式の 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 構造体から重複フィールドを逆シリアル化すると、ある 1 つの値が非決定的に選択され、それ以外の値は無視されます。
+ **外部シンボルテーブルはサポート対象外** – 現時点で、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 では、特定のフィールドの値に使用できるデータ型に制限がありません。例えば、2 つの異なる Amazon Ion ドキュメントに同じ名前のフィールドがある場合、それぞれのフィールドに異なるデータ型を使用できます。ただし、Hive はスキーマを使用するため、1 つの Hive 列に抽出する値はすべて同じデータ型にする必要があります。
+ **マップキーのタイプの制限** – 別の形式のデータを Amazon Ion にシリアル化する場合は、マップキーのタイプを `STRING`、`VARCHAR`、`CHAR` のいずれかにします。Hive では任意のプリミティブデータ型をマップキーとして使用できますが、[Amazon Ion のシンボル](https://amzn.github.io/ion-docs/docs/symbols.html)は文字列型にする必要があります。
+ **共用体型** – Athena は、現時点では Hive [共用体型](https://cwiki.apache.org/confluence/display/hive/languagemanual+types/#LanguageManualTypes-UnionTypesunionUnionTypes)をサポートしていません。
+ **倍精度浮動小数点データ型** — 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)