

# ステップ 2: データソースと分類子を選択する
<a name="define-crawler-choose-data-sources"></a>

次に、クローラーのデータソースと分類子を設定します。

サポートされるデータソースについては、「[クロールでサポートされているデータソース](crawler-data-stores.md)」を参照してください。

**データソースの設定**  
**[データは AWS Glue テーブルにマッピングされていますか]** で、適切なオプション (「未実施」または「はい」) を選択します。デフォルトでは、「未実施」が選択されています。  
クローラーは、クロールのソースとして直接データストアにアクセスでき、また既存のデータカタログのテーブルをソースとして使用することもできます。クローラーが既存のカタログテーブルを使用する場合、それらのカタログのテーブルで指定されたデータストアをクロールします。  
+ [Not yet] (未実施): クローリングする 1 つまたは複数のデータソースを選択します。クローラーは、さまざまなタイプ (Amazon S3、JDBC など) の複数のデータストアをクロールできます。

  一度に設定できるデータストアは 1 つだけです。接続情報とインクルードパスと除外パターンを指定すると、別のデータストアを追加することもできます。
+ [Yes] (はい): AWS Glue データカタログから既存のテーブルを選択します。カタログテーブルは、クロールするデータストアを指定します。クローラーは 1 回の実行でのカタログテーブルのみをクロールできます。他のソースタイプを混在させることはできません。

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

  既存のテーブルをクローラーソースのタイプとして指定する場合は、次の条件が適用されます。
  + データベース名はオプションです。
  + Amazon S3、Amazon DynamoDB、または Delta Lake データストアを指定するカタログテーブルのみが使用できます。
  + クローラーが実行されるとき、新しいカタログテーブルは作成されません。既存のテーブルは、新しいパーティションの追加を含め、必要に応じて更新されます。
  + データストアで見つかる削除されたオブジェクトは無視されます。カタログテーブルが削除されません。代わりに、クローラーによりログメッセージが書き込まれます(`SchemaChangePolicy.DeleteBehavior=LOG`)
  + Amazon S3 パスごとに単一のスキーマを作成するクローラー設定オプションはデフォルトで有効になっており、無効にすることはできません。(`TableGroupingPolicy`=`CombineCompatibleSchemas`) 詳しくは、「[各 Amazon S3 インクルードパスの単一のスキーマを作成する](crawler-grouping-policy.md)」を参照してください。
  + カタログテーブルをソースとして他のソースタイプ (例: Amazon S3 または Amazon DynamoDB) と混在させることはできません。
  
 Delta テーブルを使用するには、まず Athena DDL または AWS Glue API を使用して Delta テーブルを作成します。  
 Athena を使用して場所を Amazon S3 フォルダに設定し、テーブルタイプを「DELTA」に設定します。  

```
CREATE EXTERNAL TABLE database_name.table_name
LOCATION 's3://bucket/folder/'
TBLPROPERTIES ('table_type' = 'DELTA')
```
 AWS Glue API を使用してテーブルパラメータマップ内のテーブルタイプを指定します。テーブルパラメータには、次のキーおよび値のペアを含める必要があります。テーブルを作成する方法の詳細については、「[create\$1table の Boto3 ドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue/client/create_table.html)」を参照してください。  

```
{
    "table_type":"delta"
}
```

**データソース**  
クローラーでスキャンするデータソースのリストを選択または追加します。  
 (オプション) データソースとして JDBC を選択した場合、ドライバー情報が保存されている Connection アクセスを指定するときに、独自の JDBC ドライバーを使用できます。

**インクルードパス**  
 クロールで何を含め、何を除外するかを評価する際、クローラーは必要なインクルードパスを評価することから始めます。Amazon S3、MongoDB、MongoDB Atlas、Amazon DocumentDB (MongoDB 互換)、リレーショナルデータストアの場合は、インクルードパスを指定する必要があります。    
