翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クローラーは、どのようにパーティションを作成するタイミングを判断していますか?
AWS Glue クローラーは、Amazon S3 をスキャンしてバケット内に複数のフォルダを検出すると、フォルダ構造のテーブルのルート、およびどのフォルダがテーブルのパーティションであるかを確認します。テーブルの名前は Amazon S3 プレフィックスまたはフォルダ名に基づいています。クロールするフォルダレベルを指すインクルードパスはユーザーが指定します。フォルダレベルの大半のスキーマが類似している場合、クローラーはテーブルを別個に作成せずに、テーブルのパーティションを作成します。クローラーで別個のテーブルを作成するには、クローラーを定義するときに各テーブルのルートフォルダを別個のデータストアとして追加します。
例えば、次の Amazon S3 フォルダ構造を考えてみます。
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 ナレッジセンターの記事