本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自訂爬行者程式行為
當爬蟲程式執行時,它可能遇到您的資料存放區變更,導致結構描述或分割區不同於之前的編目。您可以使用 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 將資料表標記為棄用。這是預設設定。