クローラの定義 - AWS Glue

クローラの定義

クローラを使用して、AWS Glue データカタログ にテーブルを入力することができます。これは、AWS Glue ユーザーが最もよく使用する基本的な方法です。クローラは 1 回の実行で複数のデータストアをクロールできます。完了すると、クローラは Data Catalog で 1 つ以上のテーブルを作成または更新します。AWS Glue で定義した抽出、変換、およびロード (ETL) ジョブは、これらの Data Catalog テーブルをソースおよびターゲットとして使用します。ETL ジョブは、ソースおよびターゲットの Data Catalog テーブルで指定されているデータストアに対して読み書きを行います。

AWS Glue コンソールを使用してクローラを追加する方法の詳細については、「AWS Glue コンソールでのクローラの使用」を参照してください。

クロール可能なデータストア

クローラは、ファイルベース、および テーブルベースのデータストアの両方をクロールできます。

クローラは、それぞれのネイティブインターフェイスを使用して、以下のデータストアをクロールできます。

  • Amazon Simple Storage Service (Amazon S3)

  • Amazon DynamoDB

クローラは、JDBC 接続を使用して次のデータストアをクロールできます。

  • Amazon Redshift

  • Amazon Relational Database Service (Amazon RDS)

    • Amazon Aurora

    • Microsoft SQL Server

    • MySQL

    • Oracle

    • PostgreSQL

  • パブリックにアクセス可能なデータベース

    • Aurora

    • Microsoft SQL Server

    • MySQL

    • Oracle

    • PostgreSQL

注記

現在、AWS Glue ではデータストリームのクローラがサポートされていません。

Amazon S3 と Amazon DynamoDB では、クローラは、AWS Identity and Access Management (IAM) ロールをアクセス許可のために使用して、データストアにアクセスします。クローラに渡すロールは、クロールされる Amazon S3 パスと Amazon DynamoDB テーブルにアクセスするためのアクセス権限を持っている必要があります。JDBC 接続の場合、クローラはユーザー名とパスワードの認証情報を使用します。詳細については、「AWS Glue Data Catalog での接続の定義」を参照してください。

Amazon S3 データストアを定義してクロールする場合、自分のアカウントのパスをクロールするか、または別のアカウントのパスをクロールするかを選択できます。クローラの出力は、AWS Glue データカタログ で定義された 1 つ以上のメタデータテーブルです。テーブルは、データストアにある 1 つ以上のファイルに対して作成されます。フォルダにあるすべての Amazon S3 ファイルが同じスキーマを持つ場合、クローラは 1 つのテーブルを作成します。また、Amazon S3 オブジェクトが分割されている場合、メタデータテーブルは 1 つしか作成されません。

クロールするデータストアがリレーショナルデータベースの場合、出力も AWS Glue データカタログ で定義されたメタデータテーブルのセットになります。リレーショナルデータベースをクロールする場合、データベースエンジンのオブジェクトを読み取るには、接続の許可認証情報を指定する必要があります。データベースエンジンのタイプに応じて、どのオブジェクト (データベース、スキーマ、テーブルなど) をクロールするかを選択できます。

クロールされるデータストアが 1 つ以上の Amazon DynamoDB テーブルである場合、出力は AWS Glue データカタログ 内の 1 つ以上のメタデータテーブルです。AWS Glue コンソールを使用してクローラを定義するとき、DynamoDB テーブルを指定します。AWS Glue API を使用している場合、テーブルのリストを指定します。

クローラを実行するとどうなるか

クローラを実行すると、クローラは以下のアクションを使用してデータストアを調査します。

  • raw データの形式、スキーマ、および関連プロパティを確認するためにデータを分類する – カスタム分類子を作成して分類の結果を設定できます。

  • データをテーブルまたはパーティションにグループ化する – データはクローラのヒューリスティックに基づいてグループ化されます。

  • メタデータを Data Catalog に書き込む – クローラでテーブルやパーティションを追加、更新、削除する方法を設定できます。

