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