步驟 2:選擇資料來源和分類器 - AWS Glue

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

步驟 2:選擇資料來源和分類器

接著,設定爬蟲程式的資料來源和分類器。

如需支援資料來源的詳細資訊,請參閱 用於爬取的支援資料來源

資料來源組態

選取適當的選項,讓您的資料是否已對應至AWS Glue資料表?選擇「尚未」或「是」。依預設已選取「尚未」。

爬蟲程式可以直接存取資料存放區做為抓取來源,也可以使用現有的 Data Catalog 資料表做為來源。如果爬蟲程式使用現有的目錄資料表,即會抓取這些目錄資料表指定的資料存放區。

  • 尚未:選取一或多個要網路爬取的資料來源。爬蟲程式可以在單一執行中抓取多個不同類型的資料存放區 (Amazon S3,、JDBC 等)。

    您一次只可設定一個資料存放區。在您提供連線資訊並包含路徑和排除樣式之後,接著可以選擇加入其他資料存放區。

  • 是:從 AWS Glue Data Catalog 中選取現有資料表。指定要抓取之資料存放區的目錄資料表。爬蟲程式只能在單一執行中抓取目錄資料表,而無法混合其他來源類型。

    指定目錄資料表做為來源的常見原因是您已手動建立資料表 (因為您已經知道資料存放區的結構),並希望爬蟲程式讓資料表持續更新,包括新增新的分割區。如需了解其他原因的說明,請參閱使用爬蟲程式更新手動建立的資料目錄資料表

    當您指定現有資料表做為爬蟲程式來源類型時,則適用以下條件:

    • 資料庫名稱是選用的。

    • 僅允許指定 Amazon S3、Amazon DynamoDB 或 Delta Lake 資料存放區的目錄資料表。

    • 爬蟲程式執行時,不會建立任何新的目錄資料表。系統會視需要更新現有的資料表,包括新增新的分割區。

    • 系統會忽略資料存放區中找到的已刪除物件,而不會刪除任何目錄資料表。反之,爬蟲程式會寫入日誌訊息。(SchemaChangePolicy.DeleteBehavior=LOG)

    • 依預設,系統會啟用爬蟲程式組態選項以建立每個 Amazon S3 路徑的單一結構描述,且無法停用。(TableGroupingPolicy=CombineCompatibleSchemas) 如需詳細資訊,請參閱為每個 Amazon S3 建立單一結構描述包含路徑

    • 您無法將含有任何其他來源類型的目錄資料表混合為來源 (例如 Amazon S3 或 Amazon DynamoDB)。

若要使用 Delta 資料表,請先使用 Athena DDL 或 AWS Glue API 建立 Delta 資料表。

使用 Athena,將位置設定為 Amazon S3 資料夾,並將資料表類型設定為 'DELTA'。

CREATE EXTERNAL TABLE database_name.table_name LOCATION 's3://bucket/folder/' TBLPROPERTIES ('table_type' = 'DELTA')

使用 AWS Glue API,在資料表參數映射中指定資料表類型。資料表參數需要包含下列索引鍵/值對。如需如何建立資料表的詳細資訊,請參閱 create_table 的 Boto3 文件

{ "table_type":"delta" }
資料來源

選取或新增爬蟲程式要掃描的資料來源清單。

(選用) 如果您選擇 JDBC 作為資料來源,則在指定存放驅動程式資訊的連線存取時,可以使用自己的 JDBC 驅動程式。

包含路徑

在評估抓取要包含或排除的內容時,爬蟲程式會先評估必要的包含路徑。對於 Amazon S3、MongoDB、MongoDB Atlas、Amazon DocumentDB (with MongoDB compatibility) 和關聯式資料存放區,您必須指定包含路徑。

對於 Amazon S3 資料存放區

選擇是否要在此帳戶或在其他帳戶中指定路徑,然後瀏覽以選擇 Amazon S3 路徑。

對於 Amazon S3 資料存放區,包含路徑語法是 bucket-name/folder-name/file-name.ext。要探索儲存貯體中的所有物件,僅指定在包含路徑的儲存貯體名稱。排除模式是相對於包含路徑。

對於 Delta Lake 的資料儲存

將一個或多個指向 Delta 資料表的 Amazon S3 路徑指定為:s3://bucket/prefix/object

對於 Iceberg 或 Hudi 資料存放區

將一個或多個包含資料夾且資料夾中具有 Iceberg 或 Hudi 資料表中繼資料的 Amazon S3 路徑,指定為 s3://儲存貯體/字首

