クローラのプロパティ - AWS Glue

クローラのプロパティ

AWS Glue コンソールまたは AWS Glue API を使用してクローラを定義するときは、以下の情報を指定します。

クローラ名とオプションの記述子および設定

設定には、タグ、セキュリティ設定、およびカスタム分類子が含まれます。クローラを定義する前にカスタム分類子を定義します。詳細については、以下を参照してください。

クローラソースのタイプ

クローラは、クロールのソースとして直接データストアにアクセスでき、また既存の Data Catalog のテーブルをソースとして使用することもできます。クローラが既存のカタログテーブルを使用する場合、それらのカタログのテーブルで指定されたデータストアをクロールします。詳細については、「クローラソースのタイプ」を参照してください。

S3 データソース用の新しいフォルダのみをクロールする

オンにすると、最後のクローラ実行以降に追加された Amazon S3 フォルダのみがクロールされます。詳細については、「AWS Glue での増分クロール」を参照してください。

クローラソース: データストアまたはカタログテーブル

次の中から選択します。

  • 1 つ以上のデータストア

    クローラは、さまざまなタイプ (Amazon S3、JDBC など) の複数のデータストアをクロールできます。

  • Data Catalog テーブルのリスト

    カタログテーブルは、クロールするデータストアを指定します。クローラは 1 回の実行でのカタログテーブルのみをクロールできます。他のソースタイプを混在させることはできません。

一度に設定できるデータストアは 1 つだけです。接続情報とインクルードパスと除外パターンを指定すると、別のデータストアを追加することもできます。

詳細については、「クローラソースのタイプ」を参照してください。

追加のクローラソースパラメータ

各ソースのタイプには、異なる追加パラメータのセットが必要です。次のリストはその一部です。

Connection

AWS Glue 接続を選択または追加します。接続の詳細については、「AWS Glue Data Catalog での接続の定義」を参照してください

データサンプリングを有効にする (Amazon DynamoDB、MongoDB、および Amazon DocumentDB データストアのみ)

データサンプルのみをクロールするかどうかを選択します。選択しない場合は、テーブル全体がクロールされます。テーブルが高スループットテーブルではない場合、すべてのレコードのスキャンには時間がかかることがあります。

スキャンレート (DynamoDB データストアのみ)

AWS Glue クローラで使用する設定済み読み取りキャパシティーユニットの割合を指定します。読み取りキャパシティーユニットは、DynamoDB で定義されている用語で、テーブルに対して実行できる読み取り回数/秒のレート制限として機能する数値です。0.1~1.5 の値を入力します。指定しない場合、プロビジョニングされたテーブルの場合は 0.5%、オンデマンドテーブルの場合は最大の設定済みキャパシティーの 1/4 にデフォルト設定されます。

サンプルサイズ (オプション) (Amazon S3 データストアのみ)

データセット内のサンプルファイルをクロールするときにクロールされる各リーフフォルダ内のファイル数を指定します。この機能をオンにすると、このデータセット内のすべてのファイルをクロールする代わりに、クローラはクロールする各リーフフォルダ内の一部のファイルをランダムに選択します。

サンプリングするクローラは、データ形式について事前に知識があり、フォルダ内のスキーマが変更されないことを知っているお客様に最適です。この機能をオンにすると、クローラの実行時間が大幅に短縮されます。

有効な値は、1 から 249 までの整数です。指定しない場合、すべてのファイルがクロールされます。

インクルードパス
Amazon S3 データストアの場合

自分のアカウントのパスを指定するか、別のアカウントのパスを指定するかを選択し、Amazon S3 パスを参照して選択します。

JDBC データストアの場合

データベース製品に応じて、<database>/<schema>/<table> または <database>/<table> と入力します。Oracle Database と MySQL は、パス内のスキーマをサポートしません。パーセント (%) 文字は、<schema> または <table> と置換できます。たとえば、システム識別子 (SID) が orcl の Oracle データベースの場合、orcl/% を入力して、接続で指定されたユーザーがアクセスできるすべてのテーブルをインポートします。

重要

このフィールドでは、大文字と小文字が区別されます。

