

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

# 填入 AWS Glue 資料目錄
填入 Data Catalog

您可以使用 AWS Glue Data Catalog 下列方法填入 ：
+ AWS Glue 編目程式 – AWS Glue 編目程式 可以自動探索和分類資料來源，例如資料庫、資料湖和串流資料。編目程式是填入 Data Catalog 的最常見建議方法，因為其可以自動發現和推斷各種資料來源的中繼資料。
+  手動新增中繼資料 – 您可以使用 AWS Glue 主控台、Lake Formation 主控台、 AWS CLI或 AWS Glue APIs，手動定義資料庫、資料表和連線詳細資訊，並將其新增至 Data Catalog。當您想要針對無法編目的資料來源編製目錄時，手動輸入非常有用。
+ 與其他 AWS 服務整合 – 您可以使用 AWS Lake Formation 和 Amazon Athena 等服務的中繼資料填入 Data Catalog。這些服務可以在 Data Catalog 中發現和註冊資料來源。
+  從現有的中繼資料儲存庫填入 - 如果您有現有的中繼資料存放區，例如 Apache Hive Metastore，您可以使用 AWS Glue 將該中繼資料匯入 Data Catalog。如需詳細資訊，請參閱 GitHub 上的 [Migration between the Hive Metastore and the AWS Glue Data Catalog](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Hive_metastore_migration)。

**Topics**
+ [

# 使用編目程式填入 Data Catalog
](add-crawler.md)
+ [

# 手動定義中繼資料
](populate-dg-manual.md)
+ [

# 與 Amazon S3 資料表整合
](glue-federation-s3tables.md)
+ [

# 與其他 AWS 服務整合
](populate-dc-other-services.md)
+ [

# Data Catalog 設定
](console-data-catalog-settings.md)

# 使用編目程式填入 Data Catalog
使用 AWS Glue 編目程式

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

## 工作流程


以下任務流程圖顯示 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)

## 爬蟲程式的運作方式


爬蟲程式執行時，它會進行以下動作來詢問資料存放區：
+ **分類器資料會判斷格式、結構描述及原始資料的相關屬性** – 您可以透過建立自訂分類器來設定分類的結果。
+ **將資料分組至資料表或分區中** – 資料是根據爬蟲程式啟發來加以分組。
+ **將中繼資料寫入到 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 個字元。爬蟲程式會截斷產生的名稱以符合限制。
+ 如果遇到重複的資料表名稱，爬蟲程式會為名稱加上雜湊字串尾碼。

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

## 爬蟲程式如何決定何時建立分割區？


當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/)。

# 支援的網路爬取資料來源


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


| 爬蟲程式使用的存取類型 | 資料存放區 | 
| --- | --- | 
| 原生用戶端 |  [\[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。

# 爬蟲程式的先決條件


爬蟲程式會擔任您在定義角色時指定的 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)。

# 定義和管理分類器
定義和管理分類器

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

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

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

## 我應該在何時使用分類器？


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

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

## 自訂分類器


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

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

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

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

## 內建分類器


 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 分類器


內建 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)。

# 為各種資料格式撰寫自訂分類器


您可以提供自訂分類器，分類在 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 自訂分類器


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 分類器的自訂值


定義 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 追蹤建立時間、上次更新時間和您的分類器版本。

### 內建模式


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 自訂分類器


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

### XML 分類器的自訂分類器值


當您定義 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 自訂分類器


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

### AWS Glue 中的自訂分類器值


當您定義 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 自訂分類器


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

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

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

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

### AWS Glue 中的自訂分類器值


當定義 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 主控台建立分類器
在主控台上建立分類器

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

## 建立分類器


若要在 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)。

## 檢視分類器


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

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

## 管理分類器


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

# 設定編目程式


編目程式會存取您的資料存放區、識別中繼資料，以及在 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：設定爬蟲程式屬性
設定編目程式屬性

**設定編目程式**

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：選擇資料來源和分類器
選擇資料來源和分類器

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

如需有關受支援資料來源的詳細資訊，請參閱[支援的網路爬取資料來源](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：設定安全設定
設定安全設定

**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：設定輸出和排程
設定輸出和排程

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

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

# 步驟 4：檢閱和建立
Review and create (檢閱和建立)

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

# 排程爬蟲程式
排程爬蟲程式

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

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

**Topics**
+ [

# 建立編目程式排程
](create-crawler-schedule.md)
+ [

# 為現有的編目程式建立排程
](Update-crawler-schedule.md)

# 建立編目程式排程


您可以使用 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)。

# 為現有的編目程式建立排程


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

------
#### [ 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 * * ? *)
```

------

# 檢視爬蟲程式結果和詳細資訊


 爬蟲程式成功執行後，它會在 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 資料表上設定的參數


 這些資料表屬性是由 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 不支援註解。 | 

# 自訂編目程式行為


當您設定 時 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)

# 排程增量網路爬取以新增分區
排程增量網路爬取

您可以設定 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 中更新已刪除的物件。

# 產生分區索引


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 }'
```

------

## 分割區索引的使用說明

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

# 防止編目程式變更現有的結構描述
防止編目程式變更結構描述

 您可以防止 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 包含路徑建立單一結構描述
為每個 S3 路徑建立單一結構描述

依預設，爬蟲程式為 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" }
}
```

------

# 指定資料表位置和分區層級


依預設，編目程式為 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}
}"
```

------

# 指定編目程式可建立的資料表數目上限
指定資料表閾值

