AWS Glue クローラーを実行すると、クローラーは似たようなスキーマの複数のテーブルを作成します。クローラーがどのようにスキーマを検出するのか知りたいです。
解決策
AWS Glue クローラーを実行すると、クローラーは次の手順を実行します。
- データを分類する。
- データをテーブルまたはパーティションにグループ化する。
- AWS Glue データカタログにメタデータを書き込む。
クローラーが何をして、どのようにスキーマを検出するのかを理解するには、次の情報を確認してください。
クローラーを定義する
AWS Glue クローラーを定義する場合、データの形式を評価してスキーマを推測するカスタム分類子を 1 つ以上選択します。クローラーが実行されると、クローラーはリスト内の最初の分類子を使用してデータストアを正常に認識し、テーブルのスキーマを作成します。クローラーを定義する前に、カスタム分類子を定義する必要があります。クローラーが実行されると、クローラーは定義したカスタム分類子を使用してデータストアで一致するものを見つけます。各分類子との一致により、確実性が算出されます。処理中に分類子が certainty=1.0 を返した場合、クローラーは分類子が正しいスキーマを作成できることを 100% 確信していることになります。この場合、クローラーは他の分類子を呼び出さず、カスタム分類子と一致する分類子を使用してテーブルを作成します。
詳細については、「分類子の定義と管理」を参照してください。
クローラーでのスキーマ検出
クローラーの初回実行時に、クローラーはスキーマを推測するために各ファイルの最初の 1000 レコードまたは最初の 1 メガバイトを読み取ります。読み取られるデータ量は、ファイル形式と有効なレコードの有無によって異なります。例えば、入力ファイルが JSON ファイルの場合、クローラーはファイルの最初の 1 MB を読み取ってスキーマを推測します。クローラーがファイルの最初の 1 MB 内の有効なレコードを読み取ると、クローラーはスキーマを推測します。クローラーが 1 MB の後にスキーマを推測できない場合、クローラーは 1 MB 単位で最大 10 MB までファイルの読み込みを続行します。CSV ファイルの場合、クローラーは最初の 1000 レコードまたは最初の 1 MB のデータのいずれか早い方を読み取ります。Parquet ファイルでは、クローラーはファイルから直接スキーマを推測します。クローラーは、すべてのサブフォルダとファイルから推測されたスキーマを比較し、1 つ以上のテーブルを作成します。クローラーがテーブルを作成する際、クローラーは次の要素を考慮します。
- データの互換性: データの形式、圧縮タイプ、含まれているパスが同じかどうかを確認します。
- スキーマの類似性: パーティションのしきい値および異なるスキーマの数に関して、スキーマがどの程度類似しているかを確認します。
クローラーが類似のスキーマと見なすには、次の条件が満たされている必要があります。
- パーティションのしきい値が 0.7 (70%) を超えている。
- 異なるスキーマ (このコンテキストでは「クラスター」とも呼ばれます) の最大数が 5 を超えていない。
クローラーはフォルダレベルでスキーマを推測し、すべてのフォルダのスキーマを比較します。比較したスキーマが 70% を超えるパーティションのしきい値と一致する場合、スキーマはテーブルのパーティションとして扱われます。一致しない場合、クローラーはフォルダごとにテーブルを作成し、結果としてテーブルの数が増えます。
シナリオの例
例 1
次の例では、DOC-EXAMPLE-FOLDER1 フォルダには 10 個のファイルがあり、このうち 8 個のファイルのスキーマは SCH_A、2 個のファイルのスキーマは SCH_B です。
ファイルが次の例のようになっているとします。
SCH_A
{ "id": 1, "first_name": "John", "last_name": "Doe"}{ "id": 2, "first_name": "Li", "last_name": "Juan"}
SCH_B
{"city":"Dublin","country":"Ireland"}{"city":
`"Paris","country":"France"}`When the crawler crawls the Amazon Simple Storage Service (Amazon S3) path **s3://DOC-EXAMPLE-FOLDER1**, the crawler creates one table. The table comprises columns of both schema **SCH\_A** and **SCH\_B**. This is because 80% of the files in the path belong to the **SCH\_A** schema, and 20% of the files belong to the **SCH\_B** schema. Therefore, the schema meets the partition threshold value. Also, the number of different schemas doesn't exceed the number of clusters, and the schema doesn't exceed the cluster size limit.
例 2
次の例では、DOC-EXAMPLE-FOLDER2 フォルダには 10 個のファイルがあり、このうち 7 個のファイルのスキーマは SCH_A、3 個のファイルのスキーマは SCH_B です。
クローラーが Amazon S3 パス s3://DOC-EXAMPLE-FOLDER2 をクロールすると、クローラーはファイルごとに 1 つのテーブルを作成します。これは、ファイルの 70% が SCH_A スキーマに属し、ファイルの 30% が SCH_B スキーマに属しているためです。これは、スキーマがパーティションのしきい値を超えていないことを意味します。
注: Amazon CloudWatch のクローラーログを確認して、作成されたテーブルに関する情報を取得できます。
クローラーのオプション
クローラーの動作をカスタマイズするときに、次のオプションのいずれかを選択できます。
- 単一のスキーマを作成する: [S3 パスごとに単一のスキーマを作成する] オプションを使用して、スキーマの類似性を無視して単一のスキーマを作成するようにクローラーを設定できます。詳細については、「各 Amazon S3 インクルードパスの単一のスキーマを作成する」を参照してください。
注: クローラーがデータの非互換性を検出した場合でも、クローラーは複数のテーブルを作成します。
- テーブルの場所を指定する: テーブルレベルのクローラーオプションを使用して、テーブルの配置場所とパーティションの作成方法を指定できます。詳細については、「テーブルの場所とパーティションレベルの指定」を参照してください。
関連情報
クローラーを使用したデータカタログへの入力
クローラーの動作のカスタマイズ