Regex SerDe 使用正则表达式通过将正则表达式组提取到表列中来反序列化数据。
如果数据中的某一行与正则表达式不匹配,则该行中的所有列都作为 NULL
返回。如果某行与正则表达式匹配,但其组少于预期,则缺少的组为 NULL
。如果数据中的一行与正则表达式匹配,但其列多于正则表达式中的组,则会忽略其他列。
有关更多信息,请参阅 Apache Hive 文档中的 类 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/';