您可以選擇`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 憑證


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

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

## 當爬蟲程式和已註冊的 Amazon S3 位置或資料目錄資料表位於同一帳戶 (帳戶內網路爬取) 時，需要進行設定


若要允許爬蟲程式使用 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 位置位於不同帳戶 (跨帳戶網路爬取) 時需要進行設定


若要允許爬蟲程式使用 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 事件通知加速網路爬取


您可以將爬蟲程式設定為使用 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 萬則訊息。

## 考量和限制


在您設定編目程式使用 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 事件通知的帳戶


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

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 事件通知設定編目程式


請依照下列步驟，使用 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 事件通知設定編目程式


當您擁有 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 爬蟲程式


對於這個 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)

## 先決條件


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

## 步驟 1：新增爬蟲程式


使用這些步驟來設定和執行爬蟲程式，該爬蟲程式會從存放在 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：執行爬蟲程式


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

**執行爬蟲程式**

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

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

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

## 步驟 3：檢視 AWS Glue Data Catalog 物件


爬蟲程式會讀取來源位置的資料，並在 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 (檢視分割區)**，您可以看到為資料建立的分割區。第一欄是資料分割區索引鍵。

# 手動定義中繼資料


 AWS Glue Data Catalog 是中央儲存庫，可存放資料來源和資料集的中繼資料。雖然編目程式可以為支援的資料來源的中繼資料進行自動爬取和填入，但在某些情況下，可能需要在 Data Catalog 中手動定義中繼資料：
+ 不支援的資料格式 – 如果您擁有編目程式不支援的資料來源，則需要在 Data Catalog 中手動定義這些資料來源的中繼資料。
+ 自訂中繼資料需求 – 根據預先定義的規則和慣例 AWS Glue 編目程式 推斷中繼資料。如果您有推 AWS Glue 編目程式 斷中繼資料未涵蓋的特定中繼資料需求，您可以手動定義中繼資料以符合您的需求 
+ 資料治理和標準化 – 在某些情況下，基於資料治理、合規或安全原因，您可能希望對中繼資料定義有更多控制權。手動定義中繼資料可確保中繼資料符合組織的標準和政策。
+ 未來資料擷取的預留位置 – 如果您擁有無法立即使用或存取的資料來源，則可以建立空白結構描述資料表作為預留位置。資料來源變為可用之後，就可以將實際資料填入資料表，同時維持預先定義的結構。

 若要手動定義中繼資料，您可以使用 AWS Glue 主控台、Lake Formation 主控台、 AWS Glue API 或 AWS Command Line Interface (AWS CLI)。您可以建立資料庫、資料表和分區，並指定中繼資料屬性，例如資料欄名稱、資料類型、說明和其他屬性。

# 建立資料庫


資料庫用於在 AWS Glue中組織中繼資料資料表。當您在 中定義資料表時 AWS Glue Data Catalog，您可以將其新增至資料庫。資料表一次只能隸屬於一個資料庫。

您的資料庫可包含多個資料表，用來定義來自多種不同資料存放區的資料。此資料可包含 Amazon Simple Storage Service (Amazon S3) 中物件，以及 Amazon Relational Database Service 中的關聯資料表。

**注意**  
當您從 AWS Glue Data Catalog 刪除資料庫，也會刪除資料庫中內含的所有資料表。

 若要檢視資料庫清單，請登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 的 AWS Glue 主控台。選擇 **Databases** (資料庫)，接著在清單中選擇資料庫名稱，以檢視詳細資訊。

 您可以在 ** 主控台的 **DatabasesAWS Glue 標籤新增、編輯、刪除資料庫：
+ 要建立新資料庫，請選擇 **Add database** (新增資料庫) 並提供名稱和描述。為了相容於其他中繼資料存放 (例如 Apache Hive)，名稱會變為小寫字元。
**注意**  
如果您預計從 Amazon Athena 存取資料庫，則應提供只有英數字元和底線字元的名稱。如需詳細資訊，請參閱 [Athena 名稱](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)。
+  若要編輯資料庫的描述，請選取資料庫名稱旁的核取方塊，然後選擇 **Edit** (編輯)。
+  若要刪除資料庫，請選取資料庫名稱旁的核取方塊，然後選擇 **Remove** (移除)。
+  若要顯示資料庫中包含的資料表清單，請選擇資料庫名稱，資料庫屬性就會顯示資料庫中的所有資料表。

要變更爬蟲程式寫入的資料庫，您必須先變更爬蟲程式定義。如需詳細資訊，請參閱[使用編目程式填入 Data Catalog](add-crawler.md)。

## 資料庫資源連結



|  | 
| --- |
| AWS Glue 主控台最近已更新。目前版本的主控台不支援資料庫資源連結。 | 

 Data Catalog 也可以包含資料庫的*資源連結*。資料庫資源連結是本機或共用資料庫的連結。您目前只可以在 AWS Lake Formation建立資源連結。建立資料庫的資源連結後，您可以在任何使用資料庫名稱的地方使用資源連結名稱。連同您擁有或與您共用的資料庫，資料表資源連結會由 `glue:GetDatabases()` 傳回，並顯示為 AWS Glue 主控台中 **Databases (資料庫)** 頁面的項目。

 Data Catalog 也可以包含資料表資源連結。

如需資源連結的詳細資訊，請參閱 *AWS Lake Formation 開發人員指南*中的[建立資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)。

# 建立資料表


即使執行爬蟲程式是清查資料存放區中資料的建議方法，您也可以 AWS Glue Data Catalog 手動將中繼資料表新增至 。此方法可讓您對中繼資料定義進行更多控制，並根據特定需求自訂中繼資料定義。

也可手動將資料表新增到 Data Catalog ，方式如下：
+ 使用 AWS Glue 主控台，在 AWS Glue Data Catalog中手動建立資料表。如需詳細資訊，請參閱[使用主控台建立資料表](#console-tables)。
+ 在 [AWS Glue API](aws-glue-api.md) 中使用 `CreateTable` 操作，在 AWS Glue Data Catalog中建立資料表。如需詳細資訊，請參閱[CreateTable 動作 (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable)。
+ 使用 CloudFormation 範本。如需詳細資訊，請參閱[適用於 AWS Glue 的AWS CloudFormation](populate-with-cloudformation-templates.md)。

當您使用主控台或 API 手動定義資料表時，需指定資料表結構描述和分類欄位的值，以表示資料來源中的資料類型和格式。如果是爬蟲程式來建立資料表，資料格式和結構描述就會由內建分類器或自訂分類器決定。如需使用 AWS Glue 主控台建立資料表的詳細資訊，請參閱 [使用主控台建立資料表](#console-tables)。

**Topics**
+ [

## 資料表分割區
](#tables-partition)
+ [

## 資料表資源連結
](#tables-resource-links)
+ [

## 使用主控台建立資料表
](#console-tables)
+ [

# 建立分區索引
](partition-indexes.md)
+ [

## 使用爬蟲程式更新手動建立的資料目錄資料表
](#update-manual-tables)
+ [

## Data Catalog 資料表屬性
](#table-properties)

## 資料表分割區


Amazon Simple Storage Service (Amazon S3) 資料夾的 AWS Glue 資料表定義可描述已分割的資料表。例如，為了改善查詢效能，分割的資料表可能使用月份名稱為金鑰，以將每月資料分隔成不同的檔案。在 AWS Glue 中，資料表定義包含資料表的分割金鑰。AWS Glue 在評估 Amazon S3 資料夾中的資料以編目資料表時，會決定要新增個別資料表或分割資料表。

您可以在資料表上建立分割區索引來擷取分割區的子集，而不是載入資料表中的所有分割區。如需使用分割區索引的詳細資訊，請參閱[建立分區索引](partition-indexes.md)。

要讓 AWS Glue 為 Amazon S3 資料夾建立分割資料表，以下所有條件都必須為 true：
+ 檔案的結構描述類似，由 AWS Glue 決定。
+ 檔案的日期格式相同。
+ 檔案的壓縮格式相同。

例如，您可能擁有一個名稱為 `my-app-bucket` 的 Amazon S3 儲存貯體，用於存放 iOS 和 Android 應用程式的銷售資料。資料按照年、月、日分割。iOS 和 Android 銷售的資料檔案有相同的結構描述、日期格式和壓縮格式。在 中 AWS Glue Data Catalog，AWS Glue爬蟲程式會使用年、月和日分割索引鍵建立一個資料表定義。

以下的 Amazon S3 `my-app-bucket` 清單顯示了一些分割區。`=` 符號用於指派分割區金鑰值。

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## 資料表資源連結



|  | 
| --- |
| AWS Glue 主控台最近已更新。目前版本的主控台不支援資料表資源連結。 | 

 Data Catalog 也可以包含資料表的*資源連結*。資料表資源連結是本機或共用資料表的連結。您目前只可以在 AWS Lake Formation建立資源連結。建立資料表的資源連結後，您可以在任何使用資料表名稱的地方使用資源連結名稱。連同您擁有或與您共用的資料表，資料表資源連結會由 `glue:GetTables()` 傳回，並顯示為 AWS Glue 主控台中 **Tables (資料表)** 的項目。

 Data Catalog 也可以包含資料庫資源連結。

如需資源連結的詳細資訊，請參閱 *AWS Lake Formation 開發人員指南*中的[建立資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)。

## 使用主控台建立資料表


中的資料表 AWS Glue Data Catalog 是中繼資料定義，代表資料存放區中的資料。您可在執行爬蟲程式時建立資料表，或者也可以在 AWS Glue 主控台中手動建立資料表。在 ** 主控台中的 **TablesAWS Glue (資料表) 清單，會顯示您資料表中繼資料的值。在建立 ETL (擷取、轉換和載入) 任務時，您可以使用資料表的定義來指定來源與目標。

**注意**  
隨著 AWS 管理主控台的最新變更，您可能需要修改現有的 IAM 角色，才能擁有 [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables)許可。針對新角色建立，`SearchTables` API 許可已新增為預設值。

若要開始使用，請登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 的 AWS Glue 主控台。選擇 **Tables** (資料表) 索引標籤，然後使用 **Add tables** (新增資料表) 按鈕來建立資料表 (藉由使用爬蟲程式或手動輸入屬性)。

### 在主控台上新增資料表


若要使用爬蟲程式來新增資料表，請依序選擇 **Add tables** (新增資料表)、**Add tables using a crawler** (使用爬蟲程式來新增資料表)。然後，依照 **Add crawler** (新增爬蟲程式) 精靈中的說明來進行操作。當爬蟲程式執行時，資料表就會新增至 AWS Glue Data Catalog。如需詳細資訊，請參閱[使用編目程式填入 Data Catalog](add-crawler.md)。

如果您知道在 Data Catalog 中建立 Amazon Simple Storage Service (Amazon S3) 資料表定義所需的屬性，則可以使用資料表精靈來建立。依序選擇 **Add tables** (新增資料表)、**Add table manually** (手動新增資料表)，然後依照 **Add table** (新增資料表) 精靈中的說明來進行操作。

透過主控台來手動新增資料表時，請注意下列事項：
+ 如果您預計從 Amazon Athena 存取資料表，則應提供只有英數字元和底線字元的名稱。如需詳細資訊，請參閱 [Athena 名稱](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)。
+ 您的來源資料的位置必須是 Amazon S3 路徑。
+ 資料的資料格式必須符合精靈中列出的其中一種格式。對應的分類 SerDe 和其他資料表屬性會根據選擇的格式自動填入。您可以使用下列格式定義資料表：  
**Avro**  
Apache Avro JSON 二進位格式。  
**CSV**  
字元分隔值。您也可以指定逗號、管道、分號、標籤或 Ctrl-A 的分隔符號。  
**JSON**  
JavaScript 物件標記法。  
**XML**  
可擴展標記語言的格式。指定定義資料中資料列的 XML 標籤。資料欄是在資料列標籤中定義。  
**Parquet**  
Apache Parquet 單欄式儲存。  
**ORC**  
最佳化資料列單欄式 (ORC) 檔案格式。旨在高效存放 Hive 資料的格式。
+ 您可以定義資料表的分割區索引鍵。
+ 目前，透過主控台所建立的分區資料表，不能在 ETL 工作中使用。

### 資料表屬性


下列是一些重要的資料表屬性：

**名稱**  
此名稱在資料表建立已決定，您無法變更。在許多的 AWS Glue 操作中，都會參照資料表的名稱。

**資料庫**  
您的資料表所在的容器物件。此物件包含存在於 中的資料表組織， AWS Glue Data Catalog 可能與資料存放區中的組織不同。當您刪除資料庫，也會從 Data Catalog 刪除資料庫中內含的所有資料表。

**Description**  
資料表的說明。您可以撰寫說明，來協助您了解資料表的內容。

**資料表格式**  
指定建立標準 AWS Glue 資料表或 Apache Iceberg 格式的資料表。  
Data Catalog 提供下列資料表最佳化選項，以管理資料表儲存並提高 Iceberg 資料表的查詢效能。  
+ **壓縮** – 合併和重寫資料檔案，移除過時的資料，並將分段資料合併為更大、更有效的檔案。
+ **快照保留 **– 快照是 Iceberg 資料表的時間戳記版本。快照保留組態可讓客戶強制執行保留快照的時間長度，以及要保留的快照數量。設定快照保留最佳化工具可透過移除較舊、不必要的快照及其相關聯的基礎檔案，協助管理儲存體負荷。
+ **孤立檔案刪除** – 孤立檔案是 Iceberg 資料表中繼資料不再參考的檔案。這些檔案可能會隨著時間累積，特別是在資料表刪除或 ETL 任務失敗等操作之後。啟用孤立檔案刪除 AWS Glue 可讓 定期識別和移除這些不必要的檔案，釋放儲存空間。
如需詳細資訊，請參閱[最佳化處理 Iceberg 資料表](table-optimizers.md)。

**最佳化組態**  
可以使用預設的設定或自訂設定來啟用資料表最佳化工具。

**IAM 角色**  
 若要執行資料表最佳化工具，服務會代表您擔任 IAM 角色。您可以使用下拉式選單選擇 IAM 角色。請確認角色具有啟用壓縮的必要權限。  
若要進一步了解 IAM 角色的必要權限，請參閱 [資料表最佳化先決條件](optimization-prerequisites.md)。

**Location**  
指標，指向此資料表定義所代表資料存放區中資料的位置。

**分類**  
建立資料表時所提供的分類值。這通常是在爬蟲程式執行時寫入，用來指定來源資料的格式。

**上次更新**  
此資料表在 Data Catalog 中更新的時間和日期 (UTC)。

**加入日期**  
此資料表新增至 Data Catalog 的時間和日期 (UTC)。

**已棄用**  
如果 AWS Glue 發現 Data Catalog 中的資料表不再存在於其原始資料存放區，會在 Data Catalog 中將此資料表標記為已作廢。如果您執行的任務參照了已作廢的資料表，則任務可能會失敗。針對參照已作廢資料表的任務來進行編輯，將這些做為來源和目標的資料表移除。我們建議您刪除不再需要的已作廢資料表。

**連線**  
如果 AWS Glue 需要連線至您的資料存放區，連線的名稱會與資料表相關。

### 檢視與管理資料表詳細資訊


若要檢視現有資料表的詳細資訊，請在清單中選擇資料表名稱，然後選擇 **Action, View details** (動作，檢視詳細資訊)。

資料表的詳細資訊包括資料表的屬性及其結構描述。此檢視會顯示資料表的結構描述，包括欄名稱 (依資料表定義的順序排列)、資料類型和分區金鑰欄位。如果欄為複雜的類型，您可以選擇 **View properties** (檢視屬性) 來顯示該欄位結構的詳細資訊，如下列範例所示：

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

如需關於資料表的屬性 (例如 `StorageDescriptor`) 的詳細資訊，請參閱 [StorageDescriptor 結構](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor)。

若要變更資料表的結構描述，請選擇 **Edit schema** (編輯結構描述) 來新增和移除欄、變更欄名稱和變更資料類型。

 若要比較資料表的不同版本 (包括其結構描述)，請選擇 **Compare versions** (比較版本) 來檢視資料表兩種結構描述版本的並列比較。如需詳細資訊，請參閱[比較資料表結構描述版本](#console-tables-schema-comparison)。

若要顯示 Amazon S3 分區中所包含的檔案，請選擇 **View partition (檢視分割區)**。對於 Amazon S3 資料表，**Key (金鑰)** 欄會顯示分區金鑰，用來將來源資料存放區中的資料表分區。分割是一種根據索引鍵資料欄的值將資料表分割為相關部分的方法，例如日期、位置或部門。如需關於分區的詳細資訊，請搜尋網際網路，取得「Hive 分區」的相關資訊。

**注意**  
若要取得檢視資料表詳細資訊的逐步指引，請參閱主控台中的 **Explore table** (了解資料表) 教學。

### 比較資料表結構描述版本


 當您比較兩個版本的資料表結構定義時，您可以透過展開和折疊巢狀資料列、並排比較兩個版本的結構定義，以及並排檢視資料表屬性，來比較巢狀資料列變更。

 比較版本 

1.  從 AWS Glue 主控台中，依序選擇**資料表**、**動作**和**比較版本**。  
![\[螢幕擷取畫面會顯示選取後的「動作」按鈕。下拉式功能表會顯示「比較版本」選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  選擇版本下拉式選單，以選擇要比較的版本。比較結構描述時，「結構描述」索引標籤會以橙色反白顯示。

1.  當您比較兩個版本之間的資料表時，資料表結構描述會顯示在畫面的左側和右側。這可讓您透過並排比較「資料欄名稱」、「資料類型」、「索引鍵」和「註解」欄位，以視覺化方式判斷變更。發生變更時，彩色圖示會顯示所做變更的類型。
   +  已刪除 – 以紅色圖示顯示，指示資料欄已從舊版資料表結構描述中移除的位置。
   +  已編輯或已移動 – 以藍色圖示顯示，指示資料欄在較新版資料表結構描述中修改或移動的位置。
   +  已新增 – 以綠色圖示顯示，指示資料欄新增至較新版資料表結構描述的位置。
   +  巢狀變更 – 以黃色圖示顯示，指示巢狀資料欄包含變更的位置。選擇要展開的資料欄，並檢視已刪除、已編輯、已移動或已新增的資料欄。  
![\[螢幕擷取畫面會顯示兩個版本之間的資料表結構描述比較 左側是較舊版本。右側是較新版本。刪除圖示位於從較舊版本移除且不再於較新版本提供的資料欄旁邊。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  使用篩選欄位搜尋列，根據您在此輸入的字元顯示欄位。如果您在任一資料表版本中輸入資料欄名稱，則篩選的欄位會顯示在兩個資料表版本中，以顯示發生變更的位置。

1.  若要比較屬性，請選擇**屬性索引標籤**。

1.  若要停止比較版本，請選擇**停止比較**，以返回資料表清單。

# 建立分區索引
建立分區索引

隨著時間的推移，數十萬個分割區被新增到資料表中。[GetPartitions API](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) 用於擷取資料表中的分割區。API 會傳回符合請求中所提供表達式的分區。

讓我們以 *sales\$1data* 資料表為例，其由 *Country*、*Category*、*Year*、*Month* 和 *creationDate* 索引鍵分區。如果想要取得 2020 年度 *2020 年 8 月 15 日之後* *Books* 類別的所有銷售項目，則必須使用表達式 "Category = 'Books' and creationDate > '2020-08-15'" 對 Data Catalog 發出 `GetPartitions` 請求。

如果資料表上沒有分割區索引，AWS Glue 會載入資料表的所有分割區，然後使用使用者在 `GetPartitions` 請求中提供的查詢表達式來篩選載入的分割區。查詢需要更多的時間來執行，因為沒有索引的資料表上的分割區數目會增加。使用索引，`GetPartitions` 查詢可嘗試擷取分割區的子集，而不是載入資料表中的所有分割區。

**Topics**
+ [

## 關於分割區索引
](#partition-index-1)
+ [

## 建立具有分割區索引的資料表
](#partition-index-creating-table)
+ [

## 將分割區索引新增至現有資料表
](#partition-index-existing-table)
+ [

## 描述資料表上的分割區索引
](#partition-index-describing)
+ [

## 使用分割區索引的限制
](#partition-index-limitations)
+ [

## 使用索引進行最佳化的 GetPartitions 呼叫
](#partition-index-getpartitions)
+ [

## 與引擎整合
](#partition-index-integration-engines)

## 關於分割區索引


在您建立分割區索引時，指定已存在於指定資料表上的分割區索引鍵清單。分割區索引是在資料表中定義的分割區索引鍵的子清單。分割區索引可以在資料表上定義的分割區索引鍵的任何排列上建立。對於上述 *sales\$1data* 資料表，可能的索引包括 (country, category, creationDate)、(country, category, year)、(country, category)、(country)、(category, country, year, month) 等。

 Data Catalog 會依建立索引時提供的順序連接分割區值。當分割區新增至資料表時，索引會一致地建立。可以針對字串 (string、char 和 varchar)、數字 (int、bigint、long、tinyint 和 smallint) 和日期 (yyyy-MM-dd) 資料欄類型建立索引。

**支援的資料類型**
+ 日期 – ISO 格式的日期，例如 `YYYY-MM-DD`。例如，日期 `2020-08-15`。該格式使用連字號 (‐) 來分隔年、月和日。索引的允許日期範圍從 `0000-01-01` 到 `9999-12-31`。
+ 字串 – 用單引號或雙引號括住的字串文字。
+ 字元 – 固定長度的字元資料，介於 1 到 255 的指定長度，例如 char(10)。
+ 可變字元 – 可變長度的字元資料，介於 1 到 65535 的指定長度，例如 varchar(10)。
+ 數值 – int、biint、long、tinyint 和 smallint

數值、字串、日期資料類型的索引支援 =、>、> =、<、<= 以及 between 運算子。索引解決方案目前只支援 `AND` 邏輯運算子。使用索引進行篩選的表達式會忽略具有運算子「LIKE」、「IN」、「OR」和「NOT」的子表達式。篩選忽略的子表達式會在套用索引篩選之後擷取的分割區上完成。

對於新增到資料表中的每個分割區，會有一個相應的索引項目建立。對於具有 'n' 個分割區的資料表，1 個分割區索引會產生 'n' 個分割區索引項目。同一個資料表上的 'm' 個分割區索引會產生 'm\$1n' 個分割區索引項目。每個分割區索引項目將根據目前的 AWS Glue Data Catalog 儲存體的定價政策。如需儲存物件定價的詳細資訊，請參閱 [AWS Glue 定價](https://aws.amazon.com/glue/pricing/)。

## 建立具有分割區索引的資料表


您可以在建立資料表期間建立分割區索引。`CreateTable` 要求會取得 [`PartitionIndex` 物件](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex)的清單作為輸入。指定資料表上最多可以建立 3 個分割區索引。每個分割區索引都需要一個名稱和為資料表定義的 `partitionKeys` 清單。在資料表上建立的索引可以使用 [`GetPartitionIndexes` API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes) 擷取

## 將分割區索引新增至現有資料表


若要將分割區索引新增至現有資料表，請使用 `CreatePartitionIndex` 操作。每個 `CreatePartitionIndex` 操作只能建立一個 `PartitionIndex`。新增索引不會影響資料表的可用性，因為資料表會在建立索引時繼續可用。

新增分割區的索引狀態設定為 CREATING，並啟動索引資料的建立。如果建立索引的處理程序成功，indexStatus 會更新為 ACTIVE，並且對於不成功的處理程序，索引狀態會更新為 FAILED。索引建立可能會因多種原因而失敗，您可以使用 `GetPartitionIndexes` 作業擷取失敗詳細資訊。可能失敗如下：
+ ENCRYPTED\$1PARTITION\$1ERROR — 不支援在具有加密分割區的資料表上建立索引。
+ INVALID\$1PARTITION\$1TYPE\$1DATA\$1ERROR — 當 `partitionKey` 值不是對應 `partitionKey` 資料類型的有效值時觀察到。例如：具有 'int' 資料類型的 `partitionKey` 有一個 'foo' 值。
+ MISSING\$1PARTITION\$1VALUE\$1ERROR — 當 `indexedKey` 的 `partitionValue` 不存在時觀察到。當資料表沒有一致地進行分割時，可能會發生這種情況。
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR — 當索引分割區索引鍵的值包含字元 \$1u0000、\$1u0001 或 \$1u0002 時觀察到。
+ INTERAL\$1ERROR — 建立索引時發生內部錯誤。

## 描述資料表上的分割區索引


若要擷取資料表上建立的分割區索引，請使用 `GetPartitionIndexes` 操作。回應會傳回資料表上的所有索引，以及每個索引的目前狀態 (`IndexStatus`)。

分割區索引的 `IndexStatus` 會是下列其中一項：
+ `CREATING` – 正在建立索引，尚無法使用。
+ `ACTIVE`— 索引已準備就緒可供使用。請求可以使用索引來執行最佳化的查詢。
+ `DELETING` – 正在刪除索引，無法再使用。處於活動狀態的索引可以使用 `DeletePartitionIndex` 請求，該請求將狀態從 ACTIVE 移動到 DELETING。
+ `FAILED` — 在現有資料表上建立索引失敗。每個資料表儲存最後 10 個失敗的索引。

在現有資料表上建立的索引的可能狀態轉換是：
+ CREATING → ACTIVE → DELETING
+ CREATING → FAILED

## 使用分割區索引的限制


建立分割區索引之後，請注意下列資料表和分割區功能變更：

**建立新分區 (新增索引之後)**  
在資料表上建立分割區索引之後，新增至資料表的所有新分割區都會驗證索引鍵的資料類型檢查。索引索引鍵的分割區值將針對資料類型格式進行驗證。如果資料類型檢查失敗，建立分割區作業將會失敗。對於 *sales\$1data*，如果針對 (category, year) 索引鍵建立索引，其中 category 為 `string` 類型且 year 為 `int` 類型，則建立具有 YEAR 值為「foo」的新分割區將失敗。

啟用索引之後，新增具有索引索引鍵值的分割區，其字元為 U\$10000、U\$100001 和 U\$10002 將會開始失敗。

**資料表更新**  
在資料表上建立分割區索引之後，您就無法修改現有分割區索引鍵的分割區索引鍵名稱，也無法變更與索引註冊之索引鍵的類型或順序。

## 使用索引進行最佳化的 GetPartitions 呼叫


當您在具有索引的資料表上呼叫 `GetPartitions`，您可以包含表達式，如果適用， Data Catalog 將使用索引 (如果可能)。索引的第一個索引鍵應該在用於篩選索引的表達式中傳遞。篩選中的索引最佳化會盡最大努力應用。 Data Catalog 會嘗試盡可能使用索引最佳化，但如果遺失索引或不受支援的運算子，它會回退到載入所有分割區的現有實作。

於上述 *sales\$1data* 資料表，讓我們新增索引 [Country, Category, Year]。如果表達式中未傳遞 "Country"，註冊的索引將無法使用索引篩選分割區。您最多可以新增 3 個索引，以支援各種查詢模式。

讓我們舉一些範例表達式，看看索引如何在它們上運作：


| 表達式 | 索引的使用方式 | 
| --- | --- | 
|  Country = 'US'  |  索引將用於篩選分割區。  | 
|  Country = 'US' and Category = 'Shoes'  |  索引將用於篩選分割區。  | 
|  Category = 'Shoes'  |  表達式中沒有提供 "country"，所以不會使用索引。所有分割區將被載入以傳回回應。  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018'  |  索引將用於篩選分割區。  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018' and month = 2  |  索引將用於擷取 country = "US" 和 category = "shoes" 和 year > 2018 的所有分割區。然後，將執行月份表達式上的篩選。  | 
|  Country = 'US' AND Category = 'Shoes' OR Year > '2018'  |  由於 `OR` 運算子存在於表達式中，因此不會使用索引。  | 
|  Country = 'US' AND Category = 'Shoes' AND (Year = 2017 OR Year = '2018')  |  索引將用於擷取 country = "US" 和 category = "shoes" 的所有分割區然後執行對年份表達式的篩選。  | 
|  Country in ('US', 'UK') AND Category = 'Shoes'  |  由於目前不支援 `IN` 運算子，因此不會使用索引進行篩選。  | 
|  Country = 'US' AND Category in ('Shoes', 'Books')  |  索引將用於擷取具有 country = "US" 的所有分割區，然後執行對「類別」表達式的篩選。  | 
|  Country = 'US' AND Category in ('Shoes', 'Books') AND (creationDate > '2023-9-01'  |  索引將用於擷取 country = "US" 且 creationDate > '2023-9-01' 的所有分區，然後執行對「類別」表達式的篩選。  | 

## 與引擎整合


AWS Glue 中的索引處於 ACTIVE 狀態後，Redshift Spectrum、Amazon EMR 和 AWS Glue ETL Spark DataFrames 就可以利用索引來擷取分區。[Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) 和 [AWS Glue ETL 動態框架](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates)會要求您遵循額外的步驟以利用索引進行查詢改進。

### 啟用分區篩選


若要在 Athena 中啟用分區篩選，需要更新資料表屬性，如下所示：

1. 在 AWS Glue 主控台**的資料目錄**下，選擇**資料表**。

1. 選擇 表格。

1. 在**動作**下，選擇**編輯資料表**。

1. 在**資料表屬性**下，新增下列項目：
   + 索引鍵 –`partition_filtering.enabled`
   + 值 – `true`

1. 選擇**套用**。

或者，也可以在 Athena 中執行 [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) 查詢來設定此參數。

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## 使用爬蟲程式更新手動建立的資料目錄資料表
使用爬蟲程式更新手動建立的資料表

您可能想要手動建立 AWS Glue Data Catalog 資料表，然後使用AWS Glue爬蟲程式保持更新狀態。按排程執行的爬蟲程式可以新增新的分割區，並更新含有任何結構描述變更的資料表。這也適用於從 Apache Hive 中繼存放區移轉來的資料表。

若要執行此作業，當您定義爬蟲程式時，請指定一或多個現有的 Data Catalog 資料表，而不是指定一或多個資料存放區做為抓取來源。爬蟲程式即會抓取目錄資料表指定的資料存放區。在這種情況下，系統就不會建立任何新的資料表，而會更新您手動建立的資料表。

以下是建議您手動建立目錄資料表，並指定目錄資料表做為爬蟲程式來源的其他原因：
+ 您想選擇目錄資料表名稱，而不倚賴目錄資料表命名演算法。
+ 在檔案格式可能會干擾分割區偵測，但資料來源路徑中誤存該檔案的情況下，您想防止建立新的資料表。

如需詳細資訊，請參閱[步驟 2：選擇資料來源和分類器](define-crawler-choose-data-sources.md)。

## Data Catalog 資料表屬性
資料表屬性

 如 CLI AWS 中已知的資料表屬性或參數，是未經驗證的索引鍵和值字串。您可以在資料表中設定自己的屬性，以支援在 AWS Glue外部使用 Data Catalog。使用 Data Catalog 的其他 服務也可以這樣做。在執行任務或爬蟲程式時 AWS Glue 設定一些資料表屬性。除非另有說明，否則這些屬性僅供內部使用，我們不支援其以當前形式繼續存在，也不支援手動變更這些屬性時的產品行為。

 如需 AWS Glue 爬蟲程式所設定資料表屬性的詳細資訊，請參閱 [爬蟲程式在 Data Catalog 資料表上設定的參數](table-properties-crawler.md)。

# 與 Amazon S3 資料表整合
與 Amazon S3 資料表整合

AWS Glue Data Catalog 與 Amazon S3 Tables 整合，可讓您使用單一目錄探索、查詢 S3 Tables，並將 S3 Tables 與 Amazon S3 資料湖中的資料聯結。當您將 S3 Tables 與 Data Catalog 整合時，服務會建立聯合目錄結構，將 S3 Tables 資源映射至 AWS Glue 目錄物件：
+ S3 資料表儲存貯體會成為 Data Catalog 中的目錄
+ S3 命名空間會成為 AWS Glue 資料庫
+ S3 資料表會變成 AWS Glue 資料表

## 存取控制


Data Catalog 支援兩種 S3 Tables 整合的存取控制模式：
+ **IAM 存取控制** – 使用 IAM 政策來控制對 S3 Tables 和 Data Catalog 的存取。在此方法中，您需要 S3 Tables 資源和 Data Catalog 物件的 IAM 許可，才能存取資源。
+ **AWS Lake Formation 存取控制** – 除了 IAM AWS Glue 許可之外，還使用 AWS Lake Formation 授予來控制透過 Data Catalog 對 S3 Tables 的存取。在此模式中，主體需要 IAM 許可才能與 Data Catalog 互動，並且 AWS Lake Formation 授予 會決定主體可存取的目錄資源 （資料庫、資料表、資料欄、資料列）。此模式同時支援粗粒存取控制 （資料庫層級和資料表層級授予） 和精細存取控制 （資料欄層級和資料列層級安全性）。設定已註冊角色並啟用憑證販賣時，委託人不需要 S3 Tables IAM 許可，因為 會使用已註冊角色代表委託人 AWS Lake Formation 提供憑證。 AWS Lake Formation 存取控制也支援第三方分析引擎的憑證販賣。如需詳細資訊，請參閱《 *AWS Lake Formation 開發人員指南*》中的[建立 S3 資料表目錄](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。

您可以隨著需求發展，在存取控制模式之間遷移。

## 自動掛載的目錄階層


當您使用 Amazon S3 管理主控台將 S3 Tables 與 Data Catalog 整合時，主控台會在您帳戶中的 Data Catalog `s3tablescatalog`中建立名為 的聯合目錄 AWS 。 Amazon S3 此聯合目錄可做為該帳戶和區域中所有現有和未來 S3 資料表儲存貯體的父目錄。整合會映射下列階層中的 Amazon S3 資料表儲存貯體資源：
+ **聯合目錄** – `s3tablescatalog`（自動建立）
+ **子目錄** – 每個 S3 資料表儲存貯體都會在 下成為子目錄 `s3tablescatalog`
+ **資料庫** – 資料表儲存貯體中的每個 S3 命名空間都會成為資料庫
+ **資料表** – 命名空間中的每個 S3 資料表都會成為資料表

例如，如果您有一個名為 "analytics-bucket" 的 S3 資料表儲存貯體，其命名空間為 "sales"，其中包含資料表 "transactions"，則資料目錄中的完整路徑為： `s3tablescatalog/analytics-bucket/sales/transactions`

此四部分階層適用於 S3 Tables 和 Data Catalog 位於相同帳戶中的相同 AWS 帳戶案例。對於跨帳戶案例，您可以在 Data Catalog 中手動掛載個別 S3 資料表儲存貯體，這會建立三部分階層。

## 支援的區域


S3 Tables 與 Data Catalog 的整合可在下列 AWS 區域使用：


| 區域代碼 | 區域名稱 | 
| --- | --- | 
| us-east-1 | 美國東部 (維吉尼亞北部) | 
| us-east-2 | 美國東部 (俄亥俄) | 
| us-west-1 | 美國西部 (加利佛尼亞北部) | 
| us-west-2 | 美國西部 (奧勒岡) | 
| af-south-1 | 非洲 (開普敦) | 
| ap-east-1 | 亞太地區 (香港) | 
| ap-east-2 | 亞太區域 (台北) | 
| ap-northeast-1 | 亞太地區 (東京) | 
| ap-northeast-2 | 亞太地區 (首爾) | 
| ap-northeast-3 | 亞太地區 (大阪) | 
| ap-south-1 | 亞太地區 (孟買) | 
| ap-south-2 | 亞太地區 (海德拉巴) | 
| ap-southeast-1 | 亞太地區 (新加坡) | 
| ap-southeast-2 | 亞太地區 (悉尼) | 
| ap-southeast-3 | 亞太地區 (雅加達) | 
| ap-southeast-4 | 亞太地區 (墨爾本) | 
| ap-southeast-5 | 亞太地區 (馬來西亞) | 
| ap-southeast-6 | 亞太區域 (紐西蘭) | 
| ap-southeast-7 | 亞太區域 (泰國) | 
| ca-central-1 | 加拿大 (中部) | 
| ca-west-1 | 加拿大西部 (卡加利) | 
| eu-central-1 | 歐洲 (法蘭克福) | 
| eu-central-2 | 歐洲 (蘇黎世) | 
| eu-north-1 | 歐洲 (斯德哥爾摩) | 
| eu-south-1 | 歐洲 (米蘭) | 
| eu-south-2 | 歐洲 (西班牙) | 
| eu-west-1 | 歐洲 (愛爾蘭) | 
| eu-west-2 | 歐洲 (倫敦) | 
| eu-west-3 | Europe (Paris) | 
| il-central-1 | 以色列 (特拉維夫) | 
| mx-central-1 | 墨西哥 (中部) | 
| sa-east-1 | 南美洲 (聖保羅) | 

**Topics**
+ [

## 存取控制
](#s3-tables-access-controls)
+ [

## 自動掛載的目錄階層
](#s3-tables-catalog-hierarchy)
+ [

## 支援的區域
](#s3-tables-supported-regions)
+ [

# 先決條件
](s3tables-catalog-prerequisites.md)
+ [

# 啟用 S3 Tables 與 Data Catalog 整合
](enable-s3-tables-catalog-integration.md)
+ [

# 將資料庫和資料表新增至 S3 Tables 目錄
](create-databases-tables-s3-catalog.md)
+ [

# 共用 S3 Tables 目錄物件
](share-s3-tables-catalog.md)
+ [

# 管理 S3 Tables 整合
](manage-s3-tables-catalog-integration.md)

# 先決條件
先決條件

在 AWS Glue Data Catalog 中建立 S3 Tables 的聯合型錄之前，請確定您的 IAM 主體 （使用者或角色） 具有必要的許可。

## 所需的 IAM 許可


您的 IAM 主體需要下列許可才能啟用 S3 Tables 整合：

**AWS Glue 許可**：
+ `glue:CreateCatalog` – `s3tablescatalog` 建立聯合目錄時需要
+ `glue:GetCatalog` – 檢視目錄詳細資訊時需要
+ `glue:GetDatabase` – 將 S3 命名空間檢視為資料庫時需要
+ `glue:GetTable` – 檢視 S3 資料表時需要
+ `glue:passConnection` – 授予呼叫委託人將`aws:s3tables`連線委派給 AWS Glue 服務的權利

**S3 Tables 許可** （用於 IAM 存取控制）：
+ `s3tables:CreateTableBucket`
+ `s3tables:GetTableBucket`
+ `s3tables:CreateNamespace`
+ `s3tables:GetNamespace`
+ `s3tables:ListNamespaces`
+ `s3tables:CreateTable`
+ `s3tables:GetTable`
+ `s3tables:ListTables`
+ `s3tables:UpdateTableMetadataLocation`
+ `s3tables:GetTableMetadataLocation`
+ `s3tables:GetTableData`
+ `s3tables:PutTableData`

## IAM 政策範例


下列 IAM 政策提供在 IAM 模式中啟用 S3 Tables 與 Data Catalog 整合所需的最低許可：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "GlueDataCatalogPermissions",
      "Effect": "Allow",
      "Action": [
        "glue:CreateCatalog",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetTable"
      ],
      "Resource": [
        "arn:aws:glue:region:account-id:catalog/s3tablescatalog",
        "arn:aws:glue:region:account-id:database/s3tablescatalog/*/*",
        "arn:aws:glue:region:account-id:table/s3tablescatalog/*/*/*"
      ]
    },
    {
      "Sid": "S3TablesDataAccessPermissions",
      "Effect": "Allow",
      "Action": [
        "s3tables:GetTableBucket",
        "s3tables:GetNamespace",
        "s3tables:GetTable",
        "s3tables:GetTableMetadataLocation",
        "s3tables:GetTableData"
      ],
      "Resource": [
        "arn:aws:s3tables:region:account-id:bucket/*",
        "arn:aws:s3tables:region:account-id:bucket/*/table/*"
      ]
    }
  ]
}
```

