翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クローラー設定オプションの設定
クローラーを実行すると、データストアの変更が検出される場合があります。これらの変更に伴って、以前のクローラーとは異なるスキーマやパーティションが生じることがあります。AWS Management Console または AWS Glue API を使用して、特定のタイプの変更をクローラーで処理する方法を設定できます。
トピック
パーティションインデックスクローラー設定オプションの設定
データカタログは、特定のパーティションを効率的に検索できるようにパーティションインデックスをサポートしています。詳細については、「AWS Glue でのパーティションインデックスの使用」を参照してください。AWS Glue クローラーは、Amazon S3 ターゲットと Delta Lake ターゲットのパーティションインデックスをデフォルトにより作成します。
クローラを定義すると、パーティションインデックスを自動的に作成するオプションは、出力とスケジューリングの設定ページの高度なオプションでデフォルトで有効になります。
このオプションを無効にするには、コンソールでパーティションインデックスを自動的に作成するのチェックボックスをオフにします。クローラー API を使用してこのオプションを無効にし、 CreatePartitionIndex
で を設定することもできますConfiguration
。デフォルト値は True です。
パーティションインデックスの使用に関する注意事項
クローラーによって作成されたテーブルには、デフォルトでは
partition_filtering.enabled
変数がありません。詳細については、「AWS Glue パーティションインデックスとフィルタリング」を参照してください。暗号化されたパーティションのパーティションインデックスの作成はサポートされていません。
既存のスキーマをクローラーで変更しないための方法
Amazon S3 テーブル定義の既存のフィールドに対する更新をクローラーで上書きしない場合は、コンソールでオプションとして [Add new columns only] (新しい列の追加のみ) を選択するか、設定オプションとして MergeNewColumns
を設定します。これはテーブルとパーティションに適用されます (Partitions.AddOrUpdateBehavior
を InheritFromTable
で上書きしていない場合)。
クローラーの実行時にテーブルスキーマを一切変更しない場合は、スキーマ変更ポリシーを 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 ファイルが検索されます。
-
ファイル 1 –
S3://bucket/table1/year=2017/data1.json
-
ファイルのコンテンツ –
{“A”: 1, “B”: 2}
-
スキーマ –
A:int, B:int
-
ファイル 2 –
S3://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:int
と partitionKey
year:string
があります。
テーブルの場所とパーティションレベルの指定方法
デフォルトでは、Amazon S3 に保存されたデータのテーブルをクローラーが定義するときに、クローラーはスキーマを結合してトップレベルのテーブル (year=2019
) を作成しようとします。場合によっては、フォルダ month=Jan
のテーブルをクローラーが作成することを期待することがありますが、兄弟フォルダ (month=Mar
) が同じテーブルにマージされているので、代わりにクローラーはパーティションを作成します。
テーブルレベルのクローラーオプションを使用すると、クローラーにテーブルの配置場所やパーティションの作成方法を柔軟に指定できます。テーブルレベル を指定すると、その絶対レベルにAmazon S3 バケットからテーブルが作成されます。
コンソールでクローラーを設定するとき、テーブルレベル クローラーオプションの値を指定できます。値は、テーブルの場所 (データセット内の絶対レベル) を示す正の整数である必要があります。最上位レベルのフォルダのレベルは 1 です。例えば、mydataset/year/month/day/hour
というパスで、レベルが 3 に設定されている場合、テーブルは mydataset/year/month
という場所に作成されます。
クローラーが作成できるテーブルの最大数を指定する方法
オプションで、クローラーが作成できるテーブルの最大数を指定する場合は、AWS Glue コンソールまたは CLI 経由で TableThreshold
を指定します。クローリング中にクローラーによって検出されたテーブルがこの入力値より多い場合、クローリングが失敗し、データカタログにデータが書き込まれません。
このパラメータは、クローラーによって検出および作成されるテーブルが予想よりもはるかに多い場合に役立ちます。これには、以下のような複数の理由が考えられます。
AWS Glue ジョブを使用して Amazon S3 ロケーションに入力する場合、フォルダと同じレベルに空のファイルができる可能性があります。このような場合、この Amazon S3 ロケーションでクローラーを実行すると、ファイルとフォルダが同じレベルに存在するため、クローラーは複数のテーブルを作成します。
"TableGroupingPolicy": "CombineCompatibleSchemas"
を設定しない場合、予想よりも多くのテーブルが作成される可能性があります。
TableThreshold
を 1 以上の整数値として指定します。この値はクローラーごとに設定されます。つまり、クローリングごとに、この値が考慮されます。例えば、あるクローラーでは TableThreshold
値を 5 に設定したとします。各クローリングで、AWS Glue は検出されたテーブルの数をこのテーブルのしきい値 (5) と比較します。検出されたテーブルの数が 5 未満の場合、AWS Glue はデータカタログにテーブルを書き込み、そうでない場合、データカタログに書き込むことなくクローリングが失敗します。
コンソール
AWS コンソールを使用して TableThreshold
を設定する場合は、次の画面で行います。
CLI
AWS CLI を使用して TableThreshold
を設定する場合は、次のようになります。
"{"Version":1.0, "CrawlerOutput": {"Tables":{"AddOrUpdateBehavior":"MergeNewColumns", "TableThreshold":5}}}";
エラーメッセージはログに記録され、テーブルパスを特定してデータをクリーンアップするのに役立ちます。テーブル数が指定したテーブルしきい値を超えているためにクローラーが失敗した場合は、次のようなログの例がアカウントで確認できます。
Table Threshold value = 28, Tables detected - 29
では CloudWatch、INFO メッセージとして検出されたすべてのテーブルの場所をログに記録します。失敗の理由としてエラーがログに記録されます。
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog. com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
Delta Lake データストアの設定オプションを指定する方法
Delta Lake データストアのクローラーを設定する場合は、次の設定パラメータを指定します。
- Connection
-
任意で、この Amazon S3 ターゲットで使用するネットワーク接続を選択または追加します。接続の詳細については、「データへの接続」を参照してください
- クエリ用テーブルの作成
-
Delta Lake テーブルの作成方法を次の中から選択します。
[Create Native tables] (ネイティブテーブルの作成): Delta トランザクションログの直接クエリをサポートするクエリエンジンとの統合を可能にします。
[Create Symlink tables] (Symlink テーブルの作成): 指定された設定パラメータに基づいて、マニフェストファイルを分割キーで分割して Symlink マニフェストを作成します。
- マニフェストの書き込みを有効にします (Delta Lake ソースで [Create Symlink tables] (Symlink テーブルの作成) を選択している場合のみ設定可能)。
-
Delta Lake のトランザクションログでテーブルメタデータまたはスキーマの変更を検出するかどうかを選択します。マニフェストファイルを再生成します。Delta Lake
SET TBLPROPERTIES
で自動マニフェスト更新を構成している場合は、このオプションを選択しないでください。 - Delta Lake のテーブルパスを含める
-
Delta テーブルへの Amazon S3 パスを s3://
bucket
/prefix
/object
として 1 つ以上指定します。
Lake Formation の認証情報を使用するようにクローラーを設定する方法
AWS Lake Formation 認証情報を使用するようにクローラーを設定すると、同じ AWS アカウント または別の AWS アカウント 内の基盤となる Amazon S3 ロケーションで Amazon S3 データストアまたはデータカタログテーブルにアクセスできます。クローラーとデータカタログテーブルが同じアカウントに存在する場合は、既存のデータカタログテーブルをクローラーのターゲットとして設定できます。現在、データカタログテーブルをクローラーのターゲットとして使用する場合、単一のカタログテーブルを含む単一のカタログターゲットのみが許可されています。
注記
データカタログテーブルをクローラーターゲットとして定義する場合、データカタログテーブルの基盤となるロケーションが Amazon S3 ロケーションであることを確認してください。Lake Formation の認証情報を使用するクローラーは、基盤となる Amazon S3 ロケーションを備えたデータカタログターゲットのみをサポートしています。
クローラーと登録された Amazon S3 ロケーションまたはデータカタログテーブルが同じアカウントに存在する場合は、セットアップが必要になります (アカウント内クローリング)
クローラーが Lake Formation の認証情報を使用してデータストアまたはデータカタログテーブルにアクセスできるようにするには、データロケーションを Lake Formation で登録する必要があります。また、クローラーの IAM ロールには、Amazon S3 バケットが登録されている送信先からデータを読み込む許可が付与されている必要があります。
AWS Management Console または AWS Command Line Interface (AWS CLI) を使用して、次の設定手順を完了できます。
クローラーと登録された Amazon S3 ロケーションが異なるアカウントに存在する場合は、セットアップが必要になります (クロスアカウントクローリング)
クローラーが Lake Formation の認証情報を使用して別のアカウントのデータストアにアクセスできるようにするには、まず Amazon S3 のデータロケーションを Lake Formation で登録する必要があります。次に、以下の手順を実行して、クローラーのアカウントにデータロケーション許可を付与します。
AWS Management Console または AWS CLI を使用して、次のステップを実行できます。
注記
Lake Formation 認証情報を使用するクローラーは、Amazon S3 およびデータカタログターゲットでのみサポートされます。
Lake Formation 認証情報供給を使用するターゲットの場合、基盤となる Amazon S3 ロケーションは同じバケットに属している必要があります。例えば、すべてのターゲットロケーションが同じバケット (bucket1) にある限り、ユーザーは複数のターゲット (s3://bucket1/folder1、s3://bucket1/folder2) を使用できます。別のバケット (s3://bucket1/folder1、s3://bucket2/folder2) を指定することはできません。
現在、データカタログのターゲットクローラーでは、単一のカタログテーブルを含む単一のカタログターゲットのみが許可されています。