AWS Glue クローラーが複数のテーブルを作成するのを防ぐにはどうすればよいですか?

最終更新日: 2021 年 7 月 30 日

AWS Glue クローラーがソースデータから複数のテーブルを作成するのはなぜですか? また、これを防ぐにはどうすればよいですか?

簡単な説明

ソースデータファイルが以下について同じものを使用していない場合、AWS Glue クローラーは複数のテーブルを作成します。

  • 形式 (CSV、Parquet、JSON など)
  • 圧縮タイプ (SNAPPY、gzip、bzip2 など)
  • スキーマ
  • Amazon Simple Storage Service (Amazon S3) パーティションの構造

解決方法

クローラーのログを確認する

クローラーのログを確認して、クローラーが複数のテーブルを作成する原因となっているファイルを特定します。

1.    AWS Glue コンソールを開きます。

2.    ナビゲーションペインで、[Crawlers] を選択します。

3.    クローラーを選択してから [Logs] (ログ) リンクを選択して、Amazon CloudWatch コンソールでログを表示します。

4.    前回のクローラーの実行中に AWS Glue が複数のテーブルを作成した場合、ログには次のようなエントリが含まれます。

[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_24cab769_750d_4ef0_9663_0cc6228ac858_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_3518b196_caf5_481f_ba4f_3e968cbbdd67_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_6d2fffc2_a893_4531_89fa_72c6224bb2d6_c000_snappy_parquet in
 database glue

ログエントリには、クローラーが複数のテーブルを作成する原因となっているファイルの名前が含まれます。

複数のテーブルの作成を防ぐ

複数のテーブルが作成されないようにするには、次のソリューションオプションの 1 つ以上を検討してください。

  • すべてのデータファイルが同じスキーマ、形式、および圧縮タイプを使用していることを確認します。いくつかのファイルが異なるスキーマを使用している場合 (例えば、スキーマ A ではフィールド X が INT 型で、スキーマ B ではフィールド X が BOOL 型)、次のいずれかの操作を実行できます。
    • AWS Glue の抽出、変換、ロード (ETL) ジョブを実行し、 from_options 関数を使用して外れ値データを読み取ります。次に、外れ値データ型をソース内の正しいデータ型または最も一般的なデータ型に変換します。
    • Amazon Athena で既存のテーブル DDL を使用してテーブルを手動で作成します。その後、AWS Glue クローラーを実行して、テーブルからスキーマを継承するためにクローラー設定を使用してテーブルメタデータを更新します。
  • データのいくつかの入力ファイルで異なるスキーマがあり、他のファイルに類似するスキーマがある場合は、クローラーを作成するときに、互換性のあるスキーマを組み合わせることができます。[Configure the crawler's output] (クローラーの出力を設定) のページの [Grouping behavior for S3 data (optional)] (S3 データのグループ化動作 (オプション)) で、[Create a single schema for each S3 path] (S3 パスごとに単一のスキーマを作成する) を選択します。この設定が有効で、データに互換性がある場合、クローラーは、指定されたインクルードパス内の Amazon S3 オブジェクトを評価するときに、特定のスキーマの類似性を無視します。詳細については、Amazon S3 インクルードパスごとに単一のスキーマを作成する方法をご参照ください。
  • 入力ファイルで Amazon S3 の構造/パスが異なっている場合、クローラーは複数のテーブルを作成します。例えば、クローラーが次のようなパーティション構造で S3 パス s3://doc-example-bucket/doc-example-key/doc-example-table をクロールするとします。
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-20/doc-example-file1.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-21/dox-example-file2.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-22/doc-example-file3.csv
    s3://doc-example-bucket/doc-example-key/doc-example-table/dox-example-file4.csv
    s3:// doc-example-bucket/doc-example-key/doc-example-table/doc-example-file5.csv
    そして、パーティション構造に一貫性がないため、クローラーは複数のテーブルを作成します。
    この問題を回避するには、以下の操作を行います。
    • 手動またはプログラムでスキーマの一貫性を保ちます。この例では、パーティション dt=xxx-xxx-xx なしで S3 ファイルを削除するか、ファイル doc-example-file4.csv および doc-example-file5.csv のパーティションを追加することができます。
    • 除外パターンを使用して、不要なファイルやフォルダをスキップします。
  • CSV データを使用する場合は、一貫性してヘッダーを使用していることを確認してください。ヘッダーがあるファイルと、ヘッダーがないファイルがある場合、クローラーは複数のテーブルを作成します。

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?