# 啟用 S3 Tables 與 Data Catalog 整合
啟用 整合。

您可以使用 Amazon S3 管理主控台或 啟用與 AWS Glue Data Catalog 的 S3 Tables 整合 AWS CLI。 Amazon S3 當您使用主控台啟用整合時， 會 AWS 建立名為 的聯合目錄`s3tablescatalog`，自動探索和掛載 AWS 帳戶和區域中的所有 S3 資料表儲存貯體。

## 使用 Amazon S3 管理主控台啟用 S3 Tables 整合 Amazon S3


1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**資料表儲存貯體**。

1. 選擇 **建立資料表儲存貯體**。

1. 輸入**資料表儲存貯體名稱**，並確認已選取**啟用整合**核取方塊。

1. 選擇 **建立資料表儲存貯體**。

Amazon S3 會自動整合您在該區域中的資料表儲存貯體。您第一次在任何區域中整合資料表儲存貯體時，Amazon S3 `s3tablescatalog`會在該區域中的資料目錄中建立 。

建立目錄後，帳戶和區域中的所有 S3 資料表儲存貯體都會自動掛載為子目錄。您可以透過導覽至 Data Catalog 中的目錄來檢視資料庫 （命名空間） 和資料表。

## 使用 啟用 S3 Tables 整合 AWS CLI


