クローラ設定オプションの設定 - AWS Glue

クローラ設定オプションの設定

クローラを実行すると、データストアの変更が検出される場合があります。これらの変更に伴って、以前のクローラとは異なるスキーマやパーティションが生じることがあります。AWS Management Console または AWS Glue API を使用して、特定のタイプの変更をクローラで処理する方法を設定できます。

AWS Glue コンソールでのクローラ設定オプションの設定

AWS Glue コンソールを使用してクローラを定義する場合、クローラの動作を設定するためのオプションをいくつか使用できます。AWS Glue コンソールを使用してクローラを追加する方法の詳細については、「AWS Glue コンソールでのクローラの使用」を参照してください。

以前にクロールしたデータストアに対してクローラを実行すると、データストアでのスキーマの変更やオブジェクトの削除が検出される場合があります。クローラは、スキーマの変更をログに記録します。クローラのソースタイプに応じて、スキーマの変更ポリシーにかかわらず、新しいテーブルとパーティションが作成される可能性があります。

クローラがスキーマの変更を検出したときの動作を指定するには、コンソールで以下のいずれかのアクションを選択できます。

  • Data Catalog でテーブル定義を更新する – AWS Glue Data Catalog で、新しい列を追加し、欠落している列を削除して、既存の列の定義を変更します。クローラで設定されていないすべてのメタデータを削除します。これはデフォルトの設定です。

  • 新しい列の追加のみ – Amazon S3 データストアにマッピングされるテーブルの場合、検出した新しい列は追加されますが、既存の列のタイプは Data Catalog で削除または変更されません。Data Catalog の現在の列が正しく、クローラで既存の列のタイプを削除または変更しない場合は、このオプションを選択します。Amazon S3 の基本的なテーブル属性 (分類、圧縮タイプ、CSV 区切り記号など) が変わった場合は、テーブルを廃止としてマークします。Data Catalog に存在する入力形式と出力形式そのままにします。SerDe パラメータは、クローラで設定されたものである場合に限り、更新します。他のすべてのデータストアについては、既存の列定義を変更します。

  • 変更を無視し、Data Catalog のテーブルを更新しない – 新しいテーブルとパーティションのみが作成されます。

    これは、増分クロールのデフォルト設定です。

新規のパーティションや変更されたパーティションがクローラで検出される場合もあります。デフォルトでは、変更が行われると、新しいパーティションが追加され、既存のパーティションは更新されます。さらに、 コンソールですべての新規および既存のパーティションを更新してテーブルのメタデータを反映するAWS Glueようにクローラの設定オプションを設定できます。このオプションを設定すると、パーティションは、分類、入力形式、出力形式、SerDe 情報、スキーマなどのメタデータプロパティを親テーブルから継承します。テーブルでの上記プロパティに対する変更は、そのパーティションに伝播されます。この設定オプションを既存のクローラに設定すると、既存のパーティションは、次回クローラが実行されるときに親テーブルのプロパティと一致するよう更新されます。

データストアで削除されたオブジェクトを検出したときのクローラの動作を指定するには、以下のいずれかのアクションを選択します。

  • Data Catalog からテーブルとパーティションを削除する

  • 変更を無視し、Data Catalog のテーブルを更新しない

    これは、増分クロールのデフォルト設定です。

  • Data Catalog でテーブルを廃止としてマークする – これがデフォルトの設定です。

API を使用したクローラ設定オプションの設定

AWS Glue API を使用してクローラを定義する場合は、いくつかのフィールドから選択してクローラを設定できます。クローラ API の SchemaChangePolicy は、変更されたスキーマや削除されたオブジェクトを検出したときのクローラの動作を決定します。クローラは、実行時にスキーマの変更をログに記録します。

クローラを実行すると、スキーマの変更ポリシーにかかわらず、常に新しいテーブルとパーティションが作成されます。変更されたテーブルスキーマを検出したときのクローラの動作を決定するには、SchemaChangePolicy 構造の UpdateBehavior フィールドで以下のいずれかのアクションを選択できます。

  • UPDATE_IN_DATABASE – のテーブルを更新します。AWS Glue Data Catalog新しい列を追加し、欠落している列を削除して、既存の列の定義を変更します。クローラで設定されていないすべてのメタデータを削除します。

  • LOG – 変更を無視し、Data Catalog でテーブルを更新しない。

    これは、増分クロールのデフォルト設定です。