對於 Iceberg 和 Hudi 資料存放區,Iceberg/Hudi 資料夾可能位於根資料夾的子資料夾中。爬蟲程式將掃描路徑下所有資料夾中的 Hudi 資料夾。

對於 JDBC 資料存放區

輸入 <database>/<schema>/<table><database>/<table>,視資料庫產品而定。Oracle 資料庫和 MySQL 不支援路徑中的結構描述。您可以用百分比 (%) 字元取代 <schema><table>。例如,對於系統識別碼 (SID) 為 orcl 的 Oracle 資料庫,請輸入 orcl/% 以匯入連線中命名使用者有權存取的所有資料表。

重要

此欄位會區分大小寫。

注意

如果您選擇引入自己的 JDBC 驅動程式版本,AWS Glue 爬蟲程式將使用 AWS Glue 任務和 Amazon S3 儲存貯體中的資源,以確保您提供的驅動程式在環境中執行。帳戶中將反映資源的額外使用量。驅動程式僅限於新增 AWS Glue 連線中所述的屬性。

對於 MongoDB、MongoDB Atlas 或 Amazon DocumentDB 資料存放區

對於 MongoDB、MongoDB Atlas 和 Amazon DocumentDB (with MongoDB compatibility),語法是 database/collection

對於 JDBC 資料存放區,語法為 database-name/schema-name/table-namedatabase-name/table-name。語法取決於資料庫引擎在資料庫中是否支援結構描述。例如,對於資料庫引擎 (如 MySQL 或 Oracle),請勿在包含路徑中指定 schema-name。您可以在包含路徑中針對結構描述或資料表替代百分比符號 (%),以代表資料庫中的所有結構描述或所有資料表。您不能替代包含路徑中資料庫的百分比符號 (%)。

橫向深度上限 (僅適用於 Iceberg 或 Hudi 資料存放區)

定義爬蟲程式可在 Amazon S3 路徑中周遊探索 Iceberg 或 Hudi 中繼資料資料夾的 Amazon S3 路徑深度上限。此參數的用途是限制爬蟲程式執行時間。預設值為 10,最大值為 20。

排除模式

這些模式可讓您排除抓取特定檔案或資料表。排除路徑是相對於包含路徑。例如,若要在您的 JDBC 資料存放區中排除資料表,請在排除路徑中輸入資料表的名稱。

爬蟲程式會使用 AWS Glue 連線 (其中包含 JDBC URI 連線字串) 連接到 JDBC 資料存放區。爬蟲程式只可以使用 AWS Glue 連線中的 JDBC 使用者名稱和密碼來存取資料庫引擎中的物件。爬蟲程式只能建立其可透過 JDBC 連線存取的表格。在爬蟲程式使用 JDBC URI 存取資料庫引擎後,您可使用包括路徑來判斷資料庫引擎中哪些資料表是在 Data Catalog 中所建立的。例如,若使用 MySQL,如果您指定 MyDatabase/% 的包括路徑,則 MyDatabase 中的所有資料表會在 Data Catalog 中建立。存取 Amazon Redshift 時,如果您指定 MyDatabase/% 的包括路徑,則資料庫 MyDatabase 所有結構描述中的所有資料表會在 Data Catalog 中建立。如果您指定 MyDatabase/MySchema/% 的包括路徑,則資料庫 MyDatabase 中的所有資料表和結構描述 MySchema 會加以建立。

在指定包含路徑後,您可以指定一個或多個 Unix 樣式的 glob 排除模式,從包含路徑包含的抓取中排除物件。這些模式會套用至您的包含路徑,以判斷哪些物件被排除。這些模式也會在爬蟲程式所建立的資料表中儲存為屬性。AWS GluePySpark 延伸,例如 create_dynamic_frame.from_catalog,讀取資料表屬性並排除經排除模式定義的物件。

AWS Glue 在排除glob模式中支援下列模式。