クローラで作成するメタデータテーブルは、クローラの定義時にデータベースに含まれます。クローラがデータベースを定義しない場合、テーブルはデフォルトのデータベースに配置されます。さらに、各テーブルには、最初にデータストアの認識に成功した分類子により入力された分類子の列があります。

クロールするファイルが圧縮されている場合、クローラはダウンロードして処理する必要があります。クローラを実行すると、ファイルを調査して形式と圧縮タイプを決定し、これらのプロパティを Data Catalog に書き込みます。一部のファイル形式 (Apache Parquet など) では、ファイルの書き込み時にファイルのパートを圧縮できます。これらのファイルでは、圧縮されたデータはファイルの内部コンポーネントであり、AWS Glue はテーブルを Data Catalog 内に書き込むときに compressionType プロパティを事前設定しません。一方、ファイル全体を圧縮アルゴリズム (gzip など) で圧縮する場合は、テーブルを Data Catalog 内に書き込むときに compressionType プロパティが事前設定されます。

クローラは、作成するテーブルの名前を生成します。AWS Glue データカタログ に保存されるテーブルの名前は、以下のルールに従います。

  • 英数字とアンダースコア (_) のみを使用できます。

  • カスタムプレフィックスは 64 文字より長くすることはできません。

  • 名前の最大長は 128 文字より長くすることはできません。クローラは、生成した名前が制限内に収まるように切り詰めます。

  • 重複するテーブル名が発生した場合、クローラは名前にハッシュ文字列のサフィックスを追加します。

クローラが複数回実行される場合 (おそらくスケジュールに基づいて)、データストア内の新規または変更されたファイルやテーブルが検索されます。クローラの出力には、前回の実行以降に検索された、新しいテーブルとパーティションが含まれています。

クローラは、どのようにパーティションを作成するタイミングを判断していますか?

AWS Glue クローラは、Amazon S3 バケットをスキャンしてバケット内に複数のフォルダを検出すると、フォルダ構造のテーブルのルートおよび、どのフォルダがテーブルのパーティションであるかを確認します。テーブルの名前は Amazon S3 プレフィックスまたはフォルダ名に基づいています。クロールするフォルダレベルを指すインクルードパスはユーザーが指定します。フォルダレベルの大半のスキーマが類似している場合、クローラは 2 つのテーブルを別個に作成せずに、テーブルのパーティションを作成します。クローラで別個のテーブルを作成するには、クローラを定義するときに各テーブルのルートフォルダを別個のデータストアとして追加します。

次の Amazon S3 構造の例を示します。

s3://bucket01/folder1/table1/partition1/file.txt s3://bucket01/folder1/table1/partition2/file.txt s3://bucket01/folder1/table1/partition3/file.txt s3://bucket01/folder1/table2/partition4/file.txt s3://bucket01/folder1/table2/partition5/file.txt

table1table2 のスキーマが類似しており、クローラに定義されているデータストアが 1 つで、インクルードパスs3://bucket01/folder1/ である場合、クローラは 2 つのパーティション列を持つ 1 つのテーブルを作成します。1 つのパーティション列には table1table2 が入り、別のパーティション列には partition1partition5 が入ります。2 つの個別のテーブルを作成するには、2 つのデータストアを持つクローラを定義します。この例では、最初のインクルードパスs3://bucket01/folder1/table1/ として定義し、2 番目を s3://bucket01/folder1/table2 として定義します。

注記

Amazon Athena の場合、各テーブルは Amazon S3 プレフィックス (すべてのオブジェクトを含む) に対応します。オブジェクト別にスキーマが異なる場合、Athena では同じプレフィックス内の異なるオブジェクトを別個のテーブルとして認識しません。これは、クローラで同じ Amazon S3 プレフィックスから複数のテーブルを作成する場合に発生することがあります。その結果、Athena のクエリでゼロが返される場合があります。Athena でテーブルを適切に認識してクエリを実行するには、Amazon S3 フォルダ構造内の異なるテーブルスキーマごとに別個のインクルードパスを持つクローラを作成します。詳細については、「AWS Glue で Athena を使用する際のベストプラクティス」 およびこの AWS ナリッジセンターの記事を参照してください。