クローラ API の Configuration フィールドに指定されている JSON オブジェクトを使用して SchemaChangePolicy 構造を上書きすることもできます。この JSON オブジェクトに含まれているキーと値のペアを使用して、既存の列を更新しないで新規の列のみを追加するようにポリシーを設定できます。たとえば、次の JSON オブジェクトを文字列として指定します。

{ "Version": 1.0, "CrawlerOutput": { "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } }

このオプションは、 コンソールの [Add new columns onlyAWS Glue] (新しい列のみを追加) オプションに対応します。これにより、Amazon S3 データストアをクロールした結果のテーブルの SchemaChangePolicy 構造のみが上書きされます。Data Catalog (信頼できる情報源) にあるがままにメタデータを維持する場合は、このオプションを選択します。新しい列が検出されると追加されます。これには、ネストされたデータ型も含まれます。ただし、既存の列は削除されず、そのタイプは変更されません。Amazon S3 のテーブル属性が大幅に変わる場合は、テーブルを廃止としてマークし、互換性のない属性を解決する必要があるという警告をログに記録します。

クローラが、以前にクロールしたデータストアに対して実行される場合、新規または変更されたパーティションが検出される場合があります。デフォルトでは、変更が行われると、新しいパーティションが追加され、既存のパーティションは更新されます。さらに、クローラの設定オプションを InheritFromTable に設定できます。このオプションは、 コンソールの [Update all new and existing partitions with metadata from the tableAWS Glue] (すべての新規および既存のパーティションを更新してテーブルのメタデータを反映する) オプションに対応します。このオプションを設定すると、親テーブルのメタデータプロパティ (分類、入力形式、出力形式、SerDe 情報、スキーマなど) がパーティションに継承されます。親テーブルでのすべてのプロパティの変更は、そのパーティションに伝播されます。

この設定オプションを既存のクローラに設定すると、既存のパーティションは、次回クローラが実行されるときに親テーブルのプロパティと一致するよう更新されます。この動作は、クローラ API の Configuration フィールドで設定します。たとえば、次の JSON オブジェクトを文字列として指定します。

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }

クローラ API の Configuration フィールドでは、複数の設定オプションを設定できます。たとえば、パーティションとテーブルの両方のクローラ出力を設定するには、次の JSON オブジェクトの文字列表現を指定できます。

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } } }

データストアで削除されたオブジェクトを検出したときのクローラの動作を決定するには、以下のいずれかのアクションを選択できます。クローラ API の SchemaChangePolicy 構造の DeleteBehavior フィールドでは、削除されたオブジェクトを検出したときのクローラの動作を設定します。

  • DELETE_FROM_DATABASE – Data Catalog からテーブルとパーティションを削除します。

  • LOG – 変更を無視します。Data Catalog を更新しません。代わりにログメッセージを書き込みます。

  • DEPRECATE_IN_DATABASE –​ Data Catalog でテーブルを廃止としてマークします。これはデフォルトの設定です。

既存のスキーマをクローラで変更しないための方法

Amazon S3 テーブル定義の既存のフィールドに対する更新をクローラで上書きしない場合は、コンソールでオプションとして [Add new columns only] (新しい列の追加のみ) を選択するか、設定オプションとして MergeNewColumns を設定します。これはテーブルとパーティションに適用されます (Partitions.AddOrUpdateBehaviorInheritFromTable で上書きしていない場合)。

クローラの実行時にテーブルスキーマを一切変更しない場合は、スキーマ変更ポリシーを LOG に設定します。設定オプションにより、テーブルから継承するようにパーティションスキーマを設定することもできます。

コンソールでクローラを設定する場合は、以下のアクションを選択できます。

  • 変更を無視し、Data Catalog のテーブルを更新しない

  • すべての新規および既存のパーティションを更新してテーブルのメタデータを反映する

API を使用してクローラを設定する場合は、以下のパラメータを設定します。

  • SchemaChangePolicy 構造の UpdateBehavior フィールドを LOG に設定します。

  • クローラ API で次の JSON オブジェクトの文字列表現を使用して Configuration フィールドを設定します。

    { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }

各 Amazon S3 インクルードパスの単一のスキーマを作成する方法

デフォルトでは、Amazon S3 に保存されたデータのテーブルをクローラが定義するときに、データの互換性とスキーマの類似性の両方が考慮されます。考慮されるデータ互換性要因には、データが同じ形式 (JSON など) かどうか、同じ圧縮タイプ (GZIP など) かどうか、Amazon S3 パスの構造、他のデータ属性などです。スキーマの類似性は、別個の Amazon S3 オブジェクトのスキーマがどれくらい似ているかの尺度です。

