本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
分類器讀取資料存放區中的資料。如果它能辨識資料的格式,將會產生結構描述。分類器也會傳回一個確定數字以表示所識別格式的確定程度。
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主控台建立分類器。
自訂分類器
分類器的輸出包含一個字串,它會指出檔案的分類或格式 (例如,json
) 以及檔案結構描述。對於自訂分類器,您可以根據分類器的類型,定義建立結構描述的邏輯。分類器類型包括根據 grok 模式、XML 標籤以及 JSON 路徑定義結構描述。
如果您變更分類器定義,之前使用分類器探索的任何資料將不會重新分類。爬蟲程式會持續追蹤之前探索的資料。會使用更新分類器來分類新資料,這可能會更新結構描述。如果資料的結構描述擴張,則於爬蟲程式執行時將分類器更新到任何結構描述變更的帳戶。若要重新分類資料以更正不正確的分類器,請使用更新的分類器建立新爬蟲程式。
如需在 AWS Glue 中建立自訂分類器的詳細資訊,請參閱為各種資料格式撰寫自訂分類器。
注意
如果您的資料格式能夠由內建分類器之一加以辨識,您將無需建立自訂分類器。
內建分類器
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 自訂分類器。 |
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 分類器
內建 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 參考。