

# 分類子の定義と管理
<a name="add-classifier"></a>

分類子はデータをデータストアに読み取ります。データの形式を認識すると、スキーマが生成されます。分類子も、形式の認識がどれほど確実かを示す確信度数を返します。

AWS Glue では一連の組み込み分類子が用意されていますが、カスタム分類子を作成することもできます。AWS Glue は、クローラ定義で指定した順序で、カスタム分類子を最初に呼び出します。カスタム分類子から返された結果に応じて、AWS Glue が組み込みの分類子を呼び出す場合もあります。処理中に分類子が `certainty=1.0` を返した場合、正しいスキーマを 100% 確実に作成できることを示しています。次に、AWS Glue はその分類子の出力を使用します。

分類子が `certainty=1.0` を返さない場合、AWS Glue は最も高い確実性を持つ分類子の出力を使用します。どの分類子からも `0.0` 以上の確実性が返されない場合、AWS Glue は `UNKNOWN` のデフォルト分類文字列を返します。

## 分類子を使用するタイミング
<a name="classifier-when-used"></a>

データストアをクロールして AWS Glue Data Catalog でメタデータテーブルを定義する際に分類子を使用します。順序付けられた一連の分類子を使用してクローラーをセットアップできます。クローラーが分類子を呼び出す際、分類子はデータが認識されるかどうかを判断します。分類子がデータを認識できない、または 100% 確実ではない場合、クローラーはリストにある次の分類子を呼び出して、データを認識できるかどうか判断します。

 AWS Glue コンソールを使用して分類子を作成する方法の詳細については、「[AWS Glue コンソールを使用した分類子の作成](console-classifiers.md)」を参照してください。

## カスタム分類子
<a name="classifier-defining"></a>

分類子の出力には、ファイルの分類や形式 (例えば、`json`)、およびファイルのスキーマを示す文字列が含まれます。カスタム分類子の場合は、分類子のタイプに基づいてスキーマを作成するためのロジックを定義します。分類子のタイプには、grok パターン、XML タグ、および JSON パスに基づくスキーマの定義が含まれています。

分類子の定義を変更すると、変更前の分類子を使用してクロールしたデータは再分類されません。クローラーは、以前にクロールしたデータを追跡します。新しいデータは、更新された分類子で分類されるため、スキーマが更新される場合があります。データのスキーマが更新された場合は、クローラーの実行時に分類子を更新してスキーマの変更を反映してください。データを再分類して不正な分類子を修正するには、更新された分類子を使用して新しいクローラーを作成します。

AWS Glue でカスタム分類子を作成する方法については、「[さまざまなデータ形式のカスタム分類子の記述](custom-classifier.md)」を参照してください。

**注記**  
組み込み分類子のいずれかでデータ形式が認識される場合、カスタム分類子を作成する必要はありません。

## 組み込み分類子
<a name="classifier-built-in"></a>

 AWS Glue は、JSON、CSV、ウェブログ、および多くのデータベースシステムを含む、さまざまな形式の組み込み分類子を提供します。

AWS Glue が入力データ形式に 100% 確実に適合するカスタム分類子を検出できない場合、次の表に示すような順番で組み込み分類子を呼び出します。組み込み分類子は、形式が一致するか (`certainty=1.0`)、または一致しないか (`certainty=0.0`) どうかを示す結果を返します。`certainty=1.0` を持つ最初の分類子は、Data Catalog での分類文字列とメタデータテーブルのスキーマを提供します。


