

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

# 使用編目程式填入 Data Catalog
<a name="add-crawler"></a>

您可以使用 AWS Glue 編目程式 將 AWS Glue Data Catalog 資料庫和資料表填入 。這是大多數 AWS Glue 使用者使用的主要方法。爬蟲程式可以在單一執行中抓取多個資料存放區。一旦完成，爬蟲程式即會在 Data Catalog 中建立或更新一或多個資料表。您在 AWS Glue 中定義的擷取、轉換和載入 (ETL) 任務，會將這些 Data Catalog 資料表做為來源和目標使用。ETL 任務可讀取和寫入來源及目標 Data Catalog 資料表中指定的資料存放區。

## 工作流程
<a name="crawler-workflow"></a>

以下任務流程圖顯示 AWS Glue 爬蟲程式如何與資料存放區和其他元素互動以填入資料目錄。

![\[任務流程顯示 AWS Glue 爬蟲程式如何以 5 個基本步驟填入資料目錄。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/PopulateCatalog-overview.png)


以下是爬蟲程式填入 AWS Glue Data Catalog的一般任務流程：

1. 爬蟲程式會執行您選擇的任何自訂「分類器」**以推斷資料的結構描述。您為自訂分類器提供程式碼，分類器依照您指定的順序執行。

   第一個自訂分類器成功識別資料結構可用來建立結構描述。清單中較低的自訂分類器會被略過。

1. 如果沒有自訂分類器符合您資料的結構描述，內建分類器將嘗試識別您資料的結構描述。可識別 JSON 的分類器即是一種內建分類器的範例。

1. 爬蟲程式連接到資料存放區。有些資料存放區需要連線屬性才能讓爬蟲程式存取。

1. 為您的資料建立經過推斷的結構描述。

1. 爬蟲程式將中繼資料寫入資料目錄。資料表定義包含與資料存放區中的資料有關的中繼資料。資料表寫入資料庫，該資料庫是資料目錄中的資料表容器。資料表的屬性包含分類，它是由推斷資料表結構描述的分類器所建立的標籤。

**Topics**
+ [工作流程](#crawler-workflow)
+ [爬蟲程式的運作方式](#crawler-running)
+ [爬蟲程式如何決定何時建立分割區？](#crawler-s3-folder-table-partition)
+ [支援的網路爬取資料來源](crawler-data-stores.md)
+ [爬蟲程式的先決條件](crawler-prereqs.md)
+ [定義和管理分類器](add-classifier.md)
+ [設定編目程式](define-crawler.md)
+ [排程爬蟲程式](schedule-crawler.md)
+ [檢視爬蟲程式結果和詳細資訊](console-crawlers-details.md)
+ [自訂編目程式行為](crawler-configuration.md)
+ [教學課程：新增 AWS Glue 爬蟲程式](tutorial-add-crawler.md)

## 爬蟲程式的運作方式
<a name="crawler-running"></a>

爬蟲程式執行時，它會進行以下動作來詢問資料存放區：
+ **分類器資料會判斷格式、結構描述及原始資料的相關屬性** – 您可以透過建立自訂分類器來設定分類的結果。
+ **將資料分組至資料表或分區中** – 資料是根據爬蟲程式啟發來加以分組。
+ **將中繼資料寫入到 Data Catalog ** – 您可以設定爬蟲程式如何新增、更新和刪除資料表和分區。

定義爬蟲程式時，您可選擇一個或多個分類器評估資料格式以推斷結構描述。爬蟲程式執行時，清單中第一個成功辨識資料存放區的分類器會用於為您的資料表建立結構描述。您可以使用內建的分類器或自行定義。您可以先在個別操作中定義自訂分類器，之後再定義爬蟲程式。AWS Glue 提供內建的分類器，可從常見檔案格式 (包括 JSON、CSV 和 Apache Avro) 來推斷結構描述。關於 AWS Glue 目前的內建分類器清單，請參閱[內建分類器](add-classifier.md#classifier-built-in)。

爬蟲程式建立的中繼資料資料表，會包含在您定義爬蟲程式時的資料庫裡。如果爬蟲程式未指定資料庫，資料表會存放於預設的資料庫。此外，每個資料表都有分類欄，會由第一個成功辨識資料存放區的分類器填寫。

如果抓取的檔案已壓縮，爬蟲程式就必須下載檔案才能處理。當爬蟲程式執行時，其會詢問檔案以判斷格式和壓縮類型，並將這些屬性寫入到 Data Catalog 。Apache Parquet 等部分檔案格式，可讓您在進行寫入時壓縮部分檔案。對於這些檔案，壓縮資料是檔案內部元件，且 AWS Glue 不會在將資料表寫入 Data Catalog 時填入 `compressionType` 屬性。反之，如果「整個檔案」**是以壓縮演算法進行壓縮 (例如 gzip)，則會在將資料表寫入 Data Catalog 時填入 `compressionType` 屬性。

爬蟲程式會為其建立的資料表產生名稱。存放在 中的資料表名稱 AWS Glue Data Catalog 遵循下列規則：
+ 只能使用英數字元和底線 (`_`)。
+ 任何自訂的字首都不能超過 64 個字元。
+ 名稱的長度上限不能超過 128 個字元。爬蟲程式會截斷產生的名稱以符合限制。
+ 如果遇到重複的資料表名稱，爬蟲程式會為名稱加上雜湊字串尾碼。

如果爬蟲程式執行超過一次 (或許是按照排程)，則會在資料存放區中尋找新的或變更過的檔案或資料表。爬蟲程式的輸出會包含前一次執行時找到的新資料表和分割區。

## 爬蟲程式如何決定何時建立分割區？
<a name="crawler-s3-folder-table-partition"></a>

當AWS Glue爬蟲程式掃描 Amazon S3 資料存放區並偵測儲存貯體中的多個資料夾時，它會決定資料夾結構中資料表的根目錄，以及哪些資料夾是資料表的分割區。資料表名稱是根據 Amazon S3 字首或資料夾名稱。您提供的**包含路徑**會指向要探索的資料夾層級。當大部分資料夾層級的結構描述都很類似時，爬蟲程式會建立資料表分區，而不是不同的資料表。若要影響爬蟲程式來建立不同的資料表，請當您定義爬蟲程式時，新增每個資料表的根資料夾做為個別的資料存放區。

例如，請試想有以下 Amazon S3 資料夾結構。

![\[多個層級的矩形代表 Amazon S3 中的資料夾階層。頂端矩形標示為「Sales (銷售)」。下方的矩形標記為 year=2019。下方的兩個矩形標示為 month=Jan 和 month=Feb。每個矩形下方都有兩個矩形，標示為 day=1 和 day=2。所有四個「day (天)」(底部) 矩形下都有兩個或四個檔案。所有矩形和檔案都以線條連接。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawlers-s3-folders.png)


四個最低層級資料夾的路徑如下：

```
S3://sales/year=2019/month=Jan/day=1
S3://sales/year=2019/month=Jan/day=2
S3://sales/year=2019/month=Feb/day=1
S3://sales/year=2019/month=Feb/day=2
```

假設爬蟲程式目標設為 `Sales`，並且 `day=n` 資料夾中的所有檔案具有相同的格式 (例如 JSON，未加密)，並且具有相同或非常相似的結構描述。爬蟲程式將使用分割區索引鍵 `year`、`month` 以及 `day`，建立包含四個分割區的單一資料表。

在下一個範例中，請設想以下 Amazon S3 結構：

```
s3://bucket01/folder1/table1/partition1/file.txt
s3://bucket01/folder1/table1/partition2/file.txt
s3://bucket01/folder1/table1/partition3/file.txt
s3://bucket01/folder1/table2/partition4/file.txt
s3://bucket01/folder1/table2/partition5/file.txt
```

如果 `table1` 和 `table2` 下的檔案結構描述相似，且您是透過 **Include path (包括路徑)** `s3://bucket01/folder1/` 在爬蟲程式中加以定義單一資料存放區，爬蟲程式即會建立含兩個分割區索引鍵欄的單一資料表。第一個分割區索引鍵欄包含 `table1` 和 `table2`，而第二個分割區索引鍵欄包含 `partition1` 到 `partition3` (針對 `table1` 分割區) 和 `partition4` 和 `partition5` (針對 `table2` 分割區)。若要建立兩個不同的資料表，定義含有兩個資料存放區的爬蟲程式。在這個範例中，定義第一個**包含路徑**為 `s3://bucket01/folder1/table1/` 和第二個包含路徑為 `s3://bucket01/folder1/table2`。

**注意**  
在 Amazon Athena，每個資料表會與資料表中所有物件的 Amazon S3 字首相對應。如果物件有不同的結構描述，Athena 無法將相同字首中的不同的物件識別為個別資料表。若爬蟲程式透過相同 Amazon S3 字首建立資料表，就可能會發生上述問題。這可能會導致 Athena 中的查詢傳回零結果。對於 Athena，若要正確識別和查詢資料表，使用個別 **Include path (包含路徑)**，針對 Amazon S3 資料夾結構中的每個不同資料表結構描述建立爬蟲程式。如需詳細資訊，請參閱[使用 Athena 搭配 AWS Glue 的最佳實務](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html)以及此 [AWS 知識中心文章](https://aws.amazon.com/premiumsupport/knowledge-center/athena-empty-results/)。

# 支援的網路爬取資料來源
<a name="crawler-data-stores"></a>

爬蟲程式可以抓取下列檔案型和資料表型資料存放區。


| 爬蟲程式使用的存取類型 | 資料存放區 | 
| --- | --- | 
| 原生用戶端 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/crawler-data-stores.html)  | 
| JDBC |  Amazon Redshift Snowflake 在 Amazon Relational Database Service (Amazon RDS) 中或 Amazon RDS 外部： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/crawler-data-stores.html)  | 
| MongoDB 用戶端 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/crawler-data-stores.html)  | 

**注意**  
目前 AWS Glue 不支援資料串流的爬蟲程式。

對於 JDBC、MongoDB、MongoDB Atlas 和 Amazon DocumentDB (with MongoDB compatibility) 資料存放區，您必須指定爬蟲程式可用來連線到資料存放區的 AWS Glue *連線*爬蟲程式。對於 Amazon S3，您可以選擇性地指定網路類型的連線。連線是儲存連線資訊的 Data Catalog 物件，例如憑證、URL、Amazon Virtual Private Cloud 資訊等。如需詳細資訊，請參閱[連線至資料](glue-connections.md)。

以下是編目程式支援的驅動程式版本：


| 產品 | 編目程式支援的驅動程式 | 
| --- | --- | 
| PostgreSQL | 42.2.1 | 
| Amazon Aurora | 與原生編目程式驅動程式相同 | 
| MariaDB | 8.0.13 | 
| Microsoft SQL Server | 6.1.0 | 
| MySQL | 8.0.13 | 
| Oracle | 11.2.2 | 
| Amazon Redshift | 4.1 | 
| Snowflake | 3.13.20 | 
| MongoDB | 4.7.2 | 
| MongoDB Atlas | 4.7.2 | 

以下是有關各種資料存放區的注意事項。

**Amazon S3**  
您可以選擇在您的帳戶或在另一個帳戶網路爬取路徑。如果資料夾中的所有 Amazon S3 檔案都具有相同的結構描述，爬蟲程式就會建立一個資料表。此外，如果 Amazon S3 物件已分割，則只會建立一個中繼資料資料表，並將分割資訊新增到該資料表的 Data Catalog 。

**Amazon S3 和 Amazon DynamoDB**  
爬蟲程式使用 AWS Identity and Access Management (IAM) 角色來取得存取資料存放區的許可。*您傳遞至爬蟲程式的角色必須擁有許可，才能存取已抓取的 Amazon S3 路徑和 Amazon DynamoDB 資料表*。

**Amazon DynamoDB**  
使用 AWS Glue 主控台定義爬蟲程式時，需指定一個 DynamoDB 資料表。若您是使用 AWS Glue API，可指定資料表清單。您可以選擇只網路爬取一小部分的資料範例，以減少爬蟲程式的執行時間。

**Delta Lake**  
針對每個 Delta Lake 資料存放區，請指定如何建立 Delta 資料表：  
+ **建立原生資料表**：允許與支援直接查詢 Delta 交易日誌的查詢引擎整合。如需詳細資訊，請參閱[查詢 Delta Lake 資料表](https://docs.aws.amazon.com/athena/latest/ug/delta-lake-tables.html)。
+ **建立符號連結資料夾**：根據特定組態參數，使用由分割區索引鍵分割的資訊清單檔案建立 `_symlink_manifest` 資料夾。

**Iceberg**  
對於每個 Iceberg 資料存放區，您可以指定包含 Iceberg 資料表中繼資料的 Amazon S3 路徑。如果爬蟲程式發現 Iceberg 資料表中繼資料，其會在資料目錄中註冊該中繼資料。您可以為爬蟲程式設定排程，讓資料表持續更新。  
您可以為資料存放區定義下列參數：  
+ **排除**：可讓您略過某些資料夾。
+ **周遊深度上限**：設定爬蟲程式可在 Amazon S3 儲存貯體中爬取的深度限制。預設的周遊深度上限為 10，而您可以設定的深度上限為 20。

**Hudi**  
對於每個 Hudi 資料存放區，您可以指定包含 Hudi 資料表中繼資料的 Amazon S3 路徑。如果爬蟲程式發現 Hudi 資料表中繼資料，其會在資料目錄中註冊該中繼資料。您可以為爬蟲程式設定排程，讓資料表持續更新。  
您可以為資料存放區定義下列參數：  
+ **排除**：可讓您略過某些資料夾。
+ **周遊深度上限**：設定爬蟲程式可在 Amazon S3 儲存貯體中爬取的深度限制。預設的周遊深度上限為 10，而您可以設定的深度上限為 20。
由於與 Hudi 0.13.1 和時間戳記類型不相容，邏輯類型為 `millis` 的時間戳記資料欄將解譯為 `bigint`。即將發布的 Hudi 版本中可能會提供解決方案。
Hudi 資料表的分類如下，每個資料表都具有特定的含義：  
+ 寫入時複製 (CoW)：資料會以單欄式格式 (Parquet) 存放，每次更新都會在寫入期間建立新版檔案。
+ 讀取時合併 (MoR)：資料的存放是使用單欄式格式 (Parquet) 和以資料列為基礎的格式 (Avro) 組合進行。更新會記錄到以資料列為基礎的 delta 檔案，並視需要壓縮以建立新版本的直欄式檔案。
使用 CoW 資料集，每次有記錄進行更新時，包含記錄的檔案就會以更新的值重寫。若使用 MoR 資料集，每次有更新時，Hudi 只會寫入已變更之記錄的資料行。MoR 更適合較少讀取，而寫入或變更較繁重的工作負載。CoW 更適合資料變更較不頻繁，而讀取作業較為繁重的工作負載。  
Hudi 提供三個可用於資料存取的查詢類型：  
+ 快照查詢：查詢會查看截至指定遞交或壓縮動作之資料表的最新快照。對於 MoR 資料表，快照查詢會公開資料表的最新狀態，方法是合併查詢時最新檔案切片的基底和 delta 檔案。
+ 增量查詢：查詢只會看到自指定遞交/壓縮以來在資料表中寫入的新資料。這會有效地提供變更串流，以啟用增量資料管道。
+ 讀取最佳化查詢：對於 MoR 資料表，查詢會看到壓縮的最新資料。對於 CoW 資料表，查詢會看到遞交的最新資料。
對於寫入時複製資料表，爬蟲程式會使用 ReadOptimized serde `org.apache.hudi.hadoop.HoodieParquetInputFormat`，在資料目錄中建立單一資料表。  
對於「讀取時合併」資料表，爬蟲程式會在資料目錄中為相同的資料表位置建立兩個資料表：  
+ 尾碼為 `_ro` 的資料表，使用 ReadOptimized serde `org.apache.hudi.hadoop.HoodieParquetInputFormat`。
+ 尾碼為 `_rt` 的資料表，使用允許快照查詢的 RealTime Serde：`org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat`。

**MongoDB 和 Amazon DocumentDB (with MongoDB compatibility)**  
支援 MongoDB 3.2 版和更新版本。您可以選擇只網路爬取一小部分的資料範例，以減少爬蟲程式的執行時間。

**關聯式資料庫**  
身分驗證是使用資料庫使用者名稱和密碼。根據資料庫引擎的類型，您可以選擇要探索哪些物件 (例如資料庫、結構描述和資料表)。

**Snowflake**  
Snowflake JDBC 爬蟲程式支援網路爬取資料表、外部資料表、視觀表以及具體化視觀表。不會填入具體化視觀表定義。  
對於 Snowflake 外部資料表，爬蟲程式只有在指向 Amazon S3 位置時才會進行網路爬取。除了資料表結構描述，爬蟲程式還會網路爬取 Amazon S3 位置、檔案格式和作為 Data Catalog 資料表中資料表參數的輸出內容。請注意，不會填入已分割外部資料表的分割區資訊。  
使用 Snowflake 爬蟲程式建立的 Data Catalog 資料表目前不支援 ETL。

# 爬蟲程式的先決條件
<a name="crawler-prereqs"></a>

爬蟲程式會擔任您在定義角色時指定的 AWS Identity and Access Management (IAM) 角色許可。這個 IAM 角色必須具有許可，來從您的資料存放區擷取資料，以及將資料寫入至 Data Catalog 。AWS Glue 主控台只會列出已經連接 AWS Glue 主要服務適用信任政策的 IAM 角色。從主控台，您也可以建立 IAM 角色與 IAM 政策，以存取爬蟲程式所存取的 Amazon S3 資料存放區。如需為 AWS Glue 提供角色的詳細資訊，請參閱 [Glue AWS 的身分型政策](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies)。

**注意**  
網路爬取 Delta Lake 資料儲存時，您必須擁有讀/寫 Amazon S3 位置的權限。

對於爬蟲程式，您可以建立角色並連接下列政策：
+ `AWSGlueServiceRole` AWS 受管政策，授予 Data Catalog 所需的許可
+ 授予資料來源許可的內嵌政策。
+ 授予角色 `iam:PassRole` 許可的內嵌政策。

更快的方法是讓 AWS Glue 主控台爬蟲程式精靈為您建立角色。其建立的角色專門用於爬蟲程式，並包含 `AWSGlueServiceRole` AWS 受管政策加上指定資料來源所需的內嵌政策。

如果您指定爬蟲程式的現有角色，請確定它包含 `AWSGlueServiceRole` 政策或同等政策 (或此政策的範圍縮減版本)，以及必要的內嵌政策。例如，對於 Amazon S3 資料存放區，內嵌政策至少需要如下：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```

------

對於 Amazon DynamoDB 資料存放區，政策至少需要如下：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:111122223333:table/table-name*"
      ]
    }
  ]
}
```

------

此外，如果爬蟲程式讀取 AWS Key Management Service (AWS KMS) 加密的 Amazon S3 資料，則 IAM 角色必須具有 AWS KMS 金鑰的解密許可。如需詳細資訊，請參閱[步驟 2：為 AWS Glue 建立 IAM 角色](create-an-iam-role.md)。

# 定義和管理分類器
<a name="add-classifier"></a>

分類器讀取資料存放區中的資料。如果它能辨識資料的格式，將會產生結構描述。分類器也會傳回一個確定數字以表示所識別格式的確定程度。

AWS Glue 提供一組內建分類器，但您也可以建立自訂分類器。AWS Glue 會先依照您在爬蟲程式定義中指定的順序叫用自訂分類器。根據從自訂分類器傳回的結果，AWS Glue 也可能叫用內建分類器。如果分類器在處理期間傳回 `certainty=1.0`，表示它 100% 確定可以建立正確的結構描述。然後，AWS Glue 將使用此分類器的輸出。

如果沒有分類器傳回 `certainty=1.0`，AWS Glue 將使用確定程度最高的分類器的輸出。如果沒有分類器傳回大於 `0.0` 的確定程度，AWS Glue 將傳回預設的分類字串 `UNKNOWN`。

## 我應該在何時使用分類器？
<a name="classifier-when-used"></a>

當您在 AWS Glue Data Catalog中探索資料存放區以定義中繼資料資料表時，可使用分類器。您可以用一組已排序的分類器來設定您的爬蟲程式。當爬蟲程式叫用分類器時，分類器會判斷資料是否能夠辨識。如果分類器無法識別資料或無法 100% 確定，爬蟲程式將叫用清單中的下一個分類器，以判斷它是否能夠識別資料。

 如需使用 AWS Glue 主控台建立分類器的詳細資訊，請參閱[使用 AWS Glue 主控台建立分類器](console-classifiers.md)。

## 自訂分類器
<a name="classifier-defining"></a>

分類器的輸出包含一個字串，它會指出檔案的分類或格式 (例如，`json`) 以及檔案結構描述。對於自訂分類器，您可以根據分類器的類型，定義建立結構描述的邏輯。分類器類型包括根據 grok 模式、XML 標籤以及 JSON 路徑定義結構描述。

如果您變更分類器定義，之前使用分類器探索的任何資料將不會重新分類。爬蟲程式會持續追蹤之前探索的資料。會使用更新分類器來分類新資料，這可能會更新結構描述。如果資料的結構描述擴張，則於爬蟲程式執行時將分類器更新到任何結構描述變更的帳戶。若要重新分類資料以更正不正確的分類器，請使用更新的分類器建立新爬蟲程式。

如需在 AWS Glue 中建立自訂分類器的詳細資訊，請參閱[為各種資料格式撰寫自訂分類器](custom-classifier.md)。

**注意**  
如果您的資料格式能夠由內建分類器之一加以辨識，您將無需建立自訂分類器。

## 內建分類器
<a name="classifier-built-in"></a>

 AWS Glue 提供各種格式的內建分類器，包括 JSON、CSV、Web 日誌，以及許多資料庫系統。

如果 AWS Glue 找不到能 100% 確定符合輸入資料格式的自訂分類器，將會依照下表所列順序叫用內建分類器。內建分類器傳回結果，指出格式是否符合 (`certainty=1.0`) 或不符合 (`certainty=0.0`)。第一個具有 `certainty=1.0` 的分類器將為 Data Catalog 的中繼資料資料表提供分類字串和結構描述。


| 分類器類型 | 分類字串 | 備註 | 
| --- | --- | --- | 
| Apache Avro | avro | 讀取檔案開頭的結構描述以判斷格式。 | 
| Apache ORC | orc | 讀取檔案中繼資料以判斷格式。 | 
| Apache Parquet | parquet | 讀取檔案結尾的結構描述以判斷格式。 | 
| JSON | json | 讀取檔案的開頭以判斷格式。 | 
| Binary JSON | bson | 讀取檔案的開頭以判斷格式。 | 
| XML | xml | 讀取檔案的開頭以判斷格式。AWS Glue 根據文件中的 XML 標籤來判斷資料表結構描述。 如需建立自訂 XML 分類器以指定文件中的列的詳細資訊，請參閱 [撰寫 XML 自訂分類器](custom-classifier.md#custom-classifier-xml)。 | 
| Amazon Ion | ion | 讀取檔案的開頭以判斷格式。 | 
| 結合的 Apache 日誌 | combined\$1apache | 透過 grok 模式決定日誌格式。 | 
| Apache 日誌 | apache | 透過 grok 模式決定日誌格式。 | 
| Linux 核心日誌 | linux\$1kernel | 透過 grok 模式決定日誌格式。 | 
| Microsoft 日誌 | microsoft\$1log | 透過 grok 模式決定日誌格式。 | 
| Ruby 日誌 | ruby\$1logger | 讀取檔案的開頭以判斷格式。 | 
| Squid 3.x 日誌 | squid | 讀取檔案的開頭以判斷格式。 | 
| Redis 監控日誌 | redismonlog | 讀取檔案的開頭以判斷格式。 | 
| Redis 日誌 | redislog | 讀取檔案的開頭以判斷格式。 | 
| CSV | csv | 檢查以下分隔符號：逗號 (,)、直立線符號 (\$1)、Tab (\$1t)、分號 (;) 和 Ctrl-A (\$1u0001)。Ctrl-A 為 Start Of Heading 的 Unicode 控制字元。 | 
| Amazon Redshift | redshift | 使用 JDBC 連線來匯入中繼資料。 | 
| MySQL | mysql | 使用 JDBC 連線來匯入中繼資料。 | 
| PostgreSQL | postgresql | 使用 JDBC 連線來匯入中繼資料。 | 
| Oracle 資料庫 | oracle | 使用 JDBC 連線來匯入中繼資料。 | 
| Microsoft SQL Server | sqlserver | 使用 JDBC 連線來匯入中繼資料。 | 
| Amazon DynamoDB | dynamodb | 從 DynamoDB 資料表讀取資料。 | 

可分類以下壓縮格式的檔案：
+ ZIP (僅包含單一檔案的封存可支援)。請注意，Zip 在其他服務中並未完整支援 (因為封存的關係)。
+ BZIP
+ GZIP
+ LZ4
+ Snappy (支援標準和 Hadoop 原生 Snappy 格式)

### 內建 CSV 分類器
<a name="classifier-builtin-rules"></a>

內建 CSV 分類器會剖析 CSV 檔案內容，以判斷 AWS Glue 資料表的結構描述。此分類器會檢查以下分隔符號：
+ 逗號 (,)
+ 管道 (\$1)
+ Tab (\$1t)
+ 分號 (;)
+ Ctrl-A (\$1u0001)

  Ctrl-A 為 `Start Of Heading` 的 Unicode 控制字元。

若要被歸類為 CSV，資料表結構描述必須至少有兩個資料欄和兩個資料列。CSV 分類器使用多種啟發，以判斷在特定檔案中標頭是否存在。如果分類器無法判斷第一列資料的標頭，欄標頭會顯示為 `col1`、`col2`、`col3`，以此類推。內建 CSV 分類器會透過評估檔案的以下特點判斷是否要推斷標頭：
+ 在潛在標頭中的每個欄位剖析為 STRING 資料類型。
+ 除了最後一個欄位，每個在潛在標頭中內容少於 150 個字元的欄位。若要允許結尾為分隔符號，整個檔案的最後一個欄位可以是空的。
+ 在潛在標頭中的每個欄必須符合欄位名稱的 AWS Glue `regex` 要求。
+ 標頭資料列必須與資料列有足夠的差異。若要判斷此項目，一或多個資料列必須剖析為其他 STRING 類型。如果所有欄位的類型為 STRING，則第一列資料與用做為標頭的後續資料列的差異不足夠。

**注意**  
如果內建的 CSV 分類器無法如您想要地建立 AWS Glue 資料表，您可以使用以下其中一個替代選項：  
變更在 Data Catalog 中的欄名稱，將 `SchemaChangePolicy` 設定為 LOG，並將分區輸出配置設定為 `InheritFromTable` 以供未來爬蟲程式執行使用。
建立自訂 grok 分類器來剖析資料並指派您想要的欄。
內建 CSV 分類器會建立資料表，參考 `LazySimpleSerDe` 做為序列化的程式庫，這是類型推導的最佳選擇。不過，如果 CSV 資料包含引用字串，編輯資料表定義並將 SerDe 程式庫變更為 `OpenCSVSerDe`。將任何推導類型調整為 STRING，將 `SchemaChangePolicy` 設定為 LOG，並將分區輸出配置設定為 `InheritFromTable` 以供未來爬蟲程式執行使用。如需 SerDe 程式庫的更多資訊，請參閱《Amazon Athena 使用者指南》中的 [SerDe 參考](https://docs.aws.amazon.com/athena/latest/ug/serde-reference.html)。

# 為各種資料格式撰寫自訂分類器
<a name="custom-classifier"></a>

您可以提供自訂分類器，分類在 AWS Glue中的資料。您可以使用 grok 模式、XML 標籤、JavaScript Object 符號 (JSON) 或逗號分隔值 (CSV)，建立自訂分類器。AWS Glue 爬蟲程式呼叫自訂分類器。如果分類器能夠辨識資料，它會將資料的分類和結構描述傳回爬蟲程式。如果您的資料不符合任何內建的分類器，或者想要自訂由爬蟲程式建立的資料表，那麼您可能需要定義自訂分類器。

 如需使用 AWS Glue 主控台建立分類器的詳細資訊，請參閱[使用 AWS Glue 主控台建立分類器](console-classifiers.md)。

AWS Glue 會依照您指定的順序，在內建的分類器之前執行自訂分類器。當爬蟲程式找到符合資料的分類器時，分類字串和結構描述將用於資料表的定義中，這些資料表將寫入至您的 AWS Glue Data Catalog。

**Topics**
+ [撰寫 grok 自訂分類器](#custom-classifier-grok)
+ [撰寫 XML 自訂分類器](#custom-classifier-xml)
+ [撰寫 JSON 自訂分類器](#custom-classifier-json)
+ [撰寫 CSV 自訂分類器](#custom-classifier-csv)

## 撰寫 grok 自訂分類器
<a name="custom-classifier-grok"></a>

Grok 是一種工具，用於剖析指定相符模式的文字資料。grok 模式是一組命名規則表達式 (regex)， 用於每次比對一行。AWS Glue 使用 grok 模式來推斷資料的結構描述。當 grok 模式符合您的資料時，AWS Glue 將使用此模式判斷您資料的結構，並將其映射到欄位。

AWS Glue 提供許多內建模式，或者您可以定義自己的模式。您可以在自訂分類器定義中使用內建模式和自訂模式來建立 grok 模式。您可以量身打造 grok 模式來分類自訂文字檔案格式。

**注意**  
針對 AWS Glue Data Catalog中建立的資料表，AWS Glue Grok 自訂分類器會使用 `GrokSerDe` 序列化程式庫。如果您將 AWS Glue Data Catalog 與 Amazon Athena、Amazon EMR 或 Redshift Spectrum 搭配使用，請查看這些服務的文件，以取得 支援的相關資訊`GrokSerDe`。目前，當您從 Amazon EMR 和 Redshift 查詢利用 `GrokSerDe` 建立的資料表時，可能會遇到問題。

以下是 grok 模式元件的基本語法：

```
%{PATTERN:field-name}
```

符合具名的 `PATTERN` 的資料會映射到結構描述中的 `field-name` 欄位符合，預設資料類型為 `string`。除此之外，您亦可選擇在產生的結構描述中，將欄位的資料類型轉換為 `byte`、`boolean`、`double`、`short`、`int`、`long` 或 `float`。

```
%{PATTERN:field-name:data-type}
```

例如，若要將 `num` 欄位轉換為 `int` 資料類型，您可以使用此模式：

```
%{NUMBER:num:int}
```

模式可由其他模式組成。舉例而言，您可使用月、日及時間的模式來定義 `SYSLOG` 時間戳記的模式 (例如 `Feb 1 06:25:43`)。您能夠使用下列模式來定義此資料：

```
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
```

**注意**  
Grok 模式每次只能處理一行。不支援多行模式。此外，不支援在模式中的換行。

### grok 分類器的自訂值
<a name="classifier-values"></a>

定義 grok 分類器時，請提供以下值以建立自訂分類器。

**名稱**  
分類器名稱。

**分類**  
寫入的字串用於描述分類資料的格式；例如 `special-logs`。

**Grok 模式**  
套用到資料存放區的一組模式可判斷是否符合。這些模式皆來自 AWS Glue [ 內建模式](#classifier-builtin-patterns)，以及您所定義的任何自訂模式。  
以下為 grok 模式的範例：  

```
%{TIMESTAMP_ISO8601:timestamp} \[%{MESSAGEPREFIX:message_prefix}\] %{CRAWLERLOGLEVEL:loglevel} : %{GREEDYDATA:message}
```
當資料符合 `TIMESTAMP_ISO8601`，將會建立結構描述欄位 `timestamp`。此行為類似範例中的其他具名模式。

**自訂模式**  
您定義的選用自訂模式。分類您的資料的 grok 模式會參考這些模式。您可以在套用至您資料的 grok 模式中參考這些自訂模式。每個自訂元件模式都必須位於不同的行。[規則表達式 (regex)](http://en.wikipedia.org/wiki/Regular_expression) 語法可用來定義模式。  
以下是使用指定模式的範例：  

```
CRAWLERLOGLEVEL (BENCHMARK|ERROR|WARN|INFO|TRACE)
MESSAGEPREFIX .*-.*-.*-.*-.*
```
當資料符合其中一個列舉字串時，第一個自訂具名模式 `CRAWLERLOGLEVEL` 即為相符。第二個自訂模式 `MESSAGEPREFIX` 嘗試符合訊息字首字串。

AWS Glue 追蹤建立時間、上次更新時間和您的分類器版本。

### 內建模式
<a name="classifier-builtin-patterns"></a>

AWS Glue 提供許多常見的模式，您可用來建立自訂分類器。您將一個具名模式新增到分類器定義中的 `grok pattern`。

以下清單包含各個模式的一行。在每一行中，模式名稱之後是它的定義。[規則表達式 (regex)](http://en.wikipedia.org/wiki/Regular_expression) 語法可用來定義模式。

```
#<noloc>&GLU;</noloc> Built-in patterns
 USERNAME [a-zA-Z0-9._-]+
 USER %{USERNAME:UNWANTED}
 INT (?:[+-]?(?:[0-9]+))
 BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
 NUMBER (?:%{BASE10NUM:UNWANTED})
 BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
 BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
 BOOLEAN (?i)(true|false)
 
 POSINT \b(?:[1-9][0-9]*)\b
 NONNEGINT \b(?:[0-9]+)\b
 WORD \b\w+\b
 NOTSPACE \S+
 SPACE \s*
 DATA .*?
 GREEDYDATA .*
 #QUOTEDSTRING (?:(?<!\\)(?:"(?:\\.|[^\\"])*"|(?:'(?:\\.|[^\\'])*')|(?:`(?:\\.|[^\\`])*`)))
 QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
 UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
 
 # Networking
 MAC (?:%{CISCOMAC:UNWANTED}|%{WINDOWSMAC:UNWANTED}|%{COMMONMAC:UNWANTED})
 CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
 WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
 COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
 IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
 IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
 IP (?:%{IPV6:UNWANTED}|%{IPV4:UNWANTED})
 HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-_]{0,62}))*(\.?|\b)
 HOST %{HOSTNAME:UNWANTED}
 IPORHOST (?:%{HOSTNAME:UNWANTED}|%{IP:UNWANTED})
 HOSTPORT (?:%{IPORHOST}:%{POSINT:PORT})
 
 # paths
 PATH (?:%{UNIXPATH}|%{WINPATH})
 UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+
 #UNIXPATH (?<![\w\/])(?:/[^\/\s?*]*)+
 TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
 WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
 URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
 URIHOST %{IPORHOST}(?::%{POSINT:port})?
 # uripath comes loosely from RFC1738, but mostly from what Firefox
 # doesn't turn into %XX
 URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
 #URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
 URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
 URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
 URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
 
 # Months: January, Feb, 3, 03, 12, December
 MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
 MONTHNUM (?:0?[1-9]|1[0-2])
 MONTHNUM2 (?:0[1-9]|1[0-2])
 MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
 
 # Days: Monday, Tue, Thu, etc...
 DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
 
 # Years?
 YEAR (?>\d\d){1,2}
 # Time: HH:MM:SS
 #TIME \d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?
 # TIME %{POSINT<24}:%{POSINT<60}(?::%{POSINT<60}(?:\.%{POSINT})?)?
 HOUR (?:2[0123]|[01]?[0-9])
 MINUTE (?:[0-5][0-9])
 # '60' is a leap second in most time standards and thus is valid.
 SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
 TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
 # datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
 DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
 DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
 DATESTAMP_US %{DATE_US}[- ]%{TIME}
 DATESTAMP_EU %{DATE_EU}[- ]%{TIME}
 ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
 ISO8601_SECOND (?:%{SECOND}|60)
 TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
 TZ (?:[PMCE][SD]T|UTC)
 DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
 DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
 DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
 DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
 CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
 
 # Syslog Dates: Month Day HH:MM:SS
 SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
 PROG (?:[\w._/%-]+)
 SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
 SYSLOGHOST %{IPORHOST}
 SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
 HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
 
 # Shortcuts
 QS %{QUOTEDSTRING:UNWANTED}
 
 # Log formats
 SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
 
 MESSAGESLOG %{SYSLOGBASE} %{DATA}
 
 COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{Bytes:bytes=%{NUMBER}|-})
 COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
 COMMONAPACHELOG_DATATYPED %{IPORHOST:clientip} %{USER:ident;boolean} %{USER:auth} \[%{HTTPDATE:timestamp;date;dd/MMM/yyyy:HH:mm:ss Z}\] "(?:%{WORD:verb;string} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion;float})?|%{DATA:rawrequest})" %{NUMBER:response;int} (?:%{NUMBER:bytes;long}|-)
 
 
 # Log Levels
 LOGLEVEL ([A|a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
```

## 撰寫 XML 自訂分類器
<a name="custom-classifier-xml"></a>

XML 會利用檔案中的標籤來定義文件的結構。使用 XML 自訂分類器，您可以指定用來定義一個列的標籤名稱。

### XML 分類器的自訂分類器值
<a name="classifier-values-xml"></a>

當您定義 XML 分類器時，您將以下值提供至 AWS Glue 以建立分類器。此分類器的分類欄位設定為 `xml`。

**名稱**  
分類器名稱。

**Row 標籤**  
在 XML 文件中用於定義資料表列的 XML 標籤名稱，不含角括號 `< >`。此名稱必須符合 XML 的標籤規則。  
包含列資料的元素**不得**為自我封閉的空元素。舉例而言，** **不會AWS Glue剖析此空元素：  

```
            <row att1=”xx” att2=”yy” />  
```
 空元素可撰寫如下：  

```
            <row att1=”xx” att2=”yy”> </row> 
```

AWS Glue 追蹤建立時間、上次更新時間和您的分類器版本。

例如，假設您擁有以下 XML 檔案。若要建立僅含有作者和標題的 AWS Glue 資料表，請在 AWS Glue 主控台中以 **Row 標籤**做為 `AnyCompany` 來建立分類器。接著，新增並執行採用此自訂分類器的爬蟲程式即可。

```
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
     <AnyCompany>
       <author>Rivera, Martha</author>
       <title>AnyCompany Developer Guide</title>
     </AnyCompany>
   </book>
   <book id="bk102">
     <AnyCompany>   
       <author>Stiles, John</author>
       <title>Style Guide for AnyCompany</title>
     </AnyCompany>
   </book>
</catalog>
```

## 撰寫 JSON 自訂分類器
<a name="custom-classifier-json"></a>

JSON 是資料交換格式。它定義資料結構與名稱值組或值的排序清單。使用 JSON 自訂分類器時，您可以指定資料結構的 JSON 路徑，以用於定義資料表的結構描述。

### AWS Glue 中的自訂分類器值
<a name="classifier-values-json"></a>

當您定義 JSON 分類器時，您將以下值提供至 AWS Glue 以建立分類器。此分類器的分類欄位設定為 `json`。

**名稱**  
分類器名稱。

**JSON 路徑**  
JSON 路徑會指向用來定義資料表結構描述的物件。您可以用點標記法或括號標記法來撰寫 JSON 路徑。以下是支援的運算子：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/custom-classifier.html)

AWS Glue 追蹤建立時間、上次更新時間和您的分類器版本。

**Example 使用 JSON 分類器從陣列中提取記錄**  
此處會假設您的 JSON 資料是一系列的記錄。舉例來說，檔案的前面幾行可能如下所示：  

```
[
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ak",
    "name": "Alaska"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:1",
    "name": "Alabama's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:2",
    "name": "Alabama's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:3",
    "name": "Alabama's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:4",
    "name": "Alabama's 4th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:5",
    "name": "Alabama's 5th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:6",
    "name": "Alabama's 6th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:al\/cd:7",
    "name": "Alabama's 7th congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:1",
    "name": "Arkansas's 1st congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:2",
    "name": "Arkansas's 2nd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:3",
    "name": "Arkansas's 3rd congressional district"
  },
  {
    "type": "constituency",
    "id": "ocd-division\/country:us\/state:ar\/cd:4",
    "name": "Arkansas's 4th congressional district"
  }
]
```
透過內建 JSON 分類器執行爬蟲程式時，即可將整個檔案用來定義結構描述。因為您尚未 JSON 路徑，該爬蟲程式會將資料視為一個物件，亦即只是一個陣列。例如，結構描述看起來類似如下：  

```
root
|-- record: array
```
然而，若要在 JSON 陣列中根據每個記錄建立結構描述，請建立自訂 JSON 分類器並指定 JSON 路徑為 `$[*]`。當您指定此 JSON 路徑時，分類器會詢問陣列中的 12 筆記錄以判斷結構描述。產生的結構描述將包含各個物件的獨立欄位，如以下範例所示：  

```
root
|-- type: string
|-- id: string
|-- name: string
```

**Example 使用 JSON 分類器僅檢查檔案的部分**  
此處假設 JSON 資料會遵循範例 JSON 檔案 `s3://awsglue-datasets/examples/us-legislators/all/areas.json` 的模式，該檔案取自 [http://everypolitician.org/](http://everypolitician.org/)。JSON 檔案中的範例物件看起來會像下述內容：  

```
{
  "type": "constituency",
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
{
  "type": "constituency",
  "identifiers": [
    {
      "scheme": "dmoz",
      "identifier": "Regional\/North_America\/United_States\/Alaska\/"
    },
    {
      "scheme": "freebase",
      "identifier": "\/m\/0hjy"
    },
    {
      "scheme": "fips",
      "identifier": "US02"
    },
    {
      "scheme": "quora",
      "identifier": "Alaska-state"
    },
    {
      "scheme": "britannica",
      "identifier": "place\/Alaska"
    },
    {
      "scheme": "wikidata",
      "identifier": "Q797"
    }
  ],
  "other_names": [
    {
      "lang": "en",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "fr",
      "note": "multilingual",
      "name": "Alaska"
    },
    {
      "lang": "nov",
      "note": "multilingual",
      "name": "Alaska"
    }
  ],
  "id": "ocd-division\/country:us\/state:ak",
  "name": "Alaska"
}
```
透過內建 JSON 分類器執行爬蟲程式時，即可將整個檔案用來建立結構描述。您得到的結構描述可能類似：  

```
root
|-- type: string
|-- id: string
|-- name: string
|-- identifiers: array
|    |-- element: struct
|    |    |-- scheme: string
|    |    |-- identifier: string
|-- other_names: array
|    |-- element: struct
|    |    |-- lang: string
|    |    |-- note: string
|    |    |-- name: string
```
不過，您必須建立自訂 JSON 分類器並將 JSON 路徑指定為 `id`，才能僅使用「`$.id`」物件建立結構描述。如此一來，系統僅會依據「`id`」欄位來產生結構描述：  

```
root
|-- record: string
```
使用此結構描述所擷取的前幾行資料如下所示：  

```
{"record": "ocd-division/country:us/state:ak"}
{"record": "ocd-division/country:us/state:al/cd:1"}
{"record": "ocd-division/country:us/state:al/cd:2"}
{"record": "ocd-division/country:us/state:al/cd:3"}
{"record": "ocd-division/country:us/state:al/cd:4"}
{"record": "ocd-division/country:us/state:al/cd:5"}
{"record": "ocd-division/country:us/state:al/cd:6"}
{"record": "ocd-division/country:us/state:al/cd:7"}
{"record": "ocd-division/country:us/state:ar/cd:1"}
{"record": "ocd-division/country:us/state:ar/cd:2"}
{"record": "ocd-division/country:us/state:ar/cd:3"}
{"record": "ocd-division/country:us/state:ar/cd:4"}
{"record": "ocd-division/country:us/state:as"}
{"record": "ocd-division/country:us/state:az/cd:1"}
{"record": "ocd-division/country:us/state:az/cd:2"}
{"record": "ocd-division/country:us/state:az/cd:3"}
{"record": "ocd-division/country:us/state:az/cd:4"}
{"record": "ocd-division/country:us/state:az/cd:5"}
{"record": "ocd-division/country:us/state:az/cd:6"}
{"record": "ocd-division/country:us/state:az/cd:7"}
```
若要根據 JSON 檔案中的深度巢狀物件 (例如「`identifier`」) 來建立結構描述，則可建立自訂 JSON 分類器並將 JSON 路徑指定為 `$.identifiers[*].identifier`。儘管產生的結構描述與先前範例類似，但它是依據 JSON 檔案中不同的物件建立而成。  
結構描述看起來類似如下：  

```
root
|-- record: string
```
若列出資料表的前面幾行，即會顯示以「`identifier`」物件中資料為基礎的結構描述：  

```
{"record": "Regional/North_America/United_States/Alaska/"}
{"record": "/m/0hjy"}
{"record": "US02"}
{"record": "5879092"}
{"record": "4001016-8"}
{"record": "destination/alaska"}
{"record": "1116270"}
{"record": "139487266"}
{"record": "n79018447"}
{"record": "01490999-8dec-4129-8254-eef6e80fadc3"}
{"record": "Alaska-state"}
{"record": "place/Alaska"}
{"record": "Q797"}
{"record": "Regional/North_America/United_States/Alabama/"}
{"record": "/m/0gyh"}
{"record": "US01"}
{"record": "4829764"}
{"record": "4084839-5"}
{"record": "161950"}
{"record": "131885589"}
```
您可以建立自訂 JSON 分類器並將 JSON 路徑指定為 `$.other_names[*].name`，藉此根據 JSON 檔案中其他深度巢狀物件 (例如「`other_names`」陣列中的「`name`」欄位) 來建立資料表。儘管產生的結構描述與先前範例類似，但它是依據 JSON 檔案中不同的物件建立而成。結構描述看起來類似如下：  

```
root
|-- record: string
```
若列出資料表的前面幾行，即會顯示以「`name`」陣列中「`other_names`」物件資料為基礎的結構描述：  

```
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "ألاسكا"}
{"record": "ܐܠܐܣܟܐ"}
{"record": "الاسكا"}
{"record": "Alaska"}
{"record": "Alyaska"}
{"record": "Alaska"}
{"record": "Alaska"}
{"record": "Штат Аляска"}
{"record": "Аляска"}
{"record": "Alaska"}
{"record": "আলাস্কা"}
```

## 撰寫 CSV 自訂分類器
<a name="custom-classifier-csv"></a>

 自訂 CSV 分類器可讓您在自訂 csv 分類器欄位中為每一欄指定資料類型。您可以指定每欄的資料類型，用逗號分隔。透過指定資料類型，您可以覆寫爬蟲程式推斷的資料類型，並確保資料將適當地分類。

您可以在該分類器中設定用於處理 CSV 的 SerDe，並且將在資料目錄中套用該 SerDe。

當您建立自訂分類器時，您也可以針對不同的爬蟲程式重複使用分類器。
+  對於只有標題 (沒有資料) 的 csv 檔案，這些檔案將被分類為 UNKNOWN，因為沒有提供足夠的資訊。如果您在 *Column headings* (欄位標題) 中指定 CSV「具有標題」，並提供資料類型，我們可以正確地對這些檔案進行分類。

您可以使用自訂 CSV 分類器來推論各種 CSV 資料類型的結構描述。您可以為分類器提供的自訂屬性包含分隔符號、CSV SerDe 選項、標頭相關選項，以及是否要對資料執行特定驗證。

### AWS Glue 中的自訂分類器值
<a name="classifier-values-csv"></a>

當定義 CSV 分類器時，您要將下列值提供至 AWS Glue 以便建立分類器。此分類器的分類欄位設定為 `csv`。

**分類器名稱**  
分類器名稱。

**CSV SerDe**  
設定用於在分類器中處理 CSV 的 SerDe，並且將在資料目錄中套用該 Serde。選項有「開放式 CSV SerDe」、「延遲簡易 SerDe」和「無」。當您希望爬蟲程式執行偵測時，您可以指定「無」值。

**欄位分隔符號**  
表示用於分隔資料列中每個欄位項目的自訂符號。提供 Unicode 字元。如果無法輸入分隔符號，您可以複製並貼上它。這個方式適用於可列印字元，包括系統不支援的字元 (通常顯示為 □)。

**引號符號**  
用來表示將內容結合成單一欄位值的自訂符號。必須不同於欄位分隔符號。提供 Unicode 字元。如果無法輸入分隔符號，您可以複製並貼上它。這個方式適用於可列印字元，包括系統不支援的字元 (通常顯示為 □)。

**欄位標題**  
指示在 CSV 檔案中應如何偵測出欄位標題的行為。如果您的自訂 CSV 檔案包含欄位標題，請輸入以逗號分隔的欄位標題清單。

**處理選項：允許檔案包含單一欄位**  
啟用處理僅包含一個欄位的檔案。

**處理選項：裁剪空格後再識別欄位值**  
指定在確認欄位值類型之前是否要裁剪值。

**自訂資料類型 - *選用***  
 輸入以逗號分隔的自訂資料類型。指定 CSV 檔案中的自訂資料類型。自訂資料類型必須是受支援的資料類型。支援的資料類型為："BINARY"、"BOOLEAN"、"DATE"、"DECIMAL"、"DOUBLE"、"FLOAT"、"INT"、"LONG"、"SHORT"、"STRING"、"TIMESTAMP"。不受支援的資料類型會顯示錯誤。

# 使用 AWS Glue 主控台建立分類器
<a name="console-classifiers"></a>

分類器可判斷資料的結構描述。您可以編寫自訂分類器並從 AWS Glue指向分類器。

## 建立分類器
<a name="add-classifier-console"></a>

若要在 AWS Glue 主控台新增分類器，請選擇 **Add classifier (新增分類器)**。定義分類器時，您提供以下值：
+ **分類器名稱** – 提供分類器的唯一名稱。
+ **分類器類型** – 此分類器推斷的資料表分類類型。
+ **上次更新** – 上一次更新此分類器的時間。

**分類器名稱**  
提供分類器的唯一名稱。

**分類器類型**  
選擇要建立之分類器的類型。

根據您選擇的分類器類型，設定下列分類器的屬性：

------
#### [ Grok ]
+ **分類** 

  描述分類資料的格式或類型，或提供自訂標籤。
+ **Grok 模式** 

  這是用於將資料剖析為結構化結構描述。grok 模式由描述資料存放區格式的具名模式組成。您使用 AWS Glue 提供的具名內建模式寫入此 grok 模式，自訂寫入的模式，並包含在 **Custom patterns (自訂模式)** 欄位內。雖然 grok 偵錯工具的結果可能不會完全符合 AWS Glue 的結果，我們建議您透過 grok 偵錯工具使用一些範例資料來嘗試模式。您可以從 Web 上找到 grok 偵錯工具。AWS Glue 提供的具名內建模式通常相容於 Web 上提供的 grok 模式。

  建置您的 grok 模式，反覆新增具名模式和在偵錯工具內檢查您的結果。此活動可讓您確信當 AWS Glue 爬蟲程式執行您的 grok 模式時，您的資料可以剖析。
+ **自訂模式** 

  對於 grok 分類器，這些是您編寫的 **Grok 模式**的選擇性建置區塊。內建的模式無法剖析您的資料時，您可能需要編寫自訂模式。這些自訂模式在此欄位中定義，且在 ** Grok 模式**欄位中參考。每個自訂模式都必須在不同的行定義。就如同內建的模式，它包含具名模式定義，使用[常規表達式 (regex)](http://en.wikipedia.org/wiki/Regular_expression) 的語法。

  例如，以下具有 `MESSAGEPREFIX` 名稱，接著是常規表達式定義，以套用到您的資料，判斷是否遵循模式。

  ```
  MESSAGEPREFIX .*-.*-.*-.*-.*
  ```

------
#### [ XML ]
+ **Row 標籤** 

  針對 XML 分類器，此為 XML 標籤名稱，定義 XML 文件中的資料表列。輸入類型的名稱，而不角括號 `< >`。此名稱必須符合 XML 的標籤規則。

  如需詳細資訊，請參閱[撰寫 XML 自訂分類器](custom-classifier.md#custom-classifier-xml)。

------
#### [ JSON ]
+ **JSON 路徑** 

  針對 JSON 分類器，此為連往物件、陣列或數值，定義所建立資料表之資料列的 JSON 物件。使用 AWS Glue 支援的運算子，以點或括號 JSON 語法輸入名稱。

  如需更多詳細資訊，請參閱 [撰寫 JSON 自訂分類器](custom-classifier.md#custom-classifier-json) 中的運算子清單。

------
#### [ CSV ]
+ **欄位分隔符號** 

  表示用於分隔資料列中每個欄位項目的單一字元或符號。從清單中選擇分隔符號，或選擇 `Other` 以輸入自訂分隔符號。
+ **引號符號** 

  用來表示將內容結合成單一欄位值的單一字元或符號。必須不同於欄位分隔符號。從清單中選擇引號，或選擇 `Other` 以輸入自訂引號字元。
+ **欄位標題** 

  指示在 CSV 檔案中應如何偵測出欄位標題的行為。您可以選擇 `Has headings`、`No headings` 或 `Detect headings`。如果您的自訂 CSV 檔案包含欄位標題，請輸入以逗號分隔的欄位標題清單。
+ **允許具有單一欄的檔案** 

  若要被歸類為 CSV，資料必須至少有兩個資料欄和兩個資料列。使用此選項可允許處理僅包含一欄的檔案。
+ **裁剪空格後再識別欄值** 

  此選項指定在確認欄位值類型之前是否要裁剪值。
+  **自訂資料類型** 

   (選用) - 在逗號分隔清單中輸入自訂資料類型。支援的資料類型為："BINARY"、"BOOLEAN"、"DATE"、"DECIMAL"、"DOUBLE"、"FLOAT"、"INT"、"LONG"、"SHORT"、"STRING"、"TIMESTAMP"。
+  **CSV Serde** 

   (選用)：用於在分類器中處理 CSV 的 SerDe，並且將在資料目錄中套用該 Serde。從 `Open CSV SerDe`、`Lazy Simple SerDe` 或 `None` 中選擇。您可以指定希望爬蟲程式執行偵測時的 `None` 值。

------

如需詳細資訊，請參閱[為各種資料格式撰寫自訂分類器](custom-classifier.md)。

## 檢視分類器
<a name="view-classifiers-console"></a>

若要查看您已建立的所有分類器的清單，請開啟位於 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) AWS Glue 主控台，然後選擇 **Classifiers (分類器)** 標籤。

清單顯示有關各分類器的下列屬性：
+ **分類器** - 分類器名稱。建立分類器時，您必須提供其名稱。
+ **分類** – 此分類器推斷的資料表分類類型。
+ **上次更新** – 上一次更新此分類器的時間。

## 管理分類器
<a name="manage-classifiers-console"></a>

您可以在 ** 主控台的 **ClassifiersAWS Glue (分類器) 清單中新增、編輯和刪除分類器。若要查看分類器的詳細資訊，請在清單中選擇分類器的名稱。詳細資訊包含您在建立分類器時所定義的資訊。

# 設定編目程式
<a name="define-crawler"></a>

編目程式會存取您的資料存放區、識別中繼資料，以及在 AWS Glue Data Catalog中建立資料表定義。 AWS Glue 主控台中的**爬蟲程式**窗格會列出您建立的所有爬蟲程式。該清單會針對爬蟲程式最近一次的執行作業，顯示其狀態與指標。

 本主題包含設定編目程式的逐步程序，涵蓋基本層面，例如設定編目程式的參數、定義要網路爬取的資料來源、設定安全性和管理網路爬取的資料。

**Topics**
+ [步驟 1：設定爬蟲程式屬性](define-crawler-set-crawler-properties.md)
+ [步驟 2：選擇資料來源和分類器](define-crawler-choose-data-sources.md)
+ [步驟 3：設定安全設定](define-crawler-configure-security-settings.md)
+ [步驟 4：設定輸出和排程](define-crawler-set-output-and-scheduling.md)
+ [步驟 4：檢閱和建立](define-crawler-review.md)

# 步驟 1：設定爬蟲程式屬性
<a name="define-crawler-set-crawler-properties"></a>

**設定編目程式**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\) 開啟 AWS Glue主控台。在導覽窗格中選擇 **Crawlers (爬蟲程式)**。

1.  選擇**建立爬蟲程式**，然後依照**新增爬蟲程式**精靈中的說明進行操作。精靈會引導您建立編目程式所需的步驟。如果您想要新增自訂分類器來定義結構描述，請參閱[定義和管理分類器](add-classifier.md)。

1.  輸入爬蟲程式的名稱和描述 (選用)。或者，您可以使用 **Tag key (標籤金鑰)** 和選用的 **Tag value (標籤值)**，標記您的爬蟲程式。建立之後，標籤金鑰為唯讀。應用標籤至某些資源，有助於您對其進行整理和識別。如需詳細資訊，請參閱 中的 AWS 標籤 AWS Glue。  
**名稱**  
名稱可包含字母 (A-Z)、數字 (0-9)、連字號 (-) 或底線 (\$1)，並且長度上限為 255 個字元。  
**Description**  
說明最多可有 2,048 個字元。  
**標籤**  
您可以使用標籤整理和識別資源。如需詳細資訊，請參閱下列內容：  
   + [AWS 中的標籤 AWS Glue](monitor-tags.md)

# 步驟 2：選擇資料來源和分類器
<a name="define-crawler-choose-data-sources"></a>

接著，設定編目程式的資料來源和分類器。

如需有關受支援資料來源的詳細資訊，請參閱[支援的網路爬取資料來源](crawler-data-stores.md)。

**資料來源組態**  
針對**您的資料是否已映射至 AWS Glue 資料表？**選取適當的選項：選擇「尚未」或「是」。依預設已選取「尚未」。  
爬蟲程式可以直接存取資料存放區做為抓取來源，也可以使用現有的 Data Catalog 資料表做為來源。如果爬蟲程式使用現有的目錄資料表，即會抓取這些目錄資料表指定的資料存放區。  
+ 尚未：選取一或多個要網路爬取的資料來源。爬蟲程式可以在單一執行中抓取多個不同類型的資料存放區 (Amazon S3,、JDBC 等)。

  您一次只可設定一個資料存放區。在您提供連線資訊並包含路徑和排除樣式之後，接著可以選擇加入其他資料存放區。
+ 是：從 AWS Glue Data Catalog 中選取現有資料表。指定要抓取之資料存放區的目錄資料表。爬蟲程式只能在單一執行中抓取目錄資料表，而無法混合其他來源類型。

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

  當您指定現有資料表做為爬蟲程式來源類型時，則適用以下條件：
  + 資料庫名稱是選用的。
  + 只允許指定 Amazon S3、Amazon DynamoDB 或 Delta Lake 資料存放區的目錄資料表。
  + 爬蟲程式執行時，不會建立任何新的目錄資料表。系統會視需要更新現有的資料表，包括新增新的分割區。
  + 系統會忽略資料存放區中找到的已刪除物件，而不會刪除任何目錄資料表。反之，爬蟲程式會寫入日誌訊息。(`SchemaChangePolicy.DeleteBehavior=LOG`)
  + 依預設，系統會啟用爬蟲程式組態選項以建立每個 Amazon S3 路徑的單一結構描述，且無法停用。(`TableGroupingPolicy`=`CombineCompatibleSchemas`) 如需詳細資訊，請參閱[為每個 Amazon S3 包含路徑建立單一結構描述](crawler-grouping-policy.md)。
  + 您無法將含有任何其他來源類型的目錄資料表混合為來源 (例如 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\$1table 的 Boto3 文件](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue/client/create_table.html)。  

```
{
    "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 連線](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html)中所述的屬性。  
對於 MongoDB、MongoDB Atlas 或 Amazon DocumentDB 資料存放區  
對於 MongoDB、MongoDB Atlas 和 Amazon DocumentDB (with MongoDB compatibility)，語法是 `database/collection`。
對於 JDBC 資料存放區，語法為 `database-name/schema-name/table-name` 或 `database-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` 模式。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/define-crawler-choose-data-sources.html)
AWS Glue 對 `glob` 排除模式的解譯如下：  
+ 斜線 (`/`) 字元為分隔符號，可將 Amazon S3 金鑰分隔至資料夾階層。
+ 星號 (`*`) 字元符合不超過資料夾邊界之名稱元件的零個或多個字元。
+ 雙星號 (`**`) 符合超過資料夾或結構描述邊界的零個或多個字元。
+ 問號 (`?`) 字元符合名稱元件的單一字元。
+ 反斜線 (`\`) 字元用於逸出可被解譯為特殊字元的字元。表達式 `\\` 符合一個反斜線，而 `\{` 符合左大括弧。
+ 方括號 `[ ]` 會建立括號表達式，符合一組字元中一個名稱元件的單一字元。例如，`[abc]` 符合 `a`、`b` 或 `c`。連字號 (`-`) 可用於指定範圍，因此 `[a-z]` 指定的範圍符合從 `a` 到 `z` (包含)。這些形式可以混合，因此 [`abce-g`] 符合 `a`、`b`、`c`、`e`、`f` 或 `g`。如果方括號 (`[`) 後方的字元為驚嘆號 (`!`)，則此括號表達式為否定。例如，`[!a-c]` 符合 `a`、`b` 或 `c` 以外的字元。

  在括號表達式中，`*`、`?` 和 `\` 字元符合本身。如果連字號 (`-`) 是方括號內的第一個字元，則其符合本身，如果連字號是 `!` 後的第一個字元，則為否定。
+ 大括弧 (`{ }`) 會括住一組子模式，如果群組中的任何子模式符合，則此群組也符合。逗號 (`,`) 字元用於分隔子模式。群組不能巢狀組合。
+ 前置句點或點號字元在相符操作中會視為一般字元。例如，`*` 排除模式符合檔案名稱 `.hidden`。

**Example 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/`，而以下為排除模式的一些範例結果：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/define-crawler-choose-data-sources.html)

**Example 排除 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 天)。請注意，「\$1\$1」的用途是天數模式的尾碼，會超過資料夾邊界至較低層級的資料夾。如果使用「\$1」，則較低的資料夾層級不會被排除。  
第二部分的 ` 2015/0[2-9]/**` 會排除 2015 年第 02 至 09 個月裡的天數。  
第三部分的 `2015/1[0-2]/**` 會排除 2015 年第 10、11、12 個月裡的天數。

**Example JDBC 排除模式**  
假設您以下列的結構描述架構爬取 JDBC 資料庫：  

```
MyDatabase/MySchema/
   HR_us
   HR_fr
   Employees_Table
   Finance
   Market_US_Table
   Market_EMEA_Table
   Market_AP_Table
```
包含路徑為 `MyDatabase/MySchema/%`，而以下為排除模式的一些範例結果：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/define-crawler-choose-data-sources.html)

**其他爬蟲程式來源參數**  
每個來源類型都需要一組不同的附加參數。

**連線**  
選取或新增 AWS Glue 連線。如需連線的詳細資訊，請參閱 [連線至資料](glue-connections.md)。

**其他中繼資料 – 選用 (適用於 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 目標也會使用相同的連線 (如果保留空白，則無連線)。  
如需連線的詳細資訊，請參閱 [連線至資料](glue-connections.md)。

**僅對檔案的子集和樣本大小進行取樣 (僅適用於 Amazon S3 資料存放區)**  
指定在資料集中網路爬取範例檔案時，每個分葉資料夾中要編目的檔案數目。開啟此功能時，爬蟲程式會隨機選取每個分葉資料夾中要網路爬取的某些檔案，而不是網路爬取此資料集中的所有檔案。  
取樣爬蟲程式最適合先前了解其資料格式，並且知道資料夾中的結構描述不會變更的客戶。開啟此功能會大幅減少爬蟲程式執行時間。  
有效值是介於 1 到 249 之間的整數。如果未指定，則會網路爬取所有檔案。

**後續爬蟲程式執行**  
此欄位是會影響所有 Amazon S3 資料來源的全域欄位。  
+ 網路爬取所有子資料夾：在每次後續網路爬取時，再次網路爬取所有資料夾。
+ 僅網路爬取新的子資料夾：只會網路爬取自上次網路爬取以來新增的 Amazon S3 資料夾。如果結構描述相容，則會將新的分割區新增至現有資料表。如需詳細資訊，請參閱 [排程增量網路爬取以新增分區](incremental-crawls.md)。
+ 根據事件進行網路爬取：依賴 Amazon S3 事件來控制要網路爬取的資料夾。如需詳細資訊，請參閱[使用 Amazon S3 事件通知加速網路爬取](crawler-s3-event-notifications.md)。

**自訂分類器 – 選用**  
定義自訂分類器，再定義爬蟲程式。分類器會檢查指定的檔案是否採用爬蟲程式可以處理的格式。如果是，則分類器會以符合該資料格式的 `StructType` 物件形式，建立結構描述。  
如需詳細資訊，請參閱[定義和管理分類器](add-classifier.md)。

# 步驟 3：設定安全設定
<a name="define-crawler-configure-security-settings"></a>

**IAM 角色**  
爬蟲程式會擔任此角色。它必須具有類似於 AWS 受管政策 的許可`AWSGlueServiceRole`。對於 Amazon S3 和 DynamoDB 來源，它也必須具有存取資料存放區的許可。如果爬蟲程式讀取使用 AWS Key Management Service (AWS KMS) 加密的 Amazon S3 資料，則角色必須具有 AWS KMS 金鑰的解密許可。  
對於 Amazon S3 資料存放區，連接到角色的其他許可將類似下列內容：    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket/object*"
      ]
    }
  ]
}
```
對於 Amazon DynamoDB 資料存放區，連接到角色的其他許可將類似下列內容：    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:Scan"
      ],
      "Resource": [
        "arn:aws:dynamodb:*:111122223333:table/table-name*"
      ]
    }
  ]
}
```
 若要新增自己的 JDBC 驅動程式，需要新增其他許可。  
+  授予下列任務動作的許可：`CreateJob`、`DeleteJob`、`GetJob`、`GetJobRun`、`StartJobRun`。
+  授予 Amazon S3 動作的許可：`s3:DeleteObjects`、`s3:GetObject`、`s3:ListBucket`、`s3:PutObject`。
**注意**  
如果 Amazon S3 儲存貯體政策已停用，則不需要 `s3:ListBucket`。
+  在 Amazon S3 政策中授予服務主體對儲存貯體/資料夾的存取權。
 Amazon S3 政策範例：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/driver-parent-folder/driver.jar",
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```
 AWS Glue 建立以下資料夾 (`_crawler` 和 `_glue_job_crawler` 位於與 Amazon S3 儲存貯體中 JDBC 驅動程式相同的層級)。例如，如果驅動程式路徑為 `<s3-path/driver_folder/driver.jar>`，則如果下列資料夾尚不存在，則會建立這些資料夾：  
+  <s3-path/driver\$1folder/\$1crawler> 
+  <s3-path/driver\$1folder/\$1glue\$1job\$1crawler> 
 或者，您可以新增安全組態至爬蟲程式以指定靜態加密選項。  
如需詳細資訊，請參閱[步驟 2：為 AWS Glue 建立 IAM 角色](create-an-iam-role.md)及[Glue AWS 的身分和存取管理](security-iam.md)。

**Lake Formation 組態 – 選用**  
允許爬蟲程式使用 Lake Formation 憑證來網路爬取資料來源。  
核取 **Use Lake Formation credentials for crawling S3 data source** (使用 Lake Formation 憑證網路爬取 S3 資料來源)，可讓爬蟲程式使用 Lake Formation 憑證來網路爬取資料來源。如果資料來源屬於其他帳戶，您必須提供註冊的帳戶 ID。否則，爬蟲程式只會網路爬取與帳戶相關聯的那些資料來源。僅適用於 Amazon S3 和 Data Catalog 資料來源。

**安全組態 – 選用**  
設定包括安全組態。如需詳細資訊，請參閱下列內容：  
+ [加密 寫入的資料 AWS Glue](encryption-security-configuration.md)
在編目程式上設定安全組態後，您可以變更，但無法將其移除。若要降低編目程式的安全層級，請在您的組態內明確將安全功能設定為 `DISABLED`，或建立新的編目程式。

# 步驟 4：設定輸出和排程
<a name="define-crawler-set-output-and-scheduling"></a>

**輸出組態**  
這些選項包括當偵測到資料存放區的結構描述變更、刪除物件等情況，爬蟲程式應該如何處理。如需詳細資訊，請參閱[自訂編目程式行為](crawler-configuration.md)

**爬蟲程式排程**  
您可以在 AWS Glue中隨需執行爬蟲程式或為爬蟲程式和任務定義以時間為基礎的排程。這些排程的定義使用類似 Unix 的 ​cron​ 語法。如需詳細資訊，請參閱[排程爬蟲程式](schedule-crawler.md)。

# 步驟 4：檢閱和建立
<a name="define-crawler-review"></a>

檢閱您設定的爬蟲程式設定，然後建立爬蟲程式。

# 排程爬蟲程式
<a name="schedule-crawler"></a>

您可以隨需或定期執行 AWS Glue 爬蟲程式。當您設定以排程為基礎的編目程式時，可以指定特定的限制條件，例如編目程式執行的頻率、在一週中的哪幾天與什麼時間執行。可以建立 *cron* 格式的自訂排程。如需詳細資訊，請參閱 Wikipedia 中的 [Cron](http://en.wikipedia.org/wiki/Cron)。

設定爬蟲程式的排程時，應考慮 Cron 的功能和限制。例如，如果您選擇在每個月的 31 日執行您的爬蟲程式，請注意有些月份不到 31 天。

**Topics**
+ [建立編目程式排程](create-crawler-schedule.md)
+ [為現有的編目程式建立排程](Update-crawler-schedule.md)

# 建立編目程式排程
<a name="create-crawler-schedule"></a>

您可以使用 AWS Glue 主控台或 為爬蟲程式建立排程 AWS CLI。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\) 開啟 AWS Glue主控台。

1. 在導覽窗格中選擇 **Crawlers (爬蟲程式)**。

1. 遵循[設定編目程式](define-crawler.md)一節中的步驟 1-3。

1. 在[步驟 4：設定輸出和排程](define-crawler-set-output-and-scheduling.md)中，選擇**編目程式排程**以設定執行的頻率。您可以選擇編目程式以每小時、每日、每週、每月執行，或使用 Cron 表達式定義自訂排程。

   Cron 表達式是代表排程模式的字串，由 6 個以空格分隔的欄位組成：\$1 \$1 \$1 \$1 \$1 <minute> <hour> <day of month> <month> <day of week> <year> 

   例如，若要每天在午夜執行任務，Cron 表達式為：0 0 \$1 \$1 ？ \$1

   如需詳細資訊，請參閱 [Cron 表達](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions)式。

1. 檢閱您設定的編目程式設定，然後建立按排程執行的編目程式。

------
#### [ AWS CLI ]

```
aws glue create-crawler 
 --name myCrawler \
 --role AWSGlueServiceRole-myCrawler  \
 --targets '{"S3Targets":[{Path="s3://amzn-s3-demo-bucket/"}]}' \
 --schedule cron(15 12 * * ? *)
```

------

如需有關使用 Cron 排程工作和爬蟲程式的詳細資訊，請參閱 [任務和爬蟲程式以時間為基礎的排程](monitor-data-warehouse-schedule.md)。

# 為現有的編目程式建立排程
<a name="Update-crawler-schedule"></a>

請依照下列步驟來設定現有編目程式的週期性排程。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue\) 開啟 AWS Glue主控台。

1. 在導覽窗格中選擇 **Crawlers (爬蟲程式)**。

1. 從可用清單中選擇您要排程的編目程式。

1. 在**動作**功能表中，選擇**編輯**。

1. 向下捲動至**步驟 4：設定輸出和排程**，然後選擇**編輯**。

1.  在**編目程式排程**下更新您的編目程式排程。

1. 選擇**更新**。

------
#### [ AWS CLI ]

使用下列 CLI 命令來更新現有的編目程式組態：

```
aws glue update-crawler-schedule 
   --crawler-name myCrawler
   --schedule cron(15 12 * * ? *)
```

------

# 檢視爬蟲程式結果和詳細資訊
<a name="console-crawlers-details"></a>

 爬蟲程式成功執行後，它會在 Data Catalog 中建立資料表定義。在導覽窗格中選擇 **Tables (資料表)**，以查看爬蟲程式在您指定的資料庫中所建立的資料表。

 您可以檢視爬蟲程式本身的相關資訊，如下所示：
+  AWS Glue 主控台上的**爬蟲程式**頁面會顯示爬蟲程式的下列屬性：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/console-crawlers-details.html)
+  若要檢視爬蟲程式的歷史記錄，請選擇導覽窗格中的 **Crawlers** (爬蟲程式)，以查看您建立的爬蟲程式。從可用的爬蟲程式清單中選擇爬蟲程式。您可以在 **Crawler runs** (爬蟲程式執行) 索引標籤中檢視爬蟲程式屬性以及檢視爬蟲程式歷史記錄。

   「爬蟲程式執行」索引標籤會顯示爬蟲程式每次執行時的相關資訊，包括 **Start time (UTC)** (開始時間 (UTC))、**End time (UTC)** (結束時間 (UTC))、**Duration** (持續時間)、**Status** (狀態)、**DPU hours** (DPU 時數)，以及 **Table changes** (資料表變更)。

  爬蟲程式執行索引標籤僅顯示自爬蟲程式歷史記錄功能啟動日期以來發生的網路爬取，而且最多只會保留 12 個月的網路爬取。不會傳回較舊的網路爬取。
+ 若要查看其他資訊，請選擇爬蟲程式詳細資料頁面中的索引標籤。每個索引標籤都會顯示與爬蟲程式相關的資訊。
  +  **Schedule** (排程)：為爬蟲程式建立的任何排程都會顯示在此處。
  +  **Data sources** (資料來源)：爬蟲程式掃描的所有資料來源都會顯示在此處。
  +  **Classifiers** (分類器)：指派給爬蟲程式的所有分類器都會顯示在此處。
  +  **標籤**：任何建立並指派給 AWS 資源的標籤都會顯示在這裡。

# 爬蟲程式在 Data Catalog 資料表上設定的參數
<a name="table-properties-crawler"></a>

 這些資料表屬性是由 AWS Glue 爬蟲程式設定。我們希望使用者使用 `classification` 和 `compressionType` 屬性。其他屬性 (包括資料表大小估算) 用於內部計算，我們不能保證其準確性或適用於客戶使用案例。變更這些參數可能會改變爬蟲程式的行為，我們不支持此工作流程。


| 屬性索引鍵 | 屬性值 | 
| --- | --- | 
| UPDATED\$1BY\$1CRAWLER | 執行更新的爬蟲程式名稱。 | 
| connectionName | 在 Data Catalog 中，用於連線至資料存放區的爬蟲程式連線名稱。 | 
| recordCount | 根據檔案大小和標題估計資料表中的記錄數。 | 
| skip.header.line.count | 跳過列以跳過標題。在分類為 CSV 的資料表上設定。 | 
| CrawlerSchemaSerializerVersion | 供內部使用 | 
| classification | 由爬蟲程式推斷的資料格式。如需 AWS Glue 爬蟲程式支援的資料格式詳細資訊，請參閱[內建分類器](add-classifier.md#classifier-built-in)。 | 
| CrawlerSchemaDeserializerVersion | 供內部使用 | 
| sizeKey | 網路爬取的資料表中檔案的合併大小。 | 
| averageRecordSize | 資料表中列的平均大小 (位元組)。 | 
| compressionType | 資料表中資料所使用的壓縮類型。如需 AWS Glue 爬蟲程式支援之壓縮類型的詳細資訊，請參閱 [內建分類器](add-classifier.md#classifier-built-in)。 | 
| typeOfData | `file`、`table` 或 `view`。 | 
| objectCount | 資料表的 Amazon S3 路徑下的物件數目。 | 

 這些額外的資料表屬性是由 Snowflake 資料存放區的 AWS Glue 爬蟲程式所設定。


| 屬性索引鍵 | 屬性值 | 
| --- | --- | 
| aws:RawTableLastAltered | 記錄 Snowflake 資料表的最後更改時間戳記。 | 
| ViewOriginalText | 檢視 SQL 陳述式。 | 
| ViewExpandedText | 檢視以 Base64 格式編碼的 SQL 陳述式。 | 
| ExternalTable:S3Location | Snowflake 外部資料表的 Amazon S3 位置。 | 
| ExternalTable:FileFormat | Snowflake 外部資料表的 Amazon S3 檔案格式。 | 

 這些額外的資料表屬性是由 AWS Glue Amazon Redshift、Microsoft SQL Server、MySQL、PostgreSQL 和 Oracle 等 JDBC 類型資料存放區的爬蟲程式所設定。


| 屬性索引鍵 | 屬性值 | 
| --- | --- | 
| aws:RawType | 在將資料存放在 Data Catalog 中時，爬蟲程式會將資料類型轉換為與 Hive 相容的類型，這會多次導致原生資料類型的資訊遺失。爬蟲程式會輸出 `aws:RawType` 參數以提供原生層級的資料類型。 | 
| aws:RawColumnComment | 如果註解與資料庫中的資料欄相關聯，爬蟲程式會在目錄資料表中輸出對應的註解。註解字串被截斷為 255 個位元組。 Microsoft SQL Server 不支援註解。  | 
| aws:RawTableComment | 如果註解與資料庫中的資料表相關聯，爬蟲程式會在目錄資料表中輸出對應的註解。註解字串被截斷為 255 個位元組。 Microsoft SQL Server 不支援註解。 | 

# 自訂編目程式行為
<a name="crawler-configuration"></a>

當您設定 時 AWS Glue 編目程式，您有幾個選項可以定義爬蟲程式的行為。
+ **增量編目程式** – 您可以設定編目程式執行增量編目程式，以僅將新的分區新增至資料表結構描述。
+ **分區索引** – 依預設，編目程式會建立 Amazon S3 和 Delta Lake 目標的分區索引，以提供特定分區的有效查詢。
+ **使用 Amazon S3 事件加速網路爬取時間**– 您可以將編目程式設定為使用 Amazon S3 事件識別兩個編目之間的變更，方法是列出觸發事件的子資料夾中的所有檔案，而不是列出完整的 Amazon S3 或 Data Catalog 目標。
+ **處理結構描述變更** – 您可以防止編目程式對現有的結構描述進行任何結構描述變更。您可以使用 AWS 管理主控台 或 AWS Glue API 來設定爬蟲程式如何處理特定類型的變更。
+ **多個 Amazon S3 路徑的單一結構描述** – 如果資料相容，您可以設定編目程式為每個 S3 路徑建立單一結構描述。
+ **資料表位置和分區層級** – 資料表層級編目程式選項讓您可以靈活地告訴編目程式資料表的位置，以及建立分區的方式。
+ **資料表閾值** – 您可以指定資料表閾值，以指定編目程式可建立的資料表數目上限。
+ **AWS Lake Formation 登入**資料 – 您可以設定爬蟲程式使用 Lake Formation 登入資料來存取 Amazon S3 資料存放區，或具有相同 AWS 帳戶 或另一個中基礎 Amazon S3 位置的資料目錄資料表 AWS 帳戶。

 如需使用 AWS Glue 主控台新增爬蟲程式的詳細資訊，請參閱[設定編目程式](define-crawler.md)。

**Topics**
+ [排程增量網路爬取以新增分區](incremental-crawls.md)
+ [產生分區索引](crawler-configure-partition-indexes.md)
+ [防止編目程式變更現有的結構描述](crawler-schema-changes-prevent.md)
+ [為每個 Amazon S3 包含路徑建立單一結構描述](crawler-grouping-policy.md)
+ [指定資料表位置和分區層級](crawler-table-level.md)
+ [指定編目程式可建立的資料表數目上限](crawler-maximum-number-of-tables.md)
+ [設定編目程式以使用 Lake Formation 憑證](crawler-lf-integ.md)
+ [使用 Amazon S3 事件通知加速網路爬取](crawler-s3-event-notifications.md)

# 排程增量網路爬取以新增分區
<a name="incremental-crawls"></a>

您可以設定 AWS Glue 編目程式 執行增量爬蟲程式，只將新的分割區新增至資料表結構描述。編目程式第一次執行時，會執行完整的網路爬取來處理整個資料來源，以記錄完整的結構描述和 AWS Glue Data Catalog中的所有現有分區。

初始的完整網路爬取之後的後續網路爬取將遞增，編目程式會在其中識別並僅新增自上次網路爬取以來引入的新分區。這種方法會導致網路爬取時間更快，因為編目程式不再需要為每個執行處理整個資料來源，而僅專注於新分區。

**注意**  
增量網路爬取不會偵測現有分區的修改或刪除。此組態最適合具有穩定結構描述的資料來源。如果發生一次性主要結構描述變更，建議暫時設定編目程式來執行完整的網路爬取，以準確擷取新的結構描述，然後切換回增量網路爬取模式。

下圖顯示啟用增量網路爬取設定後，編目程式將僅偵測最新添加的資料夾 (month=March)，並將其新增至目錄。

![\[下圖顯示已新增 3 月的檔案。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawlers-s3-folders-new.png)


請依照下列步驟來更新編目程式，以執行增量網路爬取：

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Data Catalog** 下的**編目程式**。

1. 選擇要設定為增量網路爬取的編目程式。

1. 選擇**編輯**。

1. 選擇**步驟 2。選擇資料來源和分類器**。

1. 選擇要進行增量網路爬取的資料來源。

1. 選擇**編輯**。

1. 在**後續編目程式執行**下選擇**僅網路爬取新的子資料夾**。

1. 選擇**更新**。

若要為編目程式建立排程，請參閱 [排程爬蟲程式](schedule-crawler.md)。

------
#### [ AWS CLI ]

```
aws glue update-crawler \
 --name myCrawler \
 --recrawl-policy RecrawlBehavior=CRAWL_NEW_FOLDERS_ONLY \
 --schema-change-policy UpdateBehavior=LOG,DeleteBehavior=LOG
```

------

**備註和限制**  
開啟此選項時，您無法在編輯爬蟲程式程式時變更 Amazon S3 目標資料存放區。此選項會影響特定爬蟲程式組態設定。開啟時，它會強制爬蟲程式的更新行為和刪除行為至 `LOG`。這表示：
+ 若其發現結構描述不相容的物件，則爬蟲程式將不會在 Data Catalog 中新增物件，並會將此詳細資料新增為 CloudWatch Logs 中的日誌。
+ 其將不會在 Data Catalog 中更新已刪除的物件。

# 產生分區索引
<a name="crawler-configure-partition-indexes"></a>

Data Catalog 支援建立分區索引，以提供高效的特定分區查閱。如需詳細資訊，請參閱[建立分區索引](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)。根據預設， AWS Glue 爬蟲程式會建立 Amazon S3 和 Delta Lake 目標的分割區索引。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Data Catalog** 下的**編目程式**。

1. 當您定義編目程式時，預設會在**設定輸出和排程**頁面上的**進階選項**下啟用**自動建立分區索引**的選項。

   若要停用此選項，您可以取消選取在主控台中**自動建立分區索引**核取方塊。

1. 完成編目程式組態，然後選擇**建立編目程式**。

------
#### [ AWS CLI ]

 您也可以使用 AWS CLI停用此選項，在 `configuration` 參數中設定 `CreatePartitionIndex `。預設值為 true。

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CreatePartitionIndex": false }'
```

------

## 分割區索引的使用說明
<a name="crawler-configure-partition-indexes-usage-notes"></a>
+ 依預設，爬蟲程式建立的資料表沒有變數 `partition_filtering.enabled`。如需詳細資訊，請參閱 [AWS Glue 分割區索引和篩選](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index)。
+ 不支援為加密分割區建立分割區索引。

# 防止編目程式變更現有的結構描述
<a name="crawler-schema-changes-prevent"></a>

 您可以防止 AWS Glue 編目程式在其執行時對 Data Catalog 進行任何結構描述變更。依預設，編目程式會更新 Data Catalog 中的結構描述，以符合要網路爬取的資料來源。但是，在某些情況下，您可能想要防止編目程式修改現有的結構描述，特別是如果您已轉換或清理資料，而且不希望原始結構描述覆寫變更。

 請依照下列步驟來設定編目程式，不要覆寫資料表定義中的現有結構描述。

------
#### [  AWS 管理主控台  ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Data Catalog** 下的**編目程式**。

1. 從清單中選擇編目程式，然後選擇**編輯**。

1. 選擇**步驟 4：設定輸出和排程**。

1. 在**進階選項**下，選擇**僅新增資料欄**或**忽略變更且不更新 Data Catalog 中的資料表**。

1.  此外，您還可以將組態選項設定為**以資料表的中繼資料更新所有新的和現有的分區**。這會將分區結構描述設定為從資料表繼承。

1. 選擇**更新**。

------
#### [ AWS CLI ]

下列範例顯示如何將編目程式設定為不變更現有的結構描述，只新增資料欄：

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

下列範例顯示如何將編目程式設定為不變更現有的結構描述，且不新增資料欄：

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

如果您不希望爬蟲程式執行時變更資料表結構描述，可將結構描述變更政策設為 `LOG`。

當您使用 API 設定爬蟲程式時，請設定下列參數：
+ 將 `SchemaChangePolicy` 結構中的 `UpdateBehavior` 欄位設為 `LOG`。
+  在爬蟲程式 API 中，以呈現以下 JSON 物件的字串設定 `Configuration` 欄位，例如：

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

------

# 為每個 Amazon S3 包含路徑建立單一結構描述
<a name="crawler-grouping-policy"></a>

依預設，爬蟲程式為 Amazon S3 中存放的資料定義資料表時，其會同時考量資料是否相容與結構描述是否類似。考量的資料相容性因素包括資料是否具有相同的格式類型 (例如 JSON)、相同的壓縮類型 (例如 GZIP)、Amazon S3 路徑結構及其他資料屬性。結構描述相似性是測量個別 Amazon S3 物件的結構描述相似程度。

為協助說明此選項，我們假設您使用了包含路徑 `s3://amzn-s3-demo-bucket/table1/` 來定義爬蟲程式。當爬蟲程式執行時，它會尋找兩個具備以下特點的 JSON 檔案：
+ **檔案 1** - `S3://amzn-s3-demo-bucket/table1/year=2017/data1.json`
+ *檔案內容* - `{“A”: 1, “B”: 2}`
+ *結構描述* - `A:int, B:int`
+ **檔案 2** - `S3://amzn-s3-demo-bucket/table1/year=2018/data2.json`
+ *檔案內容* - `{“C”: 3, “D”: 4}`
+ *結構描述* - `C: int, D: int`

依預設，由於結構描述的沒有足夠相似性，故爬蟲程式會建立兩個資料表，名為 `year_2017` 和 `year_2018`。不過，如果已選擇 **Create a single schema for each S3 path (為每個 S3 路徑建立單一結構描述)**，且如果該資料相容，爬蟲程式會建立一個資料表。該資料表包含結構描述 `A:int,B:int,C:int,D:int` 和 `partitionKey` `year:string`。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Data Catalog** 下的**編目程式**。

1. 當您設定新的編目程式時，在**輸出和排程**下，選取「進階」選項下的**為每個 S3 路徑建立單一結構描述**選項。

------
#### [ AWS CLI ]

當可能時，您可以設定爬蟲程式為 `CombineCompatibleSchemas` 到常用資料表定義。使用此選項，爬蟲程式仍會考慮資料相容性，但在評估特定包含路徑的 Amazon S3 物件時，會忽略特定結構描述的相似性。

當您使用 設定爬蟲程式時 AWS CLI，請設定下列組態選項：

```
aws glue update-crawler \
   --name myCrawler \
   --configuration '{"Version": 1.0, "Grouping": {"TableGroupingPolicy": "CombineCompatibleSchemas" }}'
```

------
#### [ API ]

當您使用 API 設定爬蟲程式時，請設定下列組態選項：

 在爬蟲程式 API 中，以呈現以下 JSON 物件的字串設定 `Configuration` 欄位，例如：

```
{
   "Version": 1.0,
   "Grouping": {
      "TableGroupingPolicy": "CombineCompatibleSchemas" }
}
```

------

# 指定資料表位置和分區層級
<a name="crawler-table-level"></a>

依預設，編目程式為 Amazon S3 中存放的資料定義資料表時，編目程式會嘗試將結構描述合併在一起並建立頂層資料表 (`year=2019`)。在某些情況下，您可能會預期爬蟲程式為資料夾 `month=Jan` 建立資料表，然而由於同級資料夾 (`month=Mar`) 已合併到相同的資料表中，因此爬蟲程式是建立分割區。

資料表層級爬蟲程式選項讓您可以靈活地告訴爬蟲程式資料表的位置，以及建立分割區的方式。當您指定 **Table level (資料表層級)**，資料表會從 Amazon S3 儲存貯體在該絕對層級建立。

![\[資料表層級指定為層級 2 的爬蟲程式群組。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-table-level1.jpg)


 在主控台設定爬蟲程式時，您可指定 **Table level (資料表層級)** 爬蟲程式選項的值。值必須是正整數，表示資料表位置 (資料集中的絕對層級)。頂層資料夾的層級為 1。例如，對於路徑 `mydataset/year/month/day/hour`，如果層級設定為 3，則資料表會在位置 `mydataset/year/month`。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Data Catalog** 下的**編目程式**。

1. 在您設定編目程式時，在**輸出和排程**下，選擇**進階選項**下的**資料表層級**。

![\[在爬蟲程式組態中指定資料表層級。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-configuration-console.png)


------
#### [ AWS CLI ]

當您使用 設定爬蟲程式時 AWS CLI，請設定 `configuration` 參數，如範例程式碼所示：

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "Grouping": { "TableLevelConfiguration": 2 }}'
```

------
#### [ API ]

使用 API 設定爬蟲程式時，以呈現以下 JSON 物件的字串設定 `Configuration` 欄位；例如：

```
configuration = jsonencode(
{
   "Version": 1.0,
   "Grouping": {
            TableLevelConfiguration = 2  
        }
})
```

------
#### [ CloudFormation ]

在此範例中，您在 CloudFormation 範本內的主控台中設定 **Table level** (資料表層級)選項：

```
"Configuration": "{
    \"Version\":1.0,
    \"Grouping\":{\"TableLevelConfiguration\":2}
}"
```

------

# 指定編目程式可建立的資料表數目上限
<a name="crawler-maximum-number-of-tables"></a>

您可以選擇`TableThreshold`透過 AWS Glue 主控台或 指定 ，指定允許爬蟲程式建立的資料表數目上限 AWS CLI。如果爬蟲程式在其網路爬取期間偵測到的資料表大於此輸入值，網路爬取就會失敗，且不會將任何資料寫入資料目錄。

當爬蟲程式偵測並建立的資料表比您預期的要大得多時，此參數非常有用。這可能有多種原因，例如：
+ 使用 AWS Glue 任務填入 Amazon S3 位置時，最終可能會產生與資料夾相同層級的空檔案。在這種情況下，當您在此 Amazon S3 位置執行爬蟲程式時，由於檔案和資料夾存在於相同層級，爬蟲程式會建立多個資料表。
+ 如果未設定 `"TableGroupingPolicy": "CombineCompatibleSchemas"`，您最終可能會得到比預期更多的資料表。

您可以指定 `TableThreshold` 作為大於 0 的整數值。此值的設定是以每個爬蟲程式為基礎。也就是說，對於每個網路爬取，都會考慮此值。例如：爬蟲程式具有設定為 5 的 `TableThreshold` 值。在每個爬蟲程式中，會 AWS Glue 比較使用此資料表閾值 (5) 偵測到的資料表數目，如果偵測到的資料表數目小於 5， 會將資料表 AWS Glue 寫入資料目錄，如果沒有，則爬蟲程式會失敗，而不會寫入資料目錄。

------
#### [ AWS 管理主控台 ]

**若要`TableThreshold`使用 設定 AWS 管理主控台：**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 設定編目程式時，在**輸出和排程**中，將**資料表閾值上限**設定為允許編目程式產生的資料表數目。  
![\[AWS 主控台的輸出和排程區段，顯示資料表閾值上限參數。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-max-tables.png)

------
#### [ AWS CLI ]

若要`TableThreshold`使用 設定 AWS CLI：

```
aws glue update-crawler \
    --name myCrawler \
    --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": { "TableThreshold": 5 }}}'
```

------
#### [ API ]

若要使用 API 設定 `TableThreshold`，請執行以下操作：

```
"{"Version":1.0,
"CrawlerOutput":
{"Tables":{"AddOrUpdateBehavior":"MergeNewColumns",
"TableThreshold":5}}}";
```

------

錯誤訊息會記錄下來，以協助您識別資料表路徑並清理資料。在爬蟲程式因為資料表計數大於提供的資料表閾值而失敗的情況下，登入帳戶的範例：

```
Table Threshold value = 28, Tables detected - 29
```

在 CloudWatch 中，我們會將偵測到的所有資料表位置記錄為 INFO 訊息。將錯誤記錄為失敗原因。

```
ERROR com.amazonaws.services.glue.customerLogs.CustomerLogService - CustomerLogService received CustomerFacingException with message 
The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. Failing crawler without writing to Data Catalog.
com.amazonaws.services.glue.exceptions.CustomerFacingInternalException: The number of tables detected by crawler: 29 is greater than the table threshold value provided: 28. 
Failing crawler without writing to Data Catalog.
```

# 設定編目程式以使用 Lake Formation 憑證
<a name="crawler-lf-integ"></a>

您可以設定爬蟲程式使用 AWS Lake Formation 登入資料來存取 Amazon S3 資料存放區，或具有相同 AWS 帳戶 或另一個 中基礎 Amazon S3 位置的資料目錄資料表 AWS 帳戶。如果爬蟲程式和資料目錄資料表位於同一帳戶中，您可以將現有的資料目錄資料表設定為爬蟲程式的目標。目前，使用 Data Catalog 資料表作為編目程式的目標時，僅允許具有單一目錄資料表的單一目錄目標。

**注意**  
將資料目錄資料表定義為爬蟲程式目標時，請確定資料目錄資料表的基礎位置是 Amazon S3 位置。使用 Lake Formation 憑證的爬蟲程式僅支援具有基礎 Amazon S3 位置的資料目錄目標。

## 當爬蟲程式和已註冊的 Amazon S3 位置或資料目錄資料表位於同一帳戶 (帳戶內網路爬取) 時，需要進行設定
<a name="in-account-crawling"></a>

若要允許爬蟲程式使用 Lake Formation 憑證存取資料存放區或資料目錄資料表，您需要向 Lake Formation 註冊資料位置。此外，爬蟲程式的 IAM 角色必須具備從 Amazon S3 儲存貯體註冊所在的目的地讀取資料的許可。

您可以使用 AWS 管理主控台 或 AWS Command Line Interface () 完成下列組態步驟AWS CLI。

------
#### [ AWS 管理主控台 ]

1. 在設定爬蟲程式以存取爬蟲程式來源之前，請先向 Lake Formation 註冊資料存放區或資料目錄的資料位置。在 Lake Formation 主控台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)：//) 中，將 Amazon S3 位置註冊為定義爬蟲程式之 中資料湖 AWS 帳戶 的根位置。如需詳細資訊，請參閱 [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (註冊 Amazon S3 位置)。

1. 向用於爬蟲程式執行的 IAM 角色授與 **Data location** (資料位置) 許可，以便爬蟲程式可以從 Lake Formation 中的目的地讀取資料。如需詳細資訊，請參閱 [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (授與資料位置許可 (相同帳戶))。

1. 將爬蟲程式角色存取許可 (`Create`) 授與指定作為輸出資料庫的資料庫。如需詳細資訊，請參閱 [Granting database permissions using the Lake Formation console and the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html) (使用 Lake Formation 主控台和具名資源方法授與資料庫許可)。

1. 在 IAM 主控台 ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) 中，建立爬蟲程式的 IAM 角色。將 `lakeformation:GetDataAccess` 政策新增至該角色。

1. 在 AWS Glue 主控台 ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)：//) 中，在設定爬蟲程式時，選取**使用 Lake Formation 登入資料來爬取 Amazon S3 資料來源**的選項。
**注意**  
accountId 欄位對於帳戶內網路爬取而言是選填的。

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111122223333"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

# 爬蟲程式和註冊的 Amazon S3 位置位於不同帳戶 (跨帳戶網路爬取) 時需要進行設定
<a name="cross-account-crawling"></a>

若要允許爬蟲程式使用 Lake Formation 憑證存取其他帳戶中的資料存放區，您必須先向 Lake Formation 註冊 Amazon S3 資料位置。接著，您可以透過執行下列步驟，將資料位置許可授與爬蟲程式的帳戶。

您可以使用 AWS 管理主控台 或 完成下列步驟 AWS CLI。

------
#### [ AWS 管理主控台 ]

1. 在註冊 Amazon S3 位置的帳戶中 (帳戶 B)：

   1. 向 Lake Formation 註冊 Amazon S3 路徑。如需詳細資訊，請參閱 [Registering Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html) (註冊 Amazon S3 位置)。

   1.  將 **Data location** (資料位置) 許可授與爬蟲程式執行所在的帳戶 (帳戶 A)。如需詳細資訊，請參閱 [Grant data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (授與資料位置許可)。

   1. 在 Lake Formation 中建立空的資料庫，並將基礎位置作為目標 Amazon S3 位置。如需詳細資訊，請參閱[建立資料庫](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-database.html)。

   1. 授與帳戶 A (爬蟲程式執行所在的帳戶) 您在上一個步驟中建立的資料庫存取權。如需詳細資訊，請參閱[授與資料庫許可](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-database-permissions.html)。

1. 在爬蟲程式建立並將執行所在的帳戶中 (帳戶 A)：

   1.  使用 AWS RAM 主控台，接受從外部帳戶 （帳戶 B) 共用的資料庫。如需詳細資訊，請參閱[接受來自 的資源共用邀請 AWS Resource Access Manager](https://docs.aws.amazon.com/lake-formation/latest/dg/accepting-ram-invite.html)。

   1.  建立爬蟲程式的 IAM 角色。將 `lakeformation:GetDataAccess` 政策新增至該角色。

   1.  在 Lake Formation 主控台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 中，將目標 Amazon S3 位置的 **Data location** (資料位置) 許可授與用於爬蟲程式執行的 IAM 角色，以便爬蟲程式可以從 Lake Formation 中的目的地讀取資料。如需詳細資訊，請參閱 [Granting data location permissions](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html) (授與資料位置許可)。

   1.  在共用資料庫上建立資源連結。如需詳細資訊，請參閱[建立資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html)。

   1.  授與爬蟲程式角色共用資料庫和 (`Describe`) 資源連結的存取許可 (`Create`)。資源連結在爬蟲程式的輸出中指定。

   1.  在 AWS Glue 主控台 ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)：//) 中，在設定爬蟲程式時，選取**使用 Lake Formation 登入資料來爬取 Amazon S3 資料來源**的選項。

      對於跨帳戶爬取，請指定向 Lake Formation 註冊目標 Amazon S3 位置的 AWS 帳戶 ID。對於帳戶內網路爬取，accountId 欄位是選填的。  
![\[IAM role selection and Lake Formation configuration options for AWS Glue 編目程式 security settings.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/cross-account-crawler.png)

------
#### [ AWS CLI ]

```
aws glue --profile demo create-crawler --debug --cli-input-json '{
    "Name": "prod-test-crawler",
    "Role": "arn:aws:iam::111122223333:role/service-role/AWSGlueServiceRole-prod-test-run-role",
    "DatabaseName": "prod-run-db",
    "Description": "",
    "Targets": {
    "S3Targets":[
                {
                 "Path": "s3://amzn-s3-demo-bucket"
                }
                ]
                },
   "SchemaChangePolicy": {
      "UpdateBehavior": "LOG",
      "DeleteBehavior": "LOG"
  },
  "RecrawlPolicy": {
    "RecrawlBehavior": "CRAWL_EVERYTHING"
  },
  "LineageConfiguration": {
    "CrawlerLineageSettings": "DISABLE"
  },
  "LakeFormationConfiguration": {
    "UseLakeFormationCredentials": true,
    "AccountId": "111111111111"
  },
  "Configuration": {
           "Version": 1.0,
           "CrawlerOutput": {
             "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" },
             "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" }
           },
           "Grouping": { "TableGroupingPolicy": "CombineCompatibleSchemas" }
         },
  "CrawlerSecurityConfiguration": "",
  "Tags": {
    "KeyName": ""
  }
}'
```

------

**注意**  
只有 Amazon S3 和資料目錄目標才支援使用 Lake Formation 憑證的爬蟲程式。
對於使用 Lake Formation 憑證販售的目標，基礎 Amazon S3 位置必須屬於同一個儲存貯體。例如，只要所有目標位置都位於同一個儲存貯體 (amzn-s3-demo-bucket1) 下，客戶就可以使用多個目標 (s3://amzn-s3-demo-bucket1/folder1, s3://amzn-s3-demo-bucket1/folder2)。不允許指定不同的儲存貯體 (s3://amzn-s3-demo-bucket1/folder1、s3://amzn-s3-demo-bucket2/folder2)。
目前對於資料目錄目標爬蟲程式而言，僅允許具有單一目錄資料表的單一目錄目標。

# 使用 Amazon S3 事件通知加速網路爬取
<a name="crawler-s3-event-notifications"></a>

您可以將爬蟲程式設定為使用 Amazon S3 事件來尋找任何變更，而不是從 Amazon S3 或 Data Catalog 目標列出物件。此功能可使用 Amazon S3 事件識別兩個編目之間的變更，方法是列出觸發事件的子資料夾中的所有檔案，而不是列出完整的 Amazon S3 或 Data Catalog 目標，藉此改善重新編目時間。

第一個編目會列出目標中的所有 Amazon S3 物件。第一次成功編目之後，您可以選擇手動或按設定的排程重新編目。爬蟲程式將僅列出這些事件中的物件，而不是列出所有物件。

當目標為 Data Catalog 資料表時，編目程式會使用變更來更新 Data Catalog 中的現有資料表 (例如，資料表中的額外分區)。

移動到基於 Amazon S3 事件的爬蟲程式的優點是：
+ 因為不需要列出目標中的所有物件，而是在新增或刪除物件的位置完成特定資料夾清單，從而更快速地重新編目。
+ 減少整體編目成本，因為會在新增或刪除物件的位置完成特定資料夾清單。

Amazon S3 事件編目會根據爬蟲程式排程從 SQS 佇列中使用 Amazon S3 事件來執行。如果佇列中沒有事件，則不會產生任何費用。您可以將 Amazon S3 事件設定為直接轉至 SQS 佇列，或在多個取用者需要相同事件 (即 SNS 和 SQS 的組合) 的情況下設定事件。如需詳細資訊，請參閱[設定 Amazon S3 事件通知的帳戶](#crawler-s3-event-notifications-setup)。

在事件模式下建立並設定爬蟲程式之後，第一次編目會執行完整的 Amazon S3 或 Data Catalog 目標清單，藉此以清單模式執行。下列日誌會在第一次成功編目之後使用 Amazon S3 事件來確認編目的操作：「透過使用 Amazon S3 事件來執行編目。」

在建立 Amazon S3 事件編目並更新可能會影響編目的爬蟲程式屬性之後，編目會以清單模式運作，並新增下列日誌：「編目未在 S3 事件模式下執行」。

**注意**  
每個編目程式取用的訊息數目上限為 10 萬則訊息。

## 考量和限制
<a name="s3event-crawler-limitations"></a>

在您設定編目程式使用 Amazon S3 事件通知尋找任何變更時，適用下列考量和限制。
+  **已刪除分區的重要行為** 

  將 Amazon S3 事件編目程式與 Data Catalog 資料表搭配使用時：
  +  如果使用 `DeletePartition` API 呼叫刪除分區，您還必須刪除該分區下的所有 S3 物件，並在設定 S3 事件通知時選取**所有物件移除事件**。如果未設定刪除事件，編目程式會在下次執行期間重新建立已刪除的分區。
+ 無論是 Amazon S3 目標還是 Data Catalog 目標，爬蟲程式只支援單一目標。
+ 不支援私有 VPC 上的 SQS。
+ 不支援 Amazon S3 取樣。
+ 爬蟲程式目標應該是 Amazon S3 目標的資料夾，或是 Data Catalog 目標的一個或多個 AWS Glue Data Catalog 資料表。
+ 不支援「所有」路徑萬用字元：s3://%
+ 對於 Data Catalog 目標，所有目錄資料表都應指向 Amazon S3 事件模式的相同 Amazon S3 儲存貯體。
+ 對於 Data Catalog 目標，目錄資料表不應指向 Delta Lake 格式的 Amazon S3 位置 (包含 \$1symlink 資料夾或檢查目錄資料表的 `InputFormat`)。

**Topics**
+ [考量和限制](#s3event-crawler-limitations)
+ [設定 Amazon S3 事件通知的帳戶](#crawler-s3-event-notifications-setup)
+ [為 Amazon S3 目標的 Amazon S3 事件通知設定編目程式](crawler-s3-event-notifications-setup-console-s3-target.md)
+ [為 Data Catalog 資料表的 Amazon S3 事件通知設定編目程式](crawler-s3-event-notifications-setup-console-catalog-target.md)

## 設定 Amazon S3 事件通知的帳戶
<a name="crawler-s3-event-notifications-setup"></a>

完成下列設定任務。請注意括號中的值會參考指令碼中的可設定項。

1. 您需要設定 Amazon S3 儲存貯體的事件通知。

   如需詳細資訊，請參閱 [Amazon S3 事件通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html)。

1. 若要使用以 Amazon S3 事件為基礎的編目程式，您應該在 Amazon S3 儲存貯體上啟用事件通知，在其中根據字首篩選出事件，這些字首與 S3 目標相同並存放在 SQS 中。您可以透過主控台設定 SQS 和事件通知，方法是遵循[演練：設定儲存貯體的通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html)中的步驟。

1. 將下列 SQS 政策新增至編目程式使用的角色。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "sqs:DeleteMessage",
           "sqs:GetQueueUrl",
           "sqs:ListDeadLetterSourceQueues",
           "sqs:ReceiveMessage",
           "sqs:GetQueueAttributes",
           "sqs:ListQueueTags",
           "sqs:SetQueueAttributes",
           "sqs:PurgeQueue"
         ],
         "Resource": "arn:aws:sqs:us-east-1:111122223333:cfn-sqs-queue"
       }
     ]
   }
   ```

------

# 為 Amazon S3 目標的 Amazon S3 事件通知設定編目程式
<a name="crawler-s3-event-notifications-setup-console-s3-target"></a>

請依照下列步驟，使用 AWS 管理主控台 或 為 Amazon S3 目標設定 Amazon S3 事件通知的爬蟲程式 AWS CLI。

------
#### [ AWS 管理主控台 ]

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/guardduty/](https://console.aws.amazon.com/guardduty/)：// 開啟 GuardDuty 主控台。

1.  設定爬蟲程式屬性。如需詳細資訊，請參閱[在 AWS Glue 主控台上設定爬蟲程式組態選項](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console)。

1.  在 **Data source configuration** (資料來源組態) 區段中，您被問到 *Is your data already mapped to AWS Glue tables?* (您的資料是否已對應至 GLU 資料表？) 

    依預設已選取 **Not yet** (尚未)。將其保留為預設值，因為您使用的是 Amazon S3 資料來源，且資料尚未映射至 AWS Glue 資料表。

1.  在 **Data sources** (資料來源) 區段中，選擇 **Add a data source** (新增資料來源)。  
![\[Data source configuration interface with options to select or add data sources for crawling.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-s3-event-console1.png)

1.  在 **Add data source** (新增資料來源) 強制回應視窗中，設定 Amazon S3 資料來源：
   +  **Data source** (資料來源)：依預設，已選取 Amazon S3。
   +  **Network connection** (網路連線) (選用)：選擇 **Add new connection** (新增連線)。
   +  **Location of Amazon S3 data** (Amazon S3 資料的位置)：依預設，已選取 **In this account** (在此帳戶中)。
   +  **Amazon S3 path** (Amazon S3 路徑)：指定在其中網路爬取資料夾和檔案的 Amazon S3 路徑。
   +  **Subsequent crawler runs** (後續爬蟲程式執行)：選擇 **Crawl based on events** (根據事件進行網路爬取) 以針對爬蟲程式使用 Amazon S3 事件通知。
   +  **Include SQS ARN** (包含 SQS ARN)：指定包括有效 SQS ARN 的資料存放區參數。(例如 `arn:aws:sqs:region:account:sqs`)。
   +  **Include dead-letter SQS ARN** (包含無效字母 SQS ARN) (選用)：指定有效的 Amazon 無效字母 SQS ARN。(例如 `arn:aws:sqs:region:account:deadLetterQueue`)。
   +  選擇 **Add an Amazon S3 data source** (新增 Amazon S3 資料來源)。  
![\[Add data source dialog for S3, showing options for network connection and crawl settings.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-s3-event-console2.png)

------
#### [ AWS CLI ]

 以下是設定爬蟲程式使用事件通知來爬取 Amazon S3 AWS CLI 目標儲存貯體的範例 Amazon S3call。

```
Create Crawler:
aws glue update-crawler \
    --name myCrawler \
    --recrawl-policy RecrawlBehavior=CRAWL_EVENT_MODE \
    --schema-change-policy UpdateBehavior=UPDATE_IN_DATABASE,DeleteBehavior=LOG
    --targets '{"S3Targets":[{"Path":"s3://amzn-s3-demo-bucket/", "EventQueueArn": "arn:aws:sqs:us-east-1:012345678910:MyQueue"}]}'
```

------

# 為 Data Catalog 資料表的 Amazon S3 事件通知設定編目程式
<a name="crawler-s3-event-notifications-setup-console-catalog-target"></a>

當您擁有 Data Catalog 資料表時，使用 AWS Glue 主控台為 Amazon S3 事件通知設定編目程式：

1.  設定爬蟲程式屬性。如需詳細資訊，請參閱[在 AWS Glue 主控台上設定爬蟲程式組態選項](https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-configure-changes-console)。

1.  在 **Data source configuration** (資料來源組態) 區段中，您被問到 *Is your data already mapped to AWS Glue tables?* (您的資料是否已對應至 GLU 資料表？) 

    選取 **Yes** (是)，從 Data Catalog 中選取現有資料表作為資料來源。

1.  在 **Glue tables** (Glue 資料表) 區段中，選擇 **Add tables** (新增資料表)。  
![\[Data source configuration interface with options to select existing Glue tables or add new ones.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-s3-event-console1-cat.png)

1.  在 **Add table** (新增資料表) 模式中，設定資料庫和資料表：
   +  **Network connection** (網路連線) (選用)：選擇 **Add new connection** (新增連線)。
   +  **Database** (資料庫)：在 Data Catalog 中選取資料庫。
   +  **Tables** (資料表)：從 Data Catalog 的資料庫中選取一個或多個資料表。
   +  **Subsequent crawler runs** (後續爬蟲程式執行)：選擇 **Crawl based on events** (根據事件進行網路爬取) 以針對爬蟲程式使用 Amazon S3 事件通知。
   +  **Include SQS ARN** (包含 SQS ARN)：指定包括有效 SQS ARN 的資料存放區參數。(例如 `arn:aws:sqs:region:account:sqs`)。
   +  **Include dead-letter SQS ARN** (包含無效字母 SQS ARN) (選用)：指定有效的 Amazon 無效字母 SQS ARN。(例如 `arn:aws:sqs:region:account:deadLetterQueue`)。
   +  選擇**確認**。  
![\[Add Glue tables dialog with network, database, tables, and crawler options.\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawler-s3-event-console2-cat.png)

# 教學課程：新增 AWS Glue 爬蟲程式
<a name="tutorial-add-crawler"></a>

對於這個 AWS Glue 案例，您需要分析主要航空公司的抵達資料，以計算出發機場每月的受歡迎程度。您有以 CSV 格式存放在 Amazon S3 中的 2016 年航班資料。在轉換和分析資料之前，您先將其中繼資料編目至 AWS Glue Data Catalog。

在本教學課程中，讓我們在 Amazon S3 中新增可推斷這些航班記錄中繼資料的爬蟲程式，並在 Data Catalog 中建立資料表。

**Topics**
+ [先決條件](#tutorial-add-crawler-prerequisites)
+ [步驟 1：新增爬蟲程式](#tutorial-add-crawler-step1)
+ [步驟 2：執行爬蟲程式](#tutorial-add-crawler-step2)
+ [步驟 3：檢視 AWS Glue Data Catalog 物件](#tutorial-add-crawler-step3)

## 先決條件
<a name="tutorial-add-crawler-prerequisites"></a>

本教學假設您擁有 AWS 帳戶和 的存取權AWS Glue。

## 步驟 1：新增爬蟲程式
<a name="tutorial-add-crawler-step1"></a>

使用這些步驟來設定和執行爬蟲程式，該爬蟲程式會從存放在 Amazon S3 的 CSV 檔案中擷取中繼資料。

**建立讀取存放在 Amazon S3 上之檔案的爬蟲程式**

1. 在 AWS Glue 服務主控台的左側選單上，選擇**爬蟲程式**。

1. 在爬蟲程式頁面上，選擇**建立爬蟲程式**。這會啟動一系列頁面，提示您輸入爬蟲程式詳細資訊。  
![\[螢幕擷取畫面會顯示爬蟲程式頁面。您可以在此建立爬蟲程式，或編輯、複製、刪除和檢視現有的爬蟲程式。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/crawlers-create_crawler.png)

1. 在爬蟲程式名稱欄位中，輸入 **Flights Data Crawler**，然後選擇 **Next (下一步)**。

   爬蟲程式會呼叫分類器，以推斷資料的結構描述。本教學課程預設使用 CSV 的內建分類器。

1. 對於爬蟲程式來源類型，選擇 **Data stores (資料存放區)**，然後選擇 **Next (下一步)**。

1. 現在讓我們將爬蟲程式指向您的資料。在 **Add a data store (新增資料存放區)** 頁面上，選擇 Amazon S3 資料存放區。本教學課程不使用連線，因此請將 **Connection (連線)** 欄位保留空白 (如果可見)。

   對於 **Crawl data in** (抓取資料位置) 選項，選擇 **Specified path in another account** (指定其他帳戶內的路徑)。然後，對於 **Include path (包含路徑)**，輸入爬蟲程式可以找到航班資料的路徑，也就是 **s3://crawler-public-us-east-1/flight/2016/csv**。輸入路徑後，此欄位的標題會變更為 **Include path (包含路徑)**。選擇**下一步**。

1. 您可以使用單一爬蟲程式來編目多個資料存放區。但是，在本教學課程中，我們只使用一個資料存放區，因此選擇 **No (否)**，然後選擇 **Next (下一步)**。

1. 爬蟲程式需要許可才能存取資料存放區，並在 AWS Glue Data Catalog 中建立物件。若要設定這些許可，請選擇 **Create an IAM role (建立 IAM 角色)**。IAM 角色名稱的開頭為 `AWSGlueServiceRole-`，然後在欄位中輸入角色名稱的最後一部分。輸入 **CrawlerTutorial**，然後選擇 **Next (下一步)**。
**注意**  
若要建立 IAM 角色，您的 AWS 使用者必須擁有 `CreateRole`、`CreatePolicy` 以及 `AttachRolePolicy` 許可。

   精靈會建立名為 的 IAM 角色`AWSGlueServiceRole-CrawlerTutorial`，將 AWS 受管政策連接至`AWSGlueServiceRole`此角色，並新增允許讀取存取 Amazon S3 位置 的內嵌政策`s3://crawler-public-us-east-1/flight/2016/csv`。

1. 建立爬蟲程式的排程。對於 **Frequency (頻率)** 選擇 **Run on demand (隨需執行)**，然後選擇 **Next (下一步)**。

1. 爬蟲程式會在您的 Data Catalog 中建立資料表。資料表包含在 Data Catalog 的資料庫中。首先，選擇 **Add database (新增資料庫)** 建立資料庫。在彈出式視窗中，輸入 **test-flights-db** 做為資料庫名稱，然後選擇 **Create (建立)**。

   接下來，針對 **Prefix added to tables (新增至資料表的字首)** 輸入 **flights**。針對其餘的選項，使用預設值並選擇 **Next (下一步)**。

1. 驗證您在 **Add crawler (新增爬蟲程式)** 精靈中做出的選擇。如果您看到任何錯誤，您可以選擇 **Back (上一步)** 返回上一頁並進行變更。

   檢閱完資訊後，請選擇 **Finish (完成)** 建立爬蟲程式。

## 步驟 2：執行爬蟲程式
<a name="tutorial-add-crawler-step2"></a>

建立爬蟲程式之後，精靈會將您傳送至爬蟲程式檢視頁面。因為您建立具有隨需排程的爬蟲程式，所以您可以選擇執行爬蟲程式。

**執行爬蟲程式**

1. 此頁面頂端附近的橫幅可讓您知道已建立爬蟲程式，並詢問您是否要立即執行它。選擇 **Run it now? (現在執行？)** 執行爬蟲程式。

   橫幅會變更為針對您的爬蟲程式顯示「正在嘗試執行」和「正在執行」訊息。爬蟲程式開始執行後，橫幅就會消失，而且爬蟲程式顯示會更新，以顯示爬蟲程式的 Starting (啟動中) 狀態。一分鐘後，您可以按一下 [重新整理] 圖示來更新資料表中顯示之爬蟲程式的狀態。

1. 爬蟲程式完成時，會出現一個新的橫幅，說明爬蟲程式所做的變更。您可以選擇 **test-flights-db** 連結以檢視 Data Catalog 物件。

## 步驟 3：檢視 AWS Glue Data Catalog 物件
<a name="tutorial-add-crawler-step3"></a>

爬蟲程式會讀取來源位置的資料，並在 Data Catalog 中建立資料表。資料表是呈現您資料的中繼資料定義，包括其結構描述。 Data Catalog 中的資料表不包含資料。相反地，您可以使用這些資料表做為任務定義中的來源或目標。

**檢視爬蟲程式建立的 Data Catalog 物件**

1. 在左側導覽的 **Data catalog ( Data Catalog )** 下，選擇 **Databases (資料庫)**。在這裡，您可以查看爬蟲程式所建立的 `flights-db` 資料庫。

1. 在左側導覽中的 **Data catalog ( Data Catalog )** 及 **Databases (資料庫)** 下方，選擇 **Tables (資料表)**。在這裡，您可以檢視爬蟲程式所建立的 `flightscsv` 資料表。如果您選擇資料表名稱，則可以檢視資料表設定、參數和屬性。在此檢視中向下捲動，您可以檢視結構描述，也就是資料表的欄和資料類型的相關資訊。

1. 如果選擇資料表檢視頁面上的 **View partitions (檢視分割區)**，您可以看到為資料建立的分割區。第一欄是資料分割區索引鍵。