使用 `glue create-catalog`命令來建立`s3tablescatalog`目錄。

```
aws glue create-catalog \
  --name "s3tablescatalog" \
  --catalog-input '{
    "Description": "Federated catalog for S3 Tables",
    "FederatedCatalog": {
      "Identifier": "arn:aws:s3tables:region:account-id:bucket/*",
      "ConnectionName": "aws:s3tables"
    },
    "CreateDatabaseDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }],
    "CreateTableDefaultPermissions": [{
      "Principal": {
        "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
      },
      "Permissions": ["ALL"]
    }]
  }'
```

將*區域*取代為 AWS 區域，將*帳戶 ID *取代為 AWS 帳戶 ID。

## 驗證整合


建立目錄後，您可以透過列出子目錄來驗證 S3 資料表儲存貯體是否已掛載：

```
aws glue get-catalogs \
  --parent-catalog-id s3tablescatalog
```

# 將資料庫和資料表新增至 S3 Tables 目錄
新增資料庫和資料表

請確定您擁有必要的許可，以列出和建立 區域中 Data Catalog 中的目錄、資料庫和資料表。確保已在 AWS 您的帳戶和區域中啟用 S3 Tables 整合。

## 將資料庫新增至 S3 Tables 目錄


### 新增資料庫 （主控台）


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

