

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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