跳至內容

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

1 分的閱讀內容
0

當我執行 AWS Glue 編目程式時,編目程式會建立多個結構描述看起來相似的資料表。我想知道編目程式如何偵測結構描述。

解決方法

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

在第一次執行編目程式期間,編目程式會讀取每個檔案的前 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"}

當編目程式編目 Amazon Simple Storage Service (Amazon S3) 路徑 s3://DOC-EXAMPLE-FOLDER1 時,編目程式會建立一個資料表,資料表包含結構描述 SCH_ASCH_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 中的編目程式日誌。

編目程式選項

當您自訂編目程式行為時,可以選擇以下其中一個選項:

相關資訊

Using crawlers to populate the Data Catalog (使用編目程式填入 Data Catalog)

Customizing crawler behavior (自訂編目程式行為)

Defining and managing classifiers (定義與管理分類器)

AWS 官方已更新 8 個月前