

# Regex SerDe
<a name="regex-serde"></a>

Regex SerDe 使用正则表达式通过将正则表达式组提取到表列中来反序列化数据。

如果数据中的某一行与正则表达式不匹配，则该行中的所有列都作为 `NULL` 返回。如果某行与正则表达式匹配，但其组少于预期，则缺少的组为 `NULL`。如果数据中的一行与正则表达式匹配，但其列多于正则表达式中的组，则会忽略其他列。

有关更多信息，请参阅 Apache Hive 文档中的 [类 RegexSerDe](https://svn.apache.org/repos/infra/websites/production/hive/content/javadocs/r1.2.2/api/org/apache/hadoop/hive/serde2/RegexSerDe.html)。

## 序列化库名称
<a name="regex-serde-library-name"></a>

Regex SerDe 的序列化库名称为 `org.apache.hadoop.hive.serde2.RegexSerDe`。有关源代码信息，请参阅 Apache 文档中的 [Class RegexSerDe](https://svn.apache.org/repos/infra/websites/production/hive/content/javadocs/r1.2.2/api/org/apache/hadoop/hive/serde2/RegexSerDe.html)。

## 示例
<a name="regex-serde-examples"></a>

以下示例使用 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/';
```