自訂爬行者程式行為 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自訂爬行者程式行為

當爬蟲程式執行時,它可能遇到您的資料存放區變更,導致結構描述或分割區不同於之前的編目。您可以使用 AWS Management Console 或 AWS Glue API 來設定爬行者程式處理特定類型變更的方式。

Console

當您使用 AWS Glue 主控台定義爬蟲程式時,有幾個選項可設定爬蟲程式的行為。如需使用 AWS Glue 主控台新增爬蟲程式的詳細資訊,請參閱設定爬行者程式

當爬蟲程式在之前編目過的資料存放區執行時,可能會發現結構描述已經變更,或是資料存放區中的部分物件已被刪除。爬蟲程式會記錄結構描述的變更。根據爬蟲程式的來源類型而定,無論結構描述變更政策為何,系統可能都會建立新的資料表和分割區。

若要指定爬蟲程式在發現結構描述變更時應執行何種動作,您可以在主控台選擇以下動作之一:

  • Update the table definition in the Data Catalog (更新 Data Catalog 中的資料表定義) - 在 AWS Glue Data Catalog中新增欄位、移除遺漏欄位,以及修改現有欄位的定義。移除爬蟲程式未設定的任何中繼資料。這是預設設定。

  • Add new columns only (僅新增欄位) - 對於映射至 Amazon S3 資料存放區的資料表,在它們被探索到時新增欄位,但不刪除或變更 Data Catalog 中現有欄位的類型。當 Data Catalog 中的目前欄位正確,而且您不希望爬蟲程式移除或變更現有欄位的類型時,選擇此選項。如果基本 Amazon S3 資料表屬性變更,例如分類、壓縮類型、或 CSV 分隔符號,請將該資料表標記為淘汰。維持輸入和輸出格式與它們在 Data Catalog 時相同。只有當 SerDe 參數是爬行者程式所設定的參數時,才更新參數。對於所有其他資料存放區,修改現有欄位的定義。

  • Ignore the change and don't update the table in the Data Catalog (忽略變更且不更新 Data Catalog 中的資料表) - 僅建立新的資料表和分割區。

    這是增量網路爬取的預設設定。

爬蟲程式可能也會探索到新的或變更的分割區。依預設,新的分割區會新增,而現有分割區若有變更則會更新。此外,您可以在 主控台,將爬蟲程式的組態選項設定為 Update all new and existing partitions with metadata from the tableAWS Glue (以資料表的中繼資料更新所有新的和現有分割區)。設定此選項後,分割區會從其父表格繼承中繼資料屬性,例如其分類、輸入格式、輸出格式、 SerDe資訊和結構描述。資料表中這些屬性的任何變更都會傳播至其分割區。現有的爬蟲程式以此組態選項設定後,下次爬蟲程式執行時,現有分割區就會更新以符合其父資料表的屬性。

若要指定當爬蟲程式在資料存放區發現刪除的物件,您可以選擇下列其中一個動作:

  • 從 Data Catalog 刪除資料表和分割區

  • 忽略變更且不更新 Data Catalog 中的資料表

    這是增量網路爬取的預設設定。

  • Mark the table as deprecated in the Data Catalog (在 Data Catalog 中將該資料表標記為淘汰) - 這是預設設定。

AWS CLI
aws glue create-crawler \ --name "your-crawler-name" \ --role "your-iam-role-arn" \ --database-name "your-database-name" \ --targets 'S3Targets=[{Path="s3://your-bucket-name/path-to-data"}]' \ --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": {"AddOrUpdateBehavior": "InheritFromTable"}, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
API

使用 AWS Glue API 定義爬行者程式時,您可以從數個欄位中選擇以設定爬行者程式。爬蟲程式 API 中的 SchemaChangePolicy 可決定當爬蟲程式發現變更的結構描述或刪除的物件時,應執行何種動作。爬蟲程式在執行時會記錄結構描述的變更。

顯示爬蟲配置選項的示例 python 代碼

