Regex SerDe
Regex SerDe では、正規表現 (REGEX) を使用し、正規表現グループをテーブルの列に抽出してデータを逆シリアル化します。
データ内の行が正規表現と一致しない場合、その行内のすべての列が NULL
として返されます。行が正規表現と一致するが、予想よりもグループが少ない場合、欠落しているグループは NULL
です。データ内の行が正規表現と一致するが、正規表現内のグループよりも多くの列がある場合、追加の列は無視されます。
詳細については、Apache Hive ドキュメントの「Class RegexSerDe
シリアル化ライブラリ名
Regex SerDe のシリアル化ライブラリ名は org.apache.hadoop.hive.serde2.RegexSerDe
です。ソースコードについては、Apache ドキュメントの「Class RegexSerDe
例
以下の例は、RegExSerDe を使用して CloudFront ログからテーブルを作成します。s3://athena-examples-
の myregion
/cloudfront/plaintext/myregion
を、Athena が実行されるリージョンの識別子 (s3://athena-examples-us-west-1/cloudfront/plaintext/
など) に置き換えます。
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/';