AWS Glue
開発者ガイド

クローラに分類子を追加する

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

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

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

分類子を使用するタイミング

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

AWS Glue コンソールを使用して分類子を作成する方法の詳細については、「AWS Glue コンソールでの分類子の操作」を参照してください。

カスタム分類子

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

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

AWS Glue でカスタム分類子を作成する方法については、「カスタム分類子の書き込み」を参照してください。

注記

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

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 カスタム分類子の書き込み」を参照してください。

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 (1 つのファイルのみを含むアーカイブでサポートされています)。Zip は他のサービスで十分にサポートされていないことに注意してください (アーカイブのため)。

  • BZIP

  • GZIP

  • LZ4

  • Snappy (Hadoop ネイティブ Snappy 形式としてではなく、標準 Snappy 形式として)

組み込みの CSV 分類子

組み込みの CSV 分類子では、CSV ファイルの内容を解析して AWS Glue テーブルのスキーマを判断します。この分類子は以下の区切り記号を確認します。

  • カンマ (,)

  • パイプ (|)

  • タブ (\t)

  • セミコロン (;)

  • Ctrl-A (\u0001)

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

CSV として分類されるためには、テーブルのスキーマに少なくとも 2 つのデータ列と 2 つのデータ行が必要です。CSV 分類子では、いくつかのヒューリスティックを使用して特定のファイルにヘッダーがあるかどうかを判断します。分類子で最初のデータ行にヘッダーを確認できない場合は、列のヘッダーが col1col2col3 のように表示されます。組み込みの 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 リファレンス」を参照してください。