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

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

例如,以下是輸入數據行:
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 模式:

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

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

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

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/'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章