分類子はデータをデータストアに読み取ります。データの形式を認識すると、スキーマが生成されます。分類子も、形式の認識がどれほど確実かを示す確信度数を返します。
AWS Glue では一連の組み込み分類子が用意されていますが、カスタム分類子を作成することもできます。AWS Glue は、クローラ定義で指定した順序で、カスタム分類子を最初に呼び出します。カスタム分類子から返された結果に応じて、AWS Glue が組み込みの分類子を呼び出す場合もあります。処理中に分類子が certainty=1.0
を返した場合、正しいスキーマを 100% 確実に作成できることを示しています。次に、AWS Glue はその分類子の出力を使用します。
分類子が certainty=1.0
を返さない場合、AWS Glue は最も高い確実性を持つ分類子の出力を使用します。どの分類子からも 0.0
以上の確実性が返されない場合、AWS Glue は UNKNOWN
のデフォルト分類文字列を返します。
分類子を使用するタイミング
データストアをクロールして AWS Glue Data Catalog でメタデータテーブルを定義する際に分類子を使用します。順序付けられた一連の分類子を使用してクローラーをセットアップできます。クローラーが分類子を呼び出す際、分類子はデータが認識されるかどうかを判断します。分類子がデータを認識できない、または 100% 確実ではない場合、クローラーはリストにある次の分類子を呼び出して、データを認識できるかどうか判断します。
AWS Glue コンソールを使用して分類子を作成する方法の詳細については、「AWS Glue コンソールを使用した分類子の作成」を参照してください。
カスタム分類子
分類子の出力には、ファイルの分類や形式 (例えば、json
)、およびファイルのスキーマを示す文字列が含まれます。カスタム分類子の場合は、分類子のタイプに基づいてスキーマを作成するためのロジックを定義します。分類子のタイプには、grok パターン、XML タグ、および JSON パスに基づくスキーマの定義が含まれています。
分類子の定義を変更すると、変更前の分類子を使用してクロールしたデータは再分類されません。クローラーは、以前にクロールしたデータを追跡します。新しいデータは、更新された分類子で分類されるため、スキーマが更新される場合があります。データのスキーマが更新された場合は、クローラーの実行時に分類子を更新してスキーマの変更を反映してください。データを再分類して不正な分類子を修正するには、更新された分類子を使用して新しいクローラーを作成します。
AWS Glue でカスタム分類子を作成する方法については、「さまざまなデータ形式のカスタム分類子の記述」を参照してください。
注記
組み込み分類子のいずれかでデータ形式が認識される場合、カスタム分類子を作成する必要はありません。
組み込み分類子
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 カスタム分類子の書き込み」を参照してください。 |
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 分類子
組み込み 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 リファレンス」を参照してください。