MongoDB データストアまたは Amazon DocumentDB データストアの場合

database/collection と入力します。

詳細については、「包含パターンと除外パターン」を参照してください。

除外パターン

この機能を利用すると、特定のファイルまたはテーブルをクロールから除外できます。詳細については、「包含パターンと除外パターン」を参照してください。

IAM ロール

クローラはこのロールを取得します。これは、AWS 管理ポリシー AWSGlueServiceRole と同様のアクセス許可を持っている必要があります。Amazon S3 および DynamoDB ソースの場合、データストアへのアクセス許可も必要です。クローラが AWS Key Management Service (AWS KMS) で暗号化された Amazon S3 データを読み取る場合は、ロールには AWS KMS キーでの復号化のアクセス許可が必要です。

Amazon S3 データストアの場合、ロールにアタッチされた追加のアクセス許可は次のようになります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::bucket/object*" ] } ] }

Amazon DynamoDB データストアの場合、ロールにアタッチされた追加のアクセス許可は次のようになります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:Scan" ], "Resource": [ "arn:aws:dynamodb:region:account-id:table/table-name*" ] } ] }

詳細については、「ステップ 2: AWS Glue 用にIAM ロールを作成する」および「AWS Glue リソースへのアクセス許可の管理」を参照してください。

クローラスケジュール

クローラは、オンデマンドで実行することができ、クローラの自動実行のスケジュールを定義することもできます。詳細については、「AWS Glue クローラのスケジュール」を参照してください。

作成されたカタログテーブルの Data Catalog 内にあるターゲットデータベース

詳細については、「データカタログでのデータベースの定義」を参照してください。

出力の設定オプション

オプションには、検出されたスキーマの変更、データストア内の削除されたオブジェクトをクローラが処理する方法があります。詳細については、「クローラ設定オプションの設定」を参照してください。

再クロールポリシー

最初のクロールの完了後に Amazon S3 データソースをクロールする場合、データセット全体を再度クロールするか、最後のクローラ実行以降に追加されたフォルダのみをクロールするかを選択します。詳細については、「AWS Glue での増分クロール」を参照してください。

クローラソースのタイプ

クローラは、クロールのソースとして直接データストアにアクセスでき、また既存のカタログテーブルをソースとして使用することもできます。クローラが既存のカタログテーブルを使用する場合、それらのカタログのテーブルで指定されたデータストアをクロールします。

ソースとしてカタログテーブルを指定する一般的な理由は、(データストアの構造をすでに知っていたため) テーブルを手動で作成した場合に、新しいパーティションの追加を含め、クローラにテーブルを更新された状態に保持させるためです。他の理由の説明については、「クローラを使用して手動で作成された Data Catalog テーブルを更新する」を参照してください。

既存のテーブルをクローラソースのタイプとして指定する場合は、次の条件が適用されます。

  • データベース名はオプションです。

  • Amazon S3 または Amazon DynamoDB データストアを指定するカタログテーブルのみが使用できます。

  • クローラが実行されるとき、新しいカタログテーブルは作成されません。既存のテーブルは、新しいパーティションの追加を含め、必要に応じて更新されます。

  • データストアで見つかる削除されたオブジェクトは無視されます。カタログテーブルが削除されません。代わりに、クローラによりログメッセージが書き込まれます(SchemaChangePolicy.DeleteBehavior=LOG)

  • Amazon S3 パスごとに 1 つのスキーマを作成するクローラ設定オプションはデフォルトで有効になっており、無効にすることはできません。(TableGroupingPolicy=CombineCompatibleSchemas) 詳細については、「各 Amazon S3 インクルードパスの単一のスキーマを作成する方法」を参照してください。

  • カタログテーブルをソースとして他のソースタイプ (例: Amazon S3 または Amazon DynamoDB) と混在させることはできません。

包含パターンと除外パターン

クロールで何を含め、何を除外するかを評価する際、クローラは必要なインクルードパスを評価することから始めます。Amazon S3、MongoDB、Amazon DocumentDB (MongoDB 互換性)、リレーショナルデータストアの場合は、インクルードパスを指定する必要があります。

