

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

Regex SerDe 會將 regex 群組擷取到資料表欄，藉此使用規則表達式 (regex) 來還原序列化資料。

如果資料中的某一列不符合 regex，則該列中的所有欄都會以 `NULL` 的形式傳回。如果某一列符合 regex 但擁有的群組數量低於預期，則遺失的群組為 `NULL`。如果資料中的某一列符合 regex 但具有比 regex 中的群組更多的欄，則會忽略額外的欄。

如需詳細資訊，請參閱 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 文件中的 [類別 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/` 中，以您執行 Athena 之處的區域識別符 (例如 `s3://athena-examples-us-west-1/cloudfront/plaintext/`) 取代 *myregion*。

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