import boto3 import json # Initialize a boto3 client for AWS Glue glue_client = boto3.client('glue', region_name='us-east-1') # Replace 'us-east-1' with your desired AWS region # Define the crawler configuration crawler_configuration = { "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } } configuration_json = json.dumps(crawler_configuration) # Create the crawler with the specified configuration response = glue_client.create_crawler( Name='your-crawler-name', # Replace with your desired crawler name Role='crawler-test-role', # Replace with the ARN of your IAM role for Glue DatabaseName='default', # Replace with your target Glue database name Targets={ 'S3Targets': [ { 'Path': "s3://your-bucket-name/path/", # Replace with your S3 path to the data }, ], # Include other target types like 'JdbcTargets' if needed }, Configuration=configuration_json, # Include other parameters like Schedule, Classifiers, TablePrefix, SchemaChangePolicy, etc., as needed ) print(response)a

爬蟲程式執行時,無論結構描述變更政策為何,一律會建立新的資料表和分割區。您可以在 UpdateBehavior 結構的 SchemaChangePolicy 欄位中選擇以下動作之一,以決定當爬蟲程式發現變更的資料表結構描述時應採取何種動作:

  • UPDATE_IN_DATABASE 在 更新資料表。 AWS Glue Data Catalog新增欄位、移除遺漏欄位,以及修改現有欄位的定義。移除爬蟲程式未設定的任何中繼資料。

  • LOG – 忽略變更並且不更新 Data Catalog 中的資料表。

    這是增量網路爬取的預設設定。

您也可以使用爬蟲程式 API Configuration 欄位提供的 JSON 物件覆寫 SchemaChangePolicy 結構。此 JSON 物件可包含一個金鑰值對,將政策設定為不更新現有的欄位,而且僅新增欄位。例如,以字串提供下列 JSON 物件:

{ "Version": 1.0, "CrawlerOutput": { "Tables": { "AddOrUpdateBehavior": "MergeNewColumns" } } }

此選項對應至 主控台的 Add new columns onlyAWS Glue (僅新增欄位) 選項。它只會覆寫對 Amazon S3 資料存放區進行編目所產生資料表的 SchemaChangePolicy 結構。如果您想要維持中繼資料與它在 Data Catalog (真實來源) 時相同,請選擇此選項。在發現欄位時將會新增欄位,包括巢狀資料類型。但現有欄位不會移除,其類型也不會變更。如果 Amazon S3 資料表屬性大幅變更,請將資料表標記為淘汰,並記錄不相容的屬性需要解析的警告。此選項不適用於增量爬蟲程式。

爬蟲程式在之前抓取過的資料存放區執行時,可能會發現新的或變更過的分割區。依預設,新的分割區會新增,而現有分割區若有變更則會更新。此外,您可以將爬蟲程式的組態選項設定為 InheritFromTable [對應至 主控台的 Update all new and existing partitions with metadata from the tableAWS Glue (以資料表的中繼資料更新所有新的和現有分割區) 選項]。設定此選項後,分割區會從其父表格繼承中繼資料屬性,例如其分類、輸入格式、輸出格式、 SerDe 資訊和結構描述。父資料表的任何屬性對變更都會傳播至其分割區。

現有的爬蟲程式以此組態選項設定後,下次爬蟲程式執行時,現有分割區就會更新以符合其父資料表的屬性。此行為是設定爬蟲程式 API Configuration 欄位。例如,以字串提供下列 JSON 物件:

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" } } }

爬蟲程式 API Configuration 欄位可設定多個組態選項。例如,若要設定爬蟲程式輸出至分割區和資料表,您可以提供一個字串呈現下列 JSON 物件:

{ "Version": 1.0, "CrawlerOutput": { "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }, "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } } }

您可以選擇下列其中一個動作,以決定當爬蟲程式在資料存放區發現刪除的物件時,應採取何種動作。爬蟲程式 API 的 SchemaChangePolicy 結構中的 DeleteBehavior 欄位可設定當爬蟲程式探索到刪除的物件時的行為。

  • DELETE_FROM_DATABASE – 從 Data Catalog 刪除資料表和分割區。

  • LOG - 忽略變更。不更新 Data Catalog 。改為寫入日誌訊息。

  • DEPRECATE_IN_DATABASE – 在 Data Catalog 將資料表標記為棄用。這是預設設定。