可能な場合は、CombineCompatibleSchemas へのクローラを共通テーブル定義に設定できます。このオプションを使用しても、クローラはデータ互換性を考慮に入れますが、指定されたインクルードパスで Amazon S3 オブジェクトを評価するときに特定のスキーマの類似性を無視します。

コンソールでクローラを設定する場合、スキーマを組み合わせるには、クローラオプション [Create a single schema for each S3 path (各 S3 パスの単一のスキーマを作成する)] を選択します。

API を使用してクローラを設定する場合は、以下の設定オプションを設定します。

  • クローラ API で次の JSON オブジェクトの文字列表現を使用して Configuration フィールドを設定します。

    { "Version": 1.0, "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" } }

このオプションを説明するため、インクルードパス s3://bucket/table1/ を使用してクローラを定義するとします。クローラが実行されると、次の特性を持つ 2 つの JSON ファイルが検索されます。

  • ファイル 1S3://bucket/table1/year=2017/data1.json

  • ファイルのコンテンツ{“A”: 1, “B”: 2}

  • スキーマA:int, B:int

  • ファイル 2S3://bucket/table1/year=2018/data2.json

  • ファイルのコンテンツ{“C”: 3, “D”: 4}

  • スキーマC: int, D: int

デフォルトでは、スキーマの類似性が十分ではないため、クローラは year_2017 および year_2018 という 2 つのテーブルを作成します。ただし、オプション [Create a single schema for each S3 path (各 S3 パスの単一のスキーマを作成する)] を選択し、データに互換性がある場合、クローラは 1 つのテーブルを作成します。テーブルにはスキーマ A:int,B:int,C:int,D:intpartitionKey year:string があります。

テーブルの場所とパーティションレベルの指定方法

デフォルトでは、Amazon S3 に保存されたデータのテーブルをクローラが定義するときに、クローラはスキーマを結合してトップレベルのテーブル (year=2019) を作成しようとします。場合によっては、フォルダ month=Jan のテーブルをクローラが作成することを期待することがありますが、兄弟フォルダ (month=Mar) が同じテーブルにマージされているので、代わりにクローラはパーティションを作成します。

テーブルレベルのクローラオプションを使用すると、クローラにテーブルの配置場所やパーティションの作成方法を柔軟に指定できます。テーブルレベル を指定すると、その絶対レベルにAmazon S3 バケットからテーブルが作成されます。


        テーブルレベルがレベル 2 に指定されている場合のクローラのグループ化

コンソールでクローラを設定するとき、テーブルレベル クローラオプションの値を指定できます。値は、テーブルの場所 (データセット内の絶対レベル) を示す正の整数である必要があります。最上位レベルのフォルダのレベルは 1 です。例えば、mydataset/a/b というパスで、レベルが 3 に設定されている場合、テーブルは mydataset/a/b という場所に作成されます。

Console

              クローラ設定でのテーブルレベルの指定。
API

API を使用してクローラ設定をすると、次の JSON オブジェクトの文字列表現をする Configuration フィールドを設定します。例:

configuration = jsonencode( { "Version": 1.0, "Grouping" = { TableLevelConfiguration = 2 } })
CloudFormation

この例では、CloudFormation テンプレート内のコンソールで使用できるテーブルレベルオプションを設定します。

"Configuration": "{ \"Version\":1.0, \"Grouping\":{\"TableLevelConfiguration\":2} }"

Delta Lake データストアの設定オプションを指定する方法

Delta Lake データストアのクローラを設定する場合は、次の設定パラメータを指定します。

Connection

任意で、この Amazon S3 ターゲットで使用するネットワーク接続を選択または追加します。接続の詳細については、「AWS Glue Data Catalog での接続の定義」を参照してください

書き込みマニフェストを有効にする

Delta Lake のトランザクションログでテーブルメタデータまたはスキーマの変更を検出するかどうかを選択します。マニフェストファイルを再生成します。Delta Lake SET TBLPROPERTIES で自動マニフェスト更新を構成している場合は、このオプションを選択しないでください。

Delta Lake のテーブルパスを含める

Delta テーブルへの Amazon S3 パスを s3://bucket/prefix/object として 1 つ以上指定します。


              Delta Lake データストアのクロールを指定する。