| 分類子タイプ | 分類文字列 | メモ | 
| --- | --- | --- | 
| Apache Avro | avro | ファイルの先頭にあるスキーマを読み取って形式を判断します。 | 
| Apache ORC | orc | ファイルのメタデータを読み取って形式を判断します。 | 
| Apache Parquet | parquet | ファイルの末尾にあるスキーマを読み取って形式を判断します。 | 
| JSON | json | ファイルの先頭から読み取って形式を判断します。 | 
| バイナリ型 JSON | bson | ファイルの先頭から読み取って形式を判断します。 | 
| XML | xml | ファイルの先頭から読み取って形式を判断します。AWS Glue は、ドキュメントの XML タグに基づいてテーブルスキーマを判定します。 カスタム XML を作成してドキュメントの行を指定するには、「[XML カスタム分類子の書き込み](custom-classifier.md#custom-classifier-xml)」を参照してください。 | 
| Amazon Ion | ion | ファイルの先頭から読み取って形式を判断します。 | 
| Combined Apache ログ | combined\_apache | grok パターンを通じてログ形式を判断します。 | 
| Apache ログ | apache | grok パターンを通じてログ形式を判断します。 | 
| Linux カーネルログ | linux\_kernel | grok パターンを通じてログ形式を判断します。 | 
| Microsoft ログ | microsoft\_log | grok パターンを通じてログ形式を判断します。 | 
| Ruby ログ | ruby\_logger | ファイルの先頭から読み取って形式を判断します。 | 
| Squid 3.x ログ | squid | ファイルの先頭から読み取って形式を判断します。 | 
| Redis 監視ログ | redismonlog | ファイルの先頭から読み取って形式を判断します。 | 
| Redis ログ | redislog | ファイルの先頭から読み取って形式を判断します。 | 
| CSV | csv | カンマ (,)、パイプ (\|)、タブ (\\t)、セミコロン (;)、および Ctrl-A (\\u0001)の区切り記号をチェックします。Ctrl-A は Start Of Heading の Unicode 制御文字です。 | 
| Amazon Redshift | redshift | JDBC 接続を使用してメタデータをインポートします。 | 
| MySQL | mysql | JDBC 接続を使用してメタデータをインポートします。 | 
| PostgreSQL | postgresql | JDBC 接続を使用してメタデータをインポートします。 | 
| Oracle データベース | oracle | JDBC 接続を使用してメタデータをインポートします。 | 
| Microsoft SQL Server | sqlserver | JDBC 接続を使用してメタデータをインポートします。 | 
| Amazon DynamoDB | dynamodb | DynamoDB テーブルからデータを読み取ります。 | 

以下の圧縮形式のファイルが分類できます。
+ ZIP (単一ファイルのみを含むアーカイブに対応)。Zip は他のサービスでは十分にサポートされていないため注意してください (アーカイブのため)。
+ BZIP
+ GZIP
+ LZ4
+ Snappy (標準および Hadoop ネイティブの Snappy 形式の両方をサポート）

### 組み込み CSV 分類子
<a name="classifier-builtin-rules"></a>

組み込み CSV 分類子では、CSV ファイルの内容を解析して AWS Glue テーブルのスキーマを判断します。この分類子は以下の区切り記号を確認します。
+ カンマ (,)
+ パイプ (\|)
+ タブ (\\t)
+ セミコロン (;)
+ Ctrl-A (\\u0001)

  Ctrl-A は `Start Of Heading` の Unicode 制御文字です。

CSV として分類されるためには、テーブルのスキーマに少なくとも 2 つのデータ列と 2 つのデータ行が必要です。CSV 分類子では、いくつかのヒューリスティックを使用して特定のファイルにヘッダーがあるかどうかを判断します。分類子で最初のデータ行にヘッダーを確認できない場合は、列のヘッダーが `col1`、`col2`、`col3` のように表示されます。組み込み CSV 分類子では、以下のファイルの特性を評価することで、ヘッダーを推測するかどうかを決めます。
+ ヘッダー候補の各列が STRING データ型として解析されます。
+ 最後の列を除き、ヘッダー候補の各列に 150 文字未満のコンテンツがあります。末尾の区切り記号を許可するには、ファイル全体で最後の列を空欄にすることができます。
+ ヘッダー候補の各列が、列名に関する AWS Glue `regex` 要件を満たす必要があります。
+ ヘッダー行は、データ行と十分に異なっている必要があります。これを判断するには、1 つ以上の行が STRING 型以外として解析されることを確認します。すべての列が STRING 型である場合、最初のデータ行は以降の行と十分に異なっていないため、ヘッダーとして使用できません。

**注記**  
組み込み CSV 分類子で必要な AWS Glue テーブルが作成されない場合は、以下のいずれかの代替方法を使用できます。  
Data Catalog で列名を変更し、`SchemaChangePolicy` を LOG に設定して、今後のクローラー実行に備えてパーティションの出力設定を `InheritFromTable` に設定します。
データを分類するためのカスタム grok 分類子を作成し、必要な列を割り当てます。
組み込み CSV 分類子では、`LazySimpleSerDe` をシリアル化ライブラリとして参照するテーブルを作成します。これは、型の推定に適しています。ただし、CSV データ内に引用符で囲まれた文字列がある場合は、テーブル定義を編集して SerDe ライブラリを `OpenCSVSerDe` に変更します。推定した型を STRING に調整し、`SchemaChangePolicy` を LOG に設定して、将来のクローラ実行に関してパーティションの出力設定を `InheritFromTable` に設定します。SerDe ライブラリの詳細については、Amazon Athena ユーザーガイドの「[SerDe リファレンス](https://docs.aws.amazon.com/athena/latest/ug/serde-reference.html)」を参照してください。