1. 在左側的導覽窗格中，選擇**資料庫**。

1. 選擇**新增資料庫**。

1. **在 S3 Tables 聯合目錄中選擇 Glue 資料庫**。

1. 輸入資料庫的唯一名稱。

1. 選取映射至 S3 Tables 中資料表儲存貯體的目標目錄。

1. 選擇 **Create Database (建立資料庫)**。

### 新增資料庫 (AWS CLI)


```
aws glue create-database \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-input '{"Name": "my-database"}'
```

## 將資料表新增至 S3 Tables 目錄


### 新增資料表 （主控台）


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

1. 在左側導覽窗格中，選擇 **Tables (資料表)**。

1. 在目錄下拉式清單中選取適當的 S3 Tables 目錄。

1. 選擇**新增資料表**。

1. 輸入資料表的唯一名稱。

1. 在目錄下拉式清單中確認已選取正確的 S3 Tables 目錄。

1. 在資料庫下拉式清單中選取資料庫。

1. 透過輸入 JSON 或個別新增每個資料欄來輸入資料表結構描述。

1. 選擇 **Create Table** (建立資料表)。

### 新增資料表 (AWS CLI)


```
aws glue create-table \
  --region region \
  --catalog-id "account-id:s3tablescatalog/my-catalog" \
  --database-name "my-database" \
  --table-input '{
    "Name": "my-table",
    "Parameters": {
      "classification": "",
      "format": "ICEBERG"
    },
    "StorageDescriptor": {
      "Columns": [
        {"Name": "id", "Type": "int", "Parameters": {}},
        {"Name": "val", "Type": "string", "Parameters": {}}
      ]
    }
  }'
```

