本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
定義和管理分類器
分類器讀取資料存放區中的資料。如果它能辨識資料的格式,將會產生結構描述。分類器也會傳回一個確定數字以表示所識別格式的確定程度。
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提供各種格式的內置分類器,包括 JSONCSV,Web 日誌和許多數據庫系統。
如果 AWS Glue 找不到能 100% 確定符合輸入資料格式的自訂分類器,將會依照下表所列順序叫用內建分類器。內建分類器傳回結果,指出格式是否符合 (certainty=1.0
) 或不符合 (certainty=0.0
)。第一個具有 certainty=1.0
的分類器將為 Data Catalog 的中繼資料資料表提供分類字串和結構描述。
分類器類型 | 分類字串 | 備註 |
---|---|---|
Apache Avro | avro |
讀取檔案開頭的結構描述以判斷格式。 |
阿帕奇 ORC | orc |
讀取檔案中繼資料以判斷格式。 |
Apache Parquet | parquet |
讀取檔案結尾的結構描述以判斷格式。 |
JSON | json |
讀取檔案的開頭以判斷格式。 |
二進制 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連線匯入中繼資料。 |
我的 SQL | mysql |
使用JDBC連線匯入中繼資料。 |
後備 SQL | postgresql |
使用JDBC連線匯入中繼資料。 |
Oracle 資料庫 | oracle |
使用JDBC連線匯入中繼資料。 |
Microsoft SQL 伺服器 | 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表格,則可以使用以下替代方法之一:
變更「資料目錄」中的資料欄名稱、將設定
SchemaChangePolicy
為LOG,然後將分割區輸出組態設定InheritFromTable
為以供 future 爬行者程式執行時使用。建立自訂 grok 分類器來剖析資料並指派您想要的欄。
內建CSV分類器會建立參考
LazySimpleSerDe
為序列化程式庫的資料表,這是型別推斷的不錯選擇。但是,如果CSV資料包含加引號的字串,請編輯資料表定義並將資 SerDe 源庫變更為OpenCSVSerDe
。將任何推斷的類型調整為STRING,將分割區輸出組態設定SchemaChangePolicy
為LOG,然後將分割區輸出組態設定InheritFromTable
為以供 future 爬行者程式執行。如需有關 SerDe 程式庫的詳細資訊,請SerDe 參閱 Amazon Athena 使用指南中的參考資料。