Amazon S3 データストアの場合、インクルードパスの構文は bucket-name/folder-name/file-name.ext です。バケット内のすべてのオブジェクトをクロールするには、インクルードパスにバケット名のみ指定します。除外パターンは、インクルードパスを基準とする相対パスです。

MongoDB と Amazon DocumentDB (MongoDB 互換性) の場合、構文は database/collection です。

JDBC データストアの場合、構文は database-name/schema-name/table-name または database-name/table-name です。構文は、データベースエンジンでデータベース内のスキーマがサポートされているかどうかに依存します。たとえば、MySQL や Oracle などのデータベースエンジンの場合は、インクルードパスに schema-name を指定しません。インクルードパスでスキーマやテーブルの代わりにパーセント記号 (%) を使用することで、データベース内のすべてのスキーマやテーブルを表すことができます。インクルードパスでデータベースの代わりにパーセント記号 (%) を使用することはできません。エクスクルードパスは、インクルードパスを基準とする相対パスです。たとえば、JDBC データストア内のテーブルを除外するには、エクスクルードパスにテーブル名を入力します。

クローラでは、JDBC データストアに接続するために、JDBC URI 接続文字列を含む AWS Glue 接続を使用します。クローラは、データベースエンジン内のオブジェクトにのみアクセスできます。そのために、AWS Glue 接続で JDBC ユーザー名とパスワードを使用します。クローラは、JDBC 接続を介してアクセスできるテーブルのみ作成できます。 クローラは、JDBC URI を使用してデータベースエンジンにアクセスした後で、インクルードパスを使用して Data Catalog で作成するデータベースエンジン内のテーブルを決定します。例えば、MySQL の場合、MyDatabase/% というインクルードパスを指定すると、MyDatabase 内のすべてのテーブルが Data Catalog で作成されます。Amazon Redshift にアクセスする場合、MyDatabase/% というインクルードパスを指定すると、データベース MyDatabase の各スキーマ内のすべてのテーブルが Data Catalog で作成されます。MyDatabase/MySchema/% のインクルードパスを指定すると、データベース MyDatabase のすべてのテーブルとスキーマ MySchema が作成されます。

インクルードパスの指定後に、1 つ以上の Unix 形式の glob 除外パターンを指定することで、インクルードパスに含まれる予定であったオブジェクトをクロールから除外できます。これらのパターンはインクルードパスに適用されて、どのオブジェクトを除外するか決定します。また、これらのパターンはクローラによって作成されるテーブルのプロパティとして保存されます。AWS GluePySpark 拡張機能 (create_dynamic_frame.from_catalog など) は、テーブルプロパティを読み取り、除外パターンによって定義されたオブジェクトを除外します。

AWS Glue は、除外パターンで次の種類の glob パターンをサポートしています。

除外パターン 説明
*.csv .csv で終わる現在のフォルダ内のオブジェクト名を表す Amazon S3 パスと一致する
*.* ドットを含むオブジェクト名すべてと一致する
*.{csv,avro} .csv.avro で終わるオブジェクト名と一致する
foo.? foo. で始まり、その後に 1 文字の拡張子が続くオブジェクト名と一致する
myfolder/* myfolder など、/myfolder/mysource のサブフォルダの 1 つのレベルにあるオブジェクトと一致する
myfolder/*/* myfolder など、/myfolder/mysource/data のサブフォルダの 2 つのレベルにあるオブジェクトと一致する
myfolder/** myfolder のすべてのサブフォルダにあるオブジェクト (/myfolder/mysource/mydata/myfolder/mysource/data など) と一致する
myfolder** myfoldermyfolder などの /myfolder 以下のファイルと同様に、サブフォルダ /myfolder/mydata.txt と一致する
Market* JDBC データベースの Market で始まる名前のテーブル (Market_usMarket_fr など) と一致する

AWS Glue は、glob 除外パターンを次のように解釈します。

  • スラッシュ (/) 文字は、Amazon S3 キーをフォルダ階層に区切る区切り記号です。

  • アスタリスク (*) 記号は、フォルダの境界を超えない、0 文字以上の名前の要素に相当します。

  • 二重アスタリスク (**) は、フォルダやスキーマの境界を越える 0 個以上の文字に相当します。

  • 疑問符 (?) 記号は、名前の要素のちょうど 1 文字に相当します。

  • バックスラッシュ (\) 文字は、本来ならば特殊文字として解釈される文字をエスケープ処理するために使用されます。\\ 式はバックスラッシュ 1 つに相当し、\{ は左括弧に相当します。

  • 角括弧 ([ ]) は、一連の文字の中から、名前の要素の 1 文字に相当する角括弧式を作成します。たとえば、[abc]ab、または c に一致します。ハイフン (-) は、範囲を指定するために使用されます。つまり、[a-z]a から z (この値を含みます) までに相当する範囲を指定します。これらのフォームは組み合わせることができます。そのため、[abce-g] は abcef、または g に一致します。角括弧 ([) の後の文字が感嘆符 (!) の場合、角括弧式は否定の意味になります。たとえば、[!a-c]ab、または c 以外のすべての文字に一致します。

    角括弧式内では、*?、および \ 文字は、文字通りの意味です。ハイフン (-) 文字は、角括弧内で最初の文字だった場合、または式を否定する ! の次の文字だった場合は、文字通りの意味です。

  • 中括弧 ({ }) は、グループ内のサブパターンが一致する場合にグループが一致するサブパターンのグループを囲みます。カンマ (,) 文字は、サブパターンを分割するために使用されます。グループはネストできません。

  • ファイル名の先頭のピリオドまたはドット文字は、マッチ操作では通常の文字として扱われます。たとえば、* 除外パターンは、ファイル名 .hidden に一致します。

例 Amazon S3 除外パターンの例

各除外パターンは、インクルードパスに対して評価されます。例えば、次の Amazon S3 ディレクトリ構造があるとします。

/mybucket/myfolder/ departments/ finance.json market-us.json market-emea.json market-ap.json employees/ hr.json john.csv jane.csv juan.txt

インクルードパスが s3://mybucket/myfolder/ の場合、以下は除外パターンのサンプル結果の一部です。

除外パターン 結果
departments/** departments フォルダ内のすべてのファイルとフォルダを除外し、employees フォルダとそのファイルを含めます。
departments/market* market-us.jsonmarket-emea.json、および market-ap.json を除外します
**.csv 名前が myfolder で終わる .csv 以下のすべてのオブジェクトを除外します
employees/*.csv .csv フォルダ内のすべての employees ファイルを除外します。

例 パーティションのサブセットの除外の例

データが日別に分割されていて、1 年の日別に異なる Amazon S3 パーティションに入っているとします。2015 年 1 月には、31 のパーティションがあります。ここで、1 月の第 1 週のみのデータをクロールするには、1 日〜7 日を除くすべてのパーティションを除外する必要があります。

2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**

この glob パターンの各パートを見てみます。最初のパートは 2015/01/{[!0],0[8-9]}** で、"0" で始まらないすべての日付、および 2015 年 01 月の 08 日目および 09 日目を除外しています。"**" を日数パターンのサフィックスとして使用すると、下位レベルフォルダへのフォルダ境界を越えることに注意してください。"*" を使用すると、下位レベルフォルダは除外されます。

2 番目のパートは 2015/0[2-9]/** で、2015 年 02 から 09 月までの日を除外します。

3 番目のパートは 2015/1[0-2]/** で、2015 年 10、11、12 月の日を除外します。

例 JDBC の除外パターン

次のスキーマ構造を使用して JDBC データベースをクロールしているとします。

MyDatabase/MySchema/ HR_us HR_fr Employees_Table Finance Market_US_Table Market_EMEA_Table Market_AP_Table

インクルードパスが MyDatabase/MySchema/% の場合、以下は除外パターンのサンプル結果の一部です。

除外パターン 結果
HR* HR で始まる名前を持つテーブルを除外
Market_* Market_ で始まる名前を持つテーブルを除外
**_Table _Table で終わる名前を持つテーブルをすべて除外