翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クローラーは、どのようにパーティションを作成するタイミングを判断していますか?
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 つのファイルがあります。すべての長方形とファイルは線で接続されています。](images/crawlers-s3-folders.png)
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 など) で、同じか非常によく似たスキーマを持っているとします。クローラーは、パーティションキー year
、month
、および 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
table1
と table2
のファイルのスキーマが類似しており、クローラーにインクルードパス s3://bucket01/folder1/
で定義されているデータストアが 1 つの場合、クローラーは 2 つのパーティションキー列を持つ 1 つのテーブルを作成します。最初のパーティションキー列には table1
および table2
が含まれ、2 番目のパーティションキー列には、table1
パーティションに対して partition1
から partition3
まで、および table2
パーティションに対して partition4
と partition5
が含まれます。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 ナレッジセンターの記事