# 共用 S3 Tables 目錄物件
共用目錄物件

使用 IAM 存取控制時，您可以使用相同帳戶共用 AWS Glue 的資源連結，與其他使用者共用 S3 Tables 目錄物件。對於跨帳戶共用，您可以與其他 AWS 帳戶共用 S3 資料表儲存貯體，而且收件人帳戶中的 IAM 角色或使用者可以使用共用資料表儲存貯體建立 AWS Glue 目錄物件。

## 使用資源連結在相同帳戶中共用


資源連結可讓您在 AWS Glue 預設目錄中顯示的 中建立 AWS Glue 資料庫和資料表`s3tablescatalog`的參考。這有助於組織資料存取或建立資料表的邏輯分組。

### 建立資源連結 （主控台）


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

1. 在導覽窗格中，選擇**目錄**。

1. 在**目錄**清單中，選取 **s3tablescatalog**。

1. 從 選取您要共用的資料表`s3tablescatalog`。

1. 選擇**動作**，然後選擇**建立資源連結**。

1. 針對**資源連結名稱**，輸入資源連結的名稱。

1. 針對**目標資料庫**，選取您要建立資源連結的資料庫。

1. 在**描述**，請輸入描述。

1. 選擇**建立**。

資源連結會出現在目標資料庫中，並指向 中的原始資料表`s3tablescatalog`。

