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

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

クローラーのプロパティ

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

ステップ 1: クローラープロパティを設定する

名前

名前に使用できるのは、文字 (A~Z)、数字 (0~9)、ハイフン (-)、またはアンダースコア (_) で、長さは 255 文字までです。

説明

説明の長さは、最大 2048 文字です。

タグ

タグを使用して、リソースの整理と識別を行います。詳細については、次を参照してください:

ステップ 2: データソースと分類子を選択する

データソースの設定

[Is your data already mapped to AWS Glue tables?] で、適切なオプションを選択します。

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

  • [Not yet] (未実施): クローリングする 1 つまたは複数のデータソースを選択します。クローラーは、さまざまなタイプ (Amazon S3、JDBC など) の複数のデータストアをクロールできます。

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

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

  • [Yes] (はい): AWS Glue データカタログから既存のテーブルを選択します。カタログテーブルは、クロールするデータストアを指定します。クローラーは 1 回の実行でのカタログテーブルのみをクロールできます。他のソースタイプを混在させることはできません。

データソース

クローラーでスキャンするデータソースのリストを選択または追加します。

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

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

Delta Lake データストアの場合

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

Iceberg または Hudi データストアの場合

Iceberg または Hudi テーブルのメタデータを持つフォルダを含む Amazon S3 パスを s3://bucket/prefix として 1 つ以上指定します。

Hudi データストアの場合、Hudi フォルダはルートフォルダの子フォルダ内に存在する場合があります。クローラーは、Hudi フォルダのパス以下にあるすべてのフォルダをスキャンします。

JDBC データストアの場合

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

重要

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

MongoDB、MongoDB Atlas、Amazon DocumentDB データストアの場合

database/collection と入力します。

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

最大トラバーサル深度 (Iceberg または Hudi データストアのみ)

クローラーが Amazon S3 パス内の Iceberg または Hudi メタデータフォルダを検出するために通過できる Amazon S3 パスの最大深度を定義します。このパラメータの目的は、クローラーの実行時間を制限することです。デフォルト値は 10 で、最大値は 20 です。

除外パターン

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

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

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

Connection

AWS Glue 接続を選択または追加します。接続の詳細については、「データへの接続」を参照してください

追加メタデータ - オプション (JDBC データストア用)

クローラーがクローリングするための追加のメタデータプロパティを選択します。

  • [Comments] (コメント): 関連するテーブルレベルと列レベルのコメントをクローリングします。

  • [Raw types] (未加工型): 表の列の未加工のデータ型を追加のメタデータに保持します。デフォルトの動作として、クローラーは未処理のデータ型を Hive 互換の型に変換します。

JDBC ドライバークラス名 - オプション (JDBC データストア用)

クローラーがデータソースに接続するためのカスタム JDBC ドライバークラス名を入力します。

  • Postgres: org.postgresql.Driver

  • MySQL: com.mysql.jdbc.Driver、com.mysql.cj.jdbc.Driver

  • Redshift: com.amazon.redshift.jdbc.Driver、com.amazon.redshift.jdbc42.Driver

  • Oracle: oracle.jdbc.driver.OracleDriver

  • SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver

JDBC ドライバー S3 パス - オプション (JDBC データストア用)

.jar ファイルへの既存の Amazon S3 パスを選択します。クローラーがデータソースに接続するためのカスタム JDBC ドライバーを使用するときに、この場所に .jar ファイルが保存されます。

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

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

クエリ用のテーブルを作成する (Delta Lake データストア用のみ)

Delta Lake テーブルの作成方法を次の中から選択します。

  • [Create Native tables] (ネイティブテーブルの作成): Delta トランザクションログの直接クエリをサポートするクエリエンジンとの統合を可能にします。

  • [Create Symlink tables] (Symlink テーブルの作成): 指定された設定パラメータに基づいて、マニフェストファイルを分割キーで分割して Symlink マニフェストを作成します。

スキャンレート - オプション (DynamoDB データストア用のみ)

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

注記

DynamoDB データストアの場合、テーブルの読み取りと書き込みを処理するプロビジョニング容量モードを設定します。AWS Glue クローラーは、オンデマンド容量モードでは使用しないでください。

ネットワーク接続 - オプション (Amazon S3 データストア用のみ)

必要に応じて、この Amazon S3 ターゲットで使用するネットワーク接続を含めます。各クローラーは 1 つのネットワーク接続に制限されているため、他の Amazon S3 ターゲットも同じ接続を使用します (空欄の場合は接続なし)。