Amazon S3 データストアの場合  
このアカウントのパスを指定するか、別のアカウントのパスを指定するかを選択し、Amazon S3 パスを参照して選択します。  
Amazon S3 データストアの場合、インクルードパスの構文は `bucket-name/folder-name/file-name.ext` です。バケット内のすべてのオブジェクトをクロールするには、インクルードパスにバケット名のみ指定します。除外パターンは、インクルードパスを基準とする相対パスです。  
Delta Lake データストアの場合  
Delta テーブルへの Amazon S3 パスを s3://*bucket*/*prefix*/*object* として 1 つ以上指定します。  
Iceberg または Hudi データストアの場合  
Iceberg または Hudi テーブルのメタデータを持つフォルダを含む Amazon S3 パスを s3://*bucket*/*prefix* として 1 つ以上指定します。  
Iceberg および Hudi のデータストアの場合、Iceberg/Hudi フォルダはルートフォルダの子フォルダ内に存在する場合があります。クローラーは、Hudi フォルダのパス以下にあるすべてのフォルダをスキャンします。  
JDBC データストアの場合  
データベース製品に応じて、*<database>*/*<schema>*/*<table>* または *<database>*/*<table>* を入力します。Oracle Database と MySQL は、パス内のスキーマをサポートしません。*<schema>* または *<table>* は、パーセント (%) 文字に置き換えることができます。たとえば、システム識別子 (SID) が `orcl` の Oracle データベースの場合、`orcl/%` を入力して、接続で指定されたユーザーがアクセスできるすべてのテーブルをインポートします。  
このフィールドでは、大文字と小文字が区別されます。
 独自の JDBC ドライバーバージョンを導入する場合、AWS Glue クローラーは AWS Glue ジョブと Amazon S3 バケットのリソースを使用して、用意したドライバーが自分の環境で実行されるようにします。リソースの追加使用量はアカウントに反映されます。ドライバーは、「[AWS Glue 接続の追加](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)」に記載されているプロパティに限定されます。  
MongoDB、MongoDB Atlas、Amazon DocumentDB データストアの場合  
MongoDB、MongoDB Atlas、Amazon DocumentDB (MongoDB 互換) の場合、構文は `database/collection` です。
JDBC データストアの場合、構文は `database-name/schema-name/table-name` または `database-name/table-name` です。構文は、データベースエンジンでデータベース内のスキーマがサポートされているかどうかに依存します。たとえば、MySQL や Oracle などのデータベースエンジンの場合は、インクルードパスに `schema-name` を指定しません。インクルードパスでスキーマやテーブルの代わりにパーセント記号 (`%`) を使用することで、データベース内のすべてのスキーマやテーブルを表すことができます。インクルードパスでデータベースの代わりにパーセント記号 (`%`) を使用することはできません。

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

**除外パターン**  
この機能を利用すると、特定のファイルまたはテーブルをクロールから除外できます。エクスクルードパスは、インクルードパスを基準とする相対パスです。たとえば、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` パターンをサポートしています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/define-crawler-choose-data-sources.html)
AWS Glue は、`glob` 除外パターンを次のように解釈します。  
+ スラッシュ (`/`) 文字は、Amazon S3 キーをフォルダ階層に区切る区切り記号です。
+ アスタリスク (`*`) 記号は、フォルダの境界を超えない、0 文字以上の名前の要素と一致します。
+ 二重アスタリスク (`**`) は、フォルダやスキーマの境界を越える 0 個以上の文字に相当します。
+ 疑問符 (`?`) 記号は、名前の要素のちょうど 1 文字に相当します。
+ バックスラッシュ (`\`) 文字は、本来ならば特殊文字として解釈される文字をエスケープ処理するために使用されます。`\\` 式はバックスラッシュ 1 つに相当し、`\{` は左括弧に相当します。
+ 角括弧 (`[ ]`) は、一連の文字の中から、名前の要素の 1 文字に相当する角括弧式を作成します。たとえば、`[abc]` は `a`、`b`、または `c` に一致します。ハイフン (`-`) は、範囲を指定するために使用されます。つまり、`[a-z]` は `a` から `z` (この値を含みます) までに相当する範囲を指定します。これらのフォームは組み合わせることができます。そのため、[`abce-g`] は `a`、`b`、`c`、`e`、`f`、または `g` に一致します。角括弧 (`[`) の後の文字が感嘆符 (`!`) の場合、角括弧式は否定の意味になります。たとえば、`[!a-c]` は `a`、`b`、または `c` 以外のすべての文字に一致します。

  角括弧式内では、`*`、`?`、および `\` 文字は、文字通りの意味です。ハイフン (`-`) 文字は、角括弧内で最初の文字だった場合、または式を否定する `!` の次の文字だった場合は、文字通りの意味です。
+ 中括弧 (`{ }`) は、グループ内のサブパターンが一致する場合にグループが一致するサブパターンのグループを囲みます。カンマ (`,`) 文字は、サブパターンを分割するために使用されます。グループはネストできません。
+ ファイル名の先頭のピリオドまたはドット文字は、マッチ操作では通常の文字として扱われます。たとえば、`*` 除外パターンは、ファイル名 `.hidden` に一致します。

**Example 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/` の場合、以下は除外パターンのサンプル結果の一部です。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/define-crawler-choose-data-sources.html)

**Example 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 日目を除外しています。"\$1\$1" を日数パターンのサフィックスとして使用すると、下位レベルフォルダへのフォルダ境界を越えることに注意してください。"\$1" を使用すると、下位レベルフォルダは除外されます。  
2 番目のパートは ` 2015/0[2-9]/**` で、2015 年 02 から 09 月までの日を除外します。  
3 番目のパートは `2015/1[0-2]/**` で、2015 年 10、11、12 月の日を除外します。

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

```
MyDatabase/MySchema/
   HR_us
   HR_fr
   Employees_Table
   Finance
   Market_US_Table
   Market_EMEA_Table
   Market_AP_Table
```
インクルードパスが `MyDatabase/MySchema/%` の場合、以下は除外パターンのサンプル結果の一部です。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/define-crawler-choose-data-sources.html)

**追加のクローラーソースパラメータ**  
各ソースのタイプには、異なる追加パラメータのセットが必要です。

**接続**  
AWS Glue 接続を選択または追加します。接続の詳細については、「[データへの接続](glue-connections.md)」を参照してください

**追加メタデータ - オプション (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、Delta、Iceberg、Hudi、Catalog のターゲットデータストア用)**  
必要に応じて、この Amazon S3 ターゲットで使用するネットワーク接続を含めます。各クローラーは 1 つのネットワーク接続に制限されているため、他の Amazon S3 ターゲットも同じ接続を使用します (空欄の場合は接続なし)。  
接続の詳細については、「[データへの接続](glue-connections.md)」を参照してください

**ファイルのサブセットのみのサンプリングとサンプルサイズ (Amazon S3 データストア用のみ)**  
データセット内のサンプルファイルをクロールするときにクロールされる各リーフフォルダ内のファイル数を指定します。この機能をオンにすると、このデータセット内のすべてのファイルをクロールする代わりに、クローラーはクロールする各リーフフォルダ内の一部のファイルをランダムに選択します。  
サンプリングするクローラーは、データ形式について事前に知識があり、フォルダ内のスキーマが変更されないことを知っているお客様に最適です。この機能をオンにすると、クローラーの実行時間が大幅に短縮されます。  
有効な値は、1 から 249 までの整数です。指定しない場合、すべてのファイルがクロールされます。

**以降のクローラー実行**  
このフィールドは、すべての Amazon S3 データソースに影響するグローバルフィールドです。  
+ [Crawl all sub-folders] (すべてのサブフォルダをクローリング): 以降クローリングするたびに、すべてのフォルダを再度クローリングします。
+ [Crawl new sub-folders only] (新しいサブフォルダのみをクローリング): 最近のクローリング以降に追加された Amazon S3 フォルダのみをクローリングします スキーマに互換性がある場合、新しいパーティションが既存のテーブルに追加されます。詳細については、「[新しいパーティションを追加するための増分クロールのスケジューリング](incremental-crawls.md)」を参照してください。
+ [Crawl based on events] (イベントに基づいてクローリング): Amazon S3 イベントを利用して、クローリングするフォルダを制御します。詳細については、「[Amazon S3 イベント通知を使用した加速クロール](crawler-s3-event-notifications.md)」を参照してください。

**カスタム分類子 - オプション**  
クローラーを定義する前にカスタム分類子を定義します。分類子は、指定されたファイルがクローラーで処理可能な形式であるかどうかをチェックします。処理可能な場合、分類子は、そのデータ形式と一致する `StructType` オブジェクトの形式でスキーマを作成します。  
詳細については、「[分類子の定義と管理](add-classifier.md)」を参照してください。