如何糾正 Amazon Athena 中的 RegexSerDe 錯誤「匹配組數與列數不匹配」?

問題
我已使用 RegexSerDe 建立一個 Amazon Athena 表。在查詢表時,收到如下錯誤「匹配組數與列數不匹配。」
解決方法
要糾正此錯誤,請確保 regex 模式中的捕獲組數與您在 Athena 中建立表時定義的字段數匹配。apache

例如,如下是輸入數據行:
64.242.88.10 - - [07/Mar/2004:16:06:51 -0800] "GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1" 200 4523
此行具備 7 個字段。這是正確的 regex 模式: ide

^([0-9.]+) ([\w.-]) ([\w.-]) \[([A-Za-z0-9:/]+ [+-][0-9]{4})\] \"(.+?)\" ([0-9]{3}) ([0-9]+)$
注意:RegexSerDe 遵循 Java 標準。因爲反斜槓在 Java String 類中做爲轉義字符,所以,您必須使用雙反斜槓來定義單反斜槓。例如,要定義 \w,您必須在 regex 中使用 \w。oop

此 regex 模式中有 7 個捕獲組,輸入數據中有 7 個字段。在查詢表時,RegexSerDe 未引起「匹配組數與列數不匹配」異常。hadoop

要運行 DDL 語句,請爲 SERDEPROPERTIES 指定 regex 捕獲組,如如下示例所示:input

CREATE external table logs(col1 string, col2 string, col3 string, col4 string, col5 string, col6 string, col7 string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^([0-9.]+) ([\w.-]) ([\w.-]) \[([A-Za-z0-9:/]+ [+-][0-9]{4})\] \"(.+?)\" ([0-9]{3}) ([0-9]+)$") LOCATION 's3://mybucket/path/'string

相關文章
相關標籤/搜索