當我執行 AWS Glue 編目程式時,編目程式會建立多個結構描述看起來相似的資料表。我想知道編目程式如何偵測結構描述。
解決方法
當您執行 AWS Glue 編目程式時,編目程式會完成以下步驟:
- 編目程式會分類資料。
- 編目程式會將資料分組為資料表或分區。
- 編目程式會將中繼資料寫入 AWS Glue Data Catalog。
若要了解編目程式的作用,以及編目程式如何偵測結構描述,請檢閱以下資訊。
定義編目程式
當您定義 AWS Glue 編目程式時,您可以選擇一個或多個自訂分類器,這些分類器會評估您資料的格式,以推斷結構描述。當編目程式執行時,編目程式會使用您清單中的第一個成功辨識資料存放區的分類器,為您的資料表建立結構描述。在您定義編目程式之前,您必須先定義自訂分類器。當編目程式執行時,編目程式會使用您定義的自訂分類器,在資料存放區中尋找相符項目。與每個分類器的相符結果都會產生確定性。如果分類器在處理期間傳回 certainty=1.0,則編目程式可 100% 確定該分類器可以建立正確的結構描述。在此情況下,編目程式不會調用任何其他分類器,接著使用符合自訂分類器的分類器建立資料表。
如需更多資訊,請參閱定義和管理分類器。
編目程式中的結構描述偵測
在第一次執行編目程式期間,編目程式會讀取每個檔案的前 1,000 筆記錄或前 1 MB,以推斷結構描述。讀取的資料量取決於檔案格式和有效記錄的可用性。例如,如果輸入檔案是 JSON 檔案,則編目程式會讀取檔案的前 1 MB 來推斷結構描述。如果編目程式在檔案前 1 MB 內讀取到有效記錄,則編目程式會推斷結構描述。如果編目程式在 1 MB 之後仍無法推斷結構描述,則會以每次 1 MB 的增量持續讀取檔案,最多讀取到 10 MB。對於 CSV 檔案,編目程式會讀取前 1000 筆記錄或前 1 MB 的資料,以先到者為準。對於 Parquet 檔案,編目程式會直接從檔案推斷結構描述。編目程式會比較從所有子資料夾和檔案推斷出的結構描述,然後建立一個或多個資料表。當編目程式建立資料表時,編目程式會考量以下因素:
- 資料相容性,用來檢查資料是否具有相同的格式、壓縮類型和包含路徑。
- 結構描述相似性,用來檢查結構描述在分區閾值和不同結構描述數量方面的相似程度。
若要讓編目程式判定結構描述相似,則必須符合以下條件:
- 分區閾值高於 0.7 (70%)。
- 不同結構描述的最大數量 (在此情境中也稱為「叢集」) 不得超過 5。
編目程式會在資料夾層級推斷結構描述,並比較所有資料夾中的結構描述。如果比較後的結構描述相符,且分區閾值高於 70%,則這些結構描述會標示為同一資料表的分區。如果不相符,則編目程式會為每個資料夾建立一個資料表,因而產生較多資料表。
範例情境
範例 1
在以下範例中,資料夾 DOC-EXAMPLE-FOLDER1 有 10 個檔案,其中 8 個檔案的結構描述為 SCH_A,2 個檔案的結構描述為 SCH_B。
假設這些檔案類似於以下範例:
SHC_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 時,編目程式會為每個檔案建立一個資料表。這是因為 70% 的檔案屬於結構描述 SCH_A,而 30% 的檔案屬於結構描述 SCH_B。這表示該結構描述不符合分區閾值。
**注意:**您可以檢查 Amazon CloudWatch 中的編目程式日誌,以取得已建立資料表的相關資訊。
編目程式選項
當您自訂編目程式行為時,可以選擇以下其中一個選項:
- **建立單一結構描述:**您可以使用 Create a single schema for each S3 path (為每個 S3 路徑建立單一結構描述) 選項,將編目程式設定為忽略結構描述相似性並建立單一結構描述。如需更多資訊,請參閱為每個 Amazon S3 包含路徑建立單一結構描述。
**注意:**如果編目程式偵測到資料不相容,則編目程式仍會建立多個資料表。
- **指定資料表位置:**您可以使用資料表層級編目程式選項,指定資料表所在位置以及建立分區的方式。如需更多資訊,請參閱指定資料表位置和分區層級。
相關資訊
使用編目程式填入 Data Catalog
自訂編目程式行為