AWS Glue 編目程式如何偵測結構描述?

上次更新日期︰2021 年 8 月 27 日

我正在執行 AWS Glue 編目程式。即使結構描述看起來相似,編目程式仍會建立多個資料表。我想知道編目程式如何偵錯結構描述。

解決方案

在執行 AWS Glue 編目程式時,編目程式會執行下列操作:

  1. 將資料分類
  2. 將資料分組到資料表或分割區
  3. 將中繼資料寫入 AWS Glue 資料型錄

檢閱下列內容,了解執行編目程式時會發生什麼情況,以及編目程式如何偵測結構描述。

定義編目程式

定義 AWS Glue 編目程式時,可以選擇一個或多個自訂分類器來評估資料格式,以推斷結構描述。編目程式執行時,清單中第一個成功識別資料存放區的分類器會用於建立資料表的結構描述。您可以先定義自訂分類器,然後再定義編目程式。編目程式執行時,編目程式會使用您定義的自訂分類器,在資料存放區中尋找相符項目。與每個分類器相符會產生確定度。如果分類器在處理過程中傳回確定度 =1.0,那麼編目程式 100% 確定分類器可以建立正確的結構描述。在此情況下,編目程式會停止叫用其他分類器,然後建立具有符合自訂分類器的分類器資料表。

如果 AWS Glue 找不到具有 100% 確定度的符合輸入資料格式的自訂分類器,則 AWS Glue 會叫用內建分類器。如果格式相符,內建分類器會傳回確定度 = 1.0,或者如果格式不匹配,則傳回確定度 = 0.0。如果沒有任何分類器傳回確定度 =1.0,則 AWS Glue 會使用具有最高確定度的分類器輸出。如果沒有任何分類器傳回大於 0.0 的確定度,則 AWS Glue 會傳回 UNKNOWN 預設分類字串。如需了解 AWS Glue 中內建分類器的目前清單及其叫用順序,請參閱 AWS Glue 中的內建分類器

編目程式中的結構描述偵測

在第一次編目程式執行期間,編目程式會讀取前 1,000 個記錄或前 1 MB 的檔案,以推斷結構描述。讀取的資料量取決於檔案格式和有效記錄的可用性。例如,如果輸入檔案是 JSON 檔案,則編目程式讀取前 1 MB 的檔案,以推斷結構描述。如果在前 1 MB 的檔案讀取有效的記錄,則編目程式會推斷該結構描述。如果編目程式在讀取前 1 MB 後無法推斷結構描述,則編目程式最多可讀取 10 MB 的檔案,每次遞增 1 MB。對於 CSV 檔案,編目程式會讀取前 100 個記錄,或前 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"}

當編目程式對 Amazon Simple Storage Service (Amazon S3) 路徑 s3://DOC-EXAMPLE-FOLDER1 編目時,編目程式會建立一個資料表。該資料表包含結構描述 SCH_A 和 SCH_B 模式的資料欄。這是因為路徑中 80% 的檔案屬於 SCH_A 結構描述,而 20% 的檔案屬於 SCH_B 結構描述。因此,符合分割區閾值。此外,不同結構描述的數目尚未超過叢集數目,且不會超過叢集大小限制。

範例 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 包含路徑建立單一結構描述。但是,如果編目程式偵錯到資料不相容,則編目程式仍會建立多個資料表。
  • 指定資料表位置:使用資料表層級編目程式選項,您可以告訴編目程式該資料表的位置,以及如何建立分割區。在指定資料表層級值後,會透過 Amazon S3 儲存貯體在該絕對層級建立資料表。在主控台上設定編目程式時,您可以指定 Table level (資料表層級) 編目程式選項的值。該值必須是正整數,且指示表格位置 (資料集中的絕對層級)。頂層資料夾的層級為 1。例如,針對路徑 mydataset/a/b,如果層級設定為 3,則會在位置 mydataset/a/b 建立資料表。如需詳細資訊,請參閱如何指定資料表位置

此文章是否有幫助?


您是否需要帳單或技術支援?