クローラーの動作のカスタマイズ - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

クローラーの動作のカスタマイズ

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

Console

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

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

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

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

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

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

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

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

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

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

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

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

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

AWS CLI
aws glue create-crawler \ --name "your-crawler-name" \ --role "your-iam-role-arn" \ --database-name "your-database-name" \ --targets 'S3Targets=[{Path="s3://your-bucket-name/path-to-data"}]' \ --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": {"AddOrUpdateBehavior": "InheritFromTable"}, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
API

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

クローラー設定オプションを示すサンプル Python コード

import boto3 import json # Initialize a boto3 client for AWS Glue glue_client = boto3.client('glue', region_name='us-east-1') # Replace 'us-east-1' with your desired AWS region # Define the crawler configuration crawler_configuration = { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } } configuration_json = json.dumps(crawler_configuration) # Create the crawler with the specified configuration response = glue_client.create_crawler( Name='your-crawler-name', # Replace with your desired crawler name Role='crawler-test-role', # Replace with the ARN of your IAM role for Glue DatabaseName='default', # Replace with your target Glue database name Targets={ 'S3Targets': [ { 'Path': "s3://your-bucket-name/path/", # Replace with your S3 path to the data }, ], # Include other target types like 'JdbcTargets' if needed }, Configuration=configuration_json, # Include other parameters like Schedule, Classifiers, TablePrefix, SchemaChangePolicy, etc., as needed ) print(response)a

クローラーを実行すると、スキーマの変更ポリシーにかかわらず、常に新しいテーブルとパーティションが作成されます。変更されたテーブルスキーマを検出したときのクローラーの動作を決定するには、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 でテーブルを廃止としてマークします。これはデフォルトの設定です。