### 建立資源連結 (AWS CLI)


建立資料庫資源連結：

```
aws glue create-database \
  --database-name "my-database-resource-link" \
  --database-input '{
    "Name": "sales_data_link",
    "TargetDatabase": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales"
    }
  }'
```

建立資料表資源連結：

```
aws glue create-table \
  --table-name "my-table-resource-link" \
  --table-input '{
    "Name": "sales_data_link",
    "TargetTable": {
      "CatalogId": "account-id:s3tablescatalog/analytics-bucket",
      "DatabaseName": "sales",
      "Name": "transactions"
    }
  }'
```

# 管理 S3 Tables 整合
管理整合

## 啟用 AWS Lake Formation


當您想要擴展資料控管需求時，您可以 AWS Lake Formation 為 S3 Tables 目錄啟用 。 AWS Lake Formation 提供資料庫樣式的授予，以管理精細的存取、使用標籤型存取擴展許可，以及根據使用者屬性授予許可，例如 S3 Tables 中資料表的群組關聯。

前往 AWS Lake Formation 管理主控台， AWS Lake Formation 為您的 S3 Tables 目錄啟用 AWS Glue。如需詳細資訊，請參閱《 *AWS Lake Formation 開發人員指南*》中的[建立 S3 資料表目錄](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。

## 刪除 S3 Tables 整合


您可以透過刪除 Data Catalog 中的目錄整合來刪除 S3 Tables 整合。此操作只會刪除 Data Catalog 中的中繼資料，不會刪除 S3 Tables 中的資源。

確保您擁有列出、編輯和刪除目錄物件的必要許可 AWS Glue。

### 刪除整合 （主控台）


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

1. 在導覽窗格中，選擇**目錄**。

1. 在**目錄**清單中，選取 **s3tablescatalog**。

1. 選擇 **刪除**。

1. 確認刪除目錄也會刪除資料目錄中所有相關聯的目錄物件。

1. 選擇 **刪除**。

### 刪除整合 (AWS CLI)


```
aws glue delete-catalog \
  --region region \
  --catalog-id "s3tablescatalog"
```

# 與其他 AWS 服務整合
與其他 AWS 服務整合

 雖然您可以使用 來填入 AWS Glue 編目程式 AWS Glue Data Catalog，但有數個 AWS 服務可以自動與 整合，並為您填入目錄。下列各節提供可填入 Data Catalog 之 AWS 服務支援的特定使用案例的詳細資訊。

**Topics**
+ [

## AWS Lake Formation
](#lf-dc)
+ [

## Amazon Athena
](#ate-dc)

## AWS Lake Formation
AWS Lake Formation

 AWS Lake Formation 是一項服務，可讓您更輕鬆地在其中設定安全的資料湖 AWS。Lake Formation 建置在 和 Lake Formation 上 AWS Glue，並 AWS Glue 共用相同的 AWS Glue Data Catalog。您可以使用 Lake Formation 註冊 Amazon S3 資料位置，並使用 Lake Formation 主控台在 AWS Glue Data Catalog 中建立資料庫和資料表、定義資料存取政策，以及從集中位置稽核資料湖的資料存取。可以使用 Lake Formation 精細存取控制來管理現有的 Data Catalog 資源和 Amazon S3 資料位置。

使用向 Lake Formation 註冊的資料，您可以安全地跨 IAM 主體、 AWS 帳戶、 AWS 組織和組織單位共用 Data Catalog 資源。

 如需使用 Lake Formation 建立 Data Catalog 資源的詳細資訊，請參閱《 AWS Lake Formation 開發人員指南》中的[建立 Data Catalog 資料表和資料庫](https://docs.aws.amazon.com/lake-formation/latest/dg/populating-catalog.html)。

## Amazon Athena
Amazon Athena

 Amazon Athena 使用 Data Catalog 來儲存和擷取 AWS 帳戶中 Amazon S3 資料的資料表中繼資料。資料表中繼資料可讓 Athena 查詢引擎知道如何尋找、讀取和處理您想要查詢的資料。

 您可以直接使用 Athena `CREATE TABLE`陳述式 AWS Glue Data Catalog 來填入 。可以手動定義和填入 Data Catalog 中的結構描述和分區中繼資料，而不需要執行編目程式。

1. 在 Athena 主控台中，建立將在 Data Catalog 中存放資料表中繼資料的資料庫。

1. 使用 `CREATE EXTERNAL TABLE` 陳述式來定義資料來源的結構描述。

1. 如果資料已分區，請使用 `PARTITIONED BY` 子句來定義任何分區索引鍵。

1. 使用 `LOCATION` 子句來指定存放實際資料檔案的 Amazon S3 路徑。

1. 執行 `CREATE TABLE` 陳述式。

    此查詢會根據您定義的結構描述和分區，在 Data Catalog 中建立資料表中繼資料，而不會對資料進行實際網路爬取。

可以在 Athena 中查詢資料表，其將使用 Data Catalog 中的中繼資料來存取和查詢 Amazon S3 中的資料檔案。

 如需詳細資訊，請參閱《Amazon Athena 使用者指南》中的[建立資料庫和資料表](https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html)。

# Data Catalog 設定
Data Catalog 設定

 Data Catalog 設定包含為您帳戶中的 Data Catalog 設定加密和許可選項的選項。

![\[螢幕擷取畫面顯示 Data Catalog 設定模式。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/data_catalog_settings.png)


**變更資料目錄的精細存取控制**

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

1.  選擇加密選項。
   +  **中繼資料加密** – 勾選此核取方塊，以加密 Data Catalog 中的中繼資料。中繼資料會使用您指定的 AWS Key Management Service (AWS KMS) 金鑰進行靜態加密。如需詳細資訊，請參閱[加密您的資料目錄](encrypt-glue-data-catalog.md)。
   +  **加密連線密碼** – 勾選此核取方塊，以在建立或更新連線時為 AWS Glue 連線物件加密密碼。密碼會使用您指定的 AWS KMS 金鑰加密。傳回密碼時，會加密密碼。此選項套用至資料目錄​中的所有 AWS Glue​ 連線。如果您清除此核取方塊，先前加密的密碼仍會使用建立或更新時使用的金鑰進行加密。如需有關 AWS Glue 連線的詳細資訊，請參閱 [連線至資料](glue-connections.md)。

     當您啟用此選項時，請選擇 AWS KMS 金鑰，或選擇**輸入金鑰 ARN，**並提供金鑰的 Amazon Resource Name (ARN)。以 ` arn:aws:kms:region:account-id:key/key-id ` 的形式輸入 ARN。您也可以提供 ARN 做為金鑰別名，例如 ` arn:aws:kms:region:account-id:alias/alias-name `。
**重要**  
 若選擇此選項，則建立或更新連線的使用者或角色必須擁有指定 KMS 金鑰的 `kms:Encrypt` 許可。​ 

     如需詳細資訊，請參閱[加密連線密碼](encrypt-connection-passwords.md)。

1.  選擇 **Settings (設定)**，然後在 **Permissions (許可)** 編輯器中新增政策陳述式，以變更您帳戶之資料目錄的精細存取控制。一次只有一個政策可以連接至資料目錄。您可以將 JSON 資源政策貼到此控制項中。如需詳細資訊，請參閱[Glue AWS 中的資源型政策](security_iam_service-with-iam.md#security_iam_service-with-iam-resource-based-policies)。

1.  選擇 **Save (儲存)**，以使用您進行的任何變更來更新資料目錄。

 您也可以使用 AWS Glue API 操作來放置、取得和刪除資源政策。如需詳細資訊，請參閱[中的安全 APIs AWS Glue](aws-glue-api-jobs-security.md)。