本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Regex SerDe 會將 regex 群組擷取到資料表欄,藉此使用規則表達式 (regex) 來還原序列化資料。
如果資料中的某一列不符合 regex,則該列中的所有欄都會以 NULL
的形式傳回。如果某一列符合 regex 但擁有的群組數量低於預期,則遺失的群組為 NULL
。如果資料中的某一列符合 regex 但具有比 regex 中的群組更多的欄,則會忽略額外的欄。
如需詳細資訊,請參閱 Apache Hive 文件中的 類別 RegexSerDe
序列化程式庫名稱
Regex SerDe 的序列化程式庫名稱為 org.apache.hadoop.hive.serde2.RegexSerDe
。如需原始碼資訊,請參閱 Apache 文件中的類別 RegexSerDe
範例
下列範例會使用 RegExSerDe 從 CloudFront 日誌建立資料表。在 s3://athena-examples-
中,以您執行 Athena 之處的區域識別符 (例如 myregion
/cloudfront/plaintext/s3://athena-examples-us-west-1/cloudfront/plaintext/
) 取代 myregion
。
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
`Date` DATE,
Time STRING,
Location STRING,
Bytes INT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
os STRING,
Browser STRING,
BrowserVersion STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
)
LOCATION 's3://athena-examples-myregion
/cloudfront/plaintext/';