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