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

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

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

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

例えば、次の Amazon S3 フォルダ構造を考えてみます。

長方形が複数のレベルにあり、Amazon S3 のフォルダ階層が表されています。一番上の長方形には「Sales」というラベルが付いています。その下の長方形は、「year=2019」とラベル付けされています その下の 2 つの長方形には、「month=Jan」、「month=Feb」というラベルが付けられています。これらの長方形の下には、それぞれ 2 つの長方形があり、それぞれ「day=1」、「day=2」というラベルが付けられています。4 つの「day」(最下部) の長方形の下にはすべて、2 つまたは 4 つのファイルがあります。すべての長方形とファイルは線で接続されています。

4 つの最下位レベルのフォルダへのパスは次のとおりです。

S3://sales/year=2019/month=Jan/day=1 S3://sales/year=2019/month=Jan/day=2 S3://sales/year=2019/month=Feb/day=1 S3://sales/year=2019/month=Feb/day=2

クローラーターゲットが Sales に設定されており、day=n フォルダ内のすべてのファイルが同じ形式 (暗号化されていない JSON など) で、同じか非常によく似たスキーマを持っているとします。クローラーは、パーティションキー yearmonth、および day で、4 つのパーティションを持つ単一のテーブルを作成します。

次の例では、次の 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 のファイルのスキーマが類似しており、クローラーにインクルードパス s3://bucket01/folder1/ で定義されているデータストアが 1 つの場合、クローラーは 2 つのパーティションキー列を持つ 1 つのテーブルを作成します。最初のパーティションキー列には table1 および table2 が含まれ、2 番目のパーティションキー列には、table1 パーティションに対して partition1 から partition3 まで、および table2 パーティションに対して partition4partition5 が含まれます。2 つの個別のテーブルを作成するには、2 つのデータストアを持つクローラーを定義します。この例では、最初のインクルードパスs3://bucket01/folder1/table1/ として定義し、2 番目を s3://bucket01/folder1/table2 として定義します。

注記

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