排除模式 描述
*.csv 符合目前資料夾中代表以 .csv 結尾之物件名稱的 Amazon S3 路徑
*.* 符合所有包含點的物件名稱
*.{csv,avro} 符合以 .csv.avro 結尾的物件名稱
foo.? 符合以 foo. 開頭並由單一字元副檔名接續的物件名稱
myfolder/* 符合位於 myfolder 下一層子資料夾中的物件,例如 /myfolder/mysource
myfolder/*/* 符合位於 myfolder 下兩層子資料夾中的物件,例如 /myfolder/mysource/data
myfolder/** 符合位於 myfolder 所有子資料中的物件,例如 /myfolder/mysource/mydata/myfolder/mysource/data
myfolder** 符合資料夾 myfolder 以及 myfolder 下的檔案,例如 /myfolder/myfolder/mydata.txt
Market* 符合 JDBC 資料庫中以 Market 開頭為名稱的資料表,例如 Market_usMarket_fr

AWS Glue 對 glob 排除模式的解譯如下:

  • 斜線 (/) 字元為分隔符號,可將 Amazon S3 金鑰分隔至資料夾階層。

  • 星號 (*) 字元符合不超過資料夾邊界之名稱元件的零個或多個字元。

  • 雙星號 (**) 符合超過資料夾或結構描述邊界的零個或多個字元。

  • 問號 (?) 字元符合名稱元件的單一字元。

  • 反斜線 (\) 字元用於逸出可被解譯為特殊字元的字元。表達式 \\ 符合一個反斜線,而 \{ 符合左大括弧。

  • 方括號 [ ] 會建立括號表達式,符合一組字元中一個名稱元件的單一字元。例如,[abc] 符合 abc。連字號 (-) 可用於指定範圍,因此 [a-z] 指定的範圍符合從 az (包含)。這些形式可以混合,因此 [abce-g] 符合 abcefg。如果方括號 ([) 後方的字元為驚嘆號 (!),則此括號表達式為否定。例如,[!a-c] 符合 abc 以外的字元。

    在括號表達式中,*?\ 字元符合本身。如果連字號 (-) 是方括號內的第一個字元,則其符合本身,如果連字號是 ! 後的第一個字元,則為否定。

  • 大括弧 ({ }) 會括住一組子模式,如果群組中的任何子模式符合,則此群組也符合。逗號 (,) 字元用於分隔子模式。群組不能巢狀組合。

  • 前置句點或點號字元在相符操作中會視為一般字元。例如,* 排除模式符合檔案名稱 .hidden

範例 Amazon S3 排除模式

每個排除模式都會以包含路徑來評估。例如,假設您有以下 Amazon S3 目錄結構:

/mybucket/myfolder/ departments/ finance.json market-us.json market-emea.json market-ap.json employees/ hr.json john.csv jane.csv juan.txt

包含路徑為 s3://mybucket/myfolder/,而以下為排除模式的一些範例結果:

排除模式 結果
departments/** 排除 departments 以下所有檔案和資料夾,並包含 employees 資料夾及其檔案
departments/market* 排除 market-us.jsonmarket-emea.jsonmarket-ap.json
**.csv 排除 myfolder 以下名稱以 .csv 結尾的所有物件
employees/*.csv 排除 employees 資料夾中所有的 .csv 檔案
範例 排除 Amazon S3 分割區的子集

假設您的資料以天為單位分割,那麼一年中的每一天都是一個獨立的 Amazon S3 分割區。2015 年 1 月有 31 個分割區。如果現在只要抓取 1 月第一週的資料,您就必須排除第 1 至第 7 天以外的所有分割區:

2015/01/{[!0],0[8-9]}**, 2015/0[2-9]/**, 2015/1[0-2]/**

讓我們看看此全域模式的部分。第一部分的 2015/01/{[!0],0[8-9]}** 排除了 2015 年第 01 個月不以「0」開頭的所有天數 (除了第 08 天和第 09 天)。請注意,「**」的用途是天數模式的尾碼,會超過資料夾邊界至較低層級的資料夾。如果使用「*」,則較低的資料夾層級不會被排除。

第二部分的 2015/0[2-9]/** 會排除 2015 年第 02 至 09 個月裡的天數。

第三部分的 2015/1[0-2]/** 會排除 2015 年第 10、11、12 個月裡的天數。

範例 JDBC 排除模式

假設您以下列的結構描述架構爬取 JDBC 資料庫:

MyDatabase/MySchema/ HR_us HR_fr Employees_Table Finance Market_US_Table Market_EMEA_Table Market_AP_Table

包含路徑為 MyDatabase/MySchema/%,而以下為排除模式的一些範例結果:

排除模式 結果
HR* 排除名稱以 HR 開頭的資料表
Market_* 排除名稱以 Market_ 開頭的資料表
**_Table 排除所有名稱以 _Table 結尾的資料表
其他爬蟲程式來源參數

每個來源類型都需要一組不同的附加參數。

連線

選取或新增 AWS Glue 連線。如需連線的詳細資訊,請參閱 連線至資料

其他中繼資料 – 選用 (適用於 JDBC 資料存放區)

選取要網路爬取的其他爬蟲程式中繼資料屬性。

  • 註解:網路爬取相關的資料表層級和資料欄層級註解。

  • 原始類型:將資料表資料欄的原始資料類型保存在其他中繼資料中。作為預設行為,爬蟲程式會將原始資料類型轉換為 Hive 相容的類型。

JDBC 驅動程式類別名稱:選用 (適用於 JDBC 資料存放區)

針對連線至資料來源的爬蟲程式,輸入自訂 JDBC 驅動程式類別名稱:

  • Postgres:org.postgresql.Driver

  • MySQL:com.mysql.jdbc.Driver、com.mysql.cj.jdbc.Driver

  • Redshift:com.amazon.redshift.jdbc.Driver、com.amazon.redshift.jdbc42.Driver

  • Oracle:oracle.jdbc.driver.OracleDriver

  • SQL Server:com.microsoft.sqlserver.jdbc.SQLServerDriver

JDBC 驅動程式 S3 路徑:選用 (適用於 JDBC 資料存放區)

選擇 .jar 檔案的現有 Amazon S3 路徑。此為針對連線至資料來源的爬蟲程式使用自訂 JDBC 驅動程式時,用來存放 .jar 檔案的所在位置。

啟用資料取樣 (僅適用於 Amazon DynamoDB、MongoDB、MongoDB Atlas 和 Amazon DocumentDB 資料存放區)

選取是否只編目資料範例。如果未選取,則會編目整個資料表。當資料表不是高傳輸量資料表時,掃描所有記錄可能需要很長的時間。

建立用於查詢的資料表 (僅適用於 Delta Lake 資料存放區)

選取建立 Delta Lake 資料表的方式:

  • 建立原生資料表:允許與支援直接查詢 Delta 交易日誌的查詢引擎整合。

  • 建立符號連結資料夾:根據特定組態參數,使用由分割區索引鍵分割的資訊清單檔案建立符號連結清單檔案資料夾。

掃描速率 – 選用 (僅適用於 DynamoDB 資料存放區)

指定爬蟲程式要使用的 DynamoDB 資料表讀取容量單位百分比。讀取容量單位是 DynamoDB 定義的術語,此數值可作為每秒可在該資料表上執行的讀取次數速率限制符號。請輸入介於 0.1 到 1.5 之間的值。如果未指定,則佈建資料表預設為 0.5,而隨需資料表則預設為最大設定容量的 1/4。請注意,僅佈建的容量模式應與 AWS Glue 爬蟲程式搭配使用。

注意

對於 DynamoDB 的資料儲存,請設定已佈建的容量模式,以便處理資料表的讀取和寫入。 AWS Glue 爬蟲程式不應與隨需容量模式搭配使用。

網路連線 - 選用 (適用於 Amazon S3、Delta、Iceberg、Hudi 和 Catalog 目標資料存放區)

選擇是否包含要用於此 Amazon S3 目標的網路連線。請注意,每個爬蟲程式僅限於一個網路連線,因此任何其他 Amazon S3 目標也會使用相同的連線 (如果保留空白,則無連線)。

如需連線的詳細資訊,請參閱 連線至資料

僅對檔案的子集和樣本大小進行取樣 (僅適用於 Amazon S3 資料存放區)

指定在資料集中網路爬取範例檔案時,每個分葉資料夾中要編目的檔案數目。開啟此功能時,爬蟲程式會隨機選取每個分葉資料夾中要網路爬取的某些檔案,而不是網路爬取此資料集中的所有檔案。

取樣爬蟲程式最適合先前了解其資料格式,並且知道資料夾中的結構描述不會變更的客戶。開啟此功能會大幅減少爬蟲程式執行時間。

有效值是介於 1 到 249 之間的整數。如果未指定,則會網路爬取所有檔案。

後續爬蟲程式執行

此欄位是會影響所有 Amazon S3 資料來源的全域欄位。

  • 網路爬取所有子資料夾:在每次後續網路爬取時,再次網路爬取所有資料夾。

  • 僅網路爬取新的子資料夾:只會網路爬取自上次網路爬取以來新增的 Amazon S3 資料夾。如果結構描述相容,則會將新的分割區新增至現有資料表。如需詳細資訊,請參閱 排程增量爬取以新增分割區

  • 根據事件進行網路爬取:依賴 Amazon S3 事件來控制要網路爬取的資料夾。如需詳細資訊,請參閱使用 Amazon S3 事件通知加速網路爬取

自訂分類器 – 選用

定義自訂分類器,再定義爬蟲程式。分類器會檢查指定的檔案是否採用爬蟲程式可以處理的格式。如果是,則分類器會以符合該資料格式的 StructType 物件形式,建立結構描述。

如需詳細資訊,請參閱定義和管理分類器