接続の詳細については、「データへの接続」を参照してください

ファイルのサブセットのみのサンプリングとサンプルサイズ (Amazon S3 データストア用のみ)

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

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

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

以降のクローラー実行

このフィールドは、すべての Amazon S3 データソースに影響するグローバルフィールドです。

  • [Crawl all sub-folders] (すべてのサブフォルダをクローリング): 以降クローリングするたびに、すべてのフォルダを再度クローリングします。

  • [Crawl new sub-folders only] (新しいサブフォルダのみをクローリング): 最近のクローリング以降に追加された Amazon S3 フォルダのみをクローリングします。スキーマに互換性がある場合、新しいパーティションが既存のテーブルに追加されます。詳細については、「AWS Glue に新しいパーティションを追加するための増分クロール」を参照してください。

  • [Crawl based on events] (イベントに基づいてクローリング): Amazon S3 イベントを利用して、クローリングするフォルダを制御します。詳細については、「Amazon S3 イベント通知を使用した加速クロール」を参照してください。

カスタム分類子 - オプション

クローラーを定義する前にカスタム分類子を定義します。分類子は、指定されたファイルがクローラーで処理可能な形式であるかどうかをチェックします。処理可能な場合、分類子は、そのデータ形式と一致する StructType オブジェクトの形式でスキーマを作成します。

詳細については、「AWS Glue でのクローラーへの分類子の追加」を参照してください。

ステップ 3: セキュリティ設定を構成する

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 のアイデンティティとアクセスの管理を参照してください。

Lake Formation 設定 - オプション

クローラーが Lake Formation の認証情報をデータソースのクローリングに使用できるようにします。

[Use Lake Formation credentials for crawling S3 data source] (S3 データソースのクローリングに Lake Formation 認証情報を使用する) をオンにすると、クローラーは Lake Formation 認証情報を使用してデータソースをクローリングできるようになります。データソースが別のアカウントに属する場合は、登録されているアカウント ID を指定する必要があります。そうしないと、クローラーはアカウントに関連付けられているデータソースのみをクローリングします。Amazon S3 とデータカタログのデータソースにのみ適用されます。

セキュリティ設定 - オプション

設定にはセキュリティ設定が含まれます。詳細については、次を参照してください:

注記

クローラーにセキュリティ設定を設定すると、変更できますが、削除することはできません。クローラーのセキュリティレベルを下げるには、設定内でセキュリティ機能を明示的に DISABLED に設定するか、新しいクローラーを作成します。

ステップ 4: 出力とスケジュールを設定する

出力設定

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

クローラースケジュール

AWS Glue では、オンデマンドでクローラーを実行することも、クローラーとジョブの時間ベースのスケジュールを定義することもできます。これらのスケジュールの定義は、Unix と同様の cron 構文を使用します。詳細については、「AWS Glue クローラのスケジュール」を参照してください。

ステップ 5: 確認して作成する

設定したクローラー設定を確認して、クローラーを作成します。

クローラーソースのタイプ

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

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

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

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

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

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

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

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

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

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

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

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

MongoDB、MongoDB Atlas、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 を使用してデータベースエンジンにアクセスした後で、インクルードパスを使用してデータカタログで作成するデータベースエンジン内のテーブルを決定します。例えば、MySQL の場合、MyDatabase/% というインクルードパスを指定すると、MyDatabase 内のすべてのテーブルがデータカタログで作成されます。Amazon Redshift にアクセスする場合、MyDatabase/% というインクルードパスを指定すると、データベース MyDatabase の各スキーマ内のすべてのテーブルがデータカタログで作成されます。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/mysource など、myfolder のサブフォルダの 1 つのレベルにあるオブジェクトと一致する
myfolder/*/* /myfolder/mysource/data など、myfolder のサブフォルダの 2 つのレベルにあるオブジェクトと一致する
myfolder/** myfolder のすべてのサブフォルダにあるオブジェクト (/myfolder/mysource/mydata/myfolder/mysource/data など) と一致する
myfolder** /myfolder/myfolder/mydata.txt などの myfolder 以下のファイルと同様に、サブフォルダ myfolder と一致する
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 名前が .csv で終わる myfolder 以下のすべてのオブジェクトを除外します
employees/*.csv employees フォルダ内のすべての .csv ファイルを除外します。
例 Amazon S3 パーティションのサブセットの除外の例

データが日別に分割されていて、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 で終わる名前を持つテーブルをすべて除外