> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: Xplenty中級編 Part3：正規表現を利用しデータ品質を担保する

> Filterコンポーネントの正規表現とAssertコンポーネントを使い、パイプライン内で不正なデータを検知・除外・エラー終了させる方法を解説します。

Xplentyでは正規表現を利用することで、データ品質を担保することができます。

## 予期しないデータ型のパイプライン内でのハンドリング方法

データソースからくるデータがいつも期待したデータが必ず送られてくるとは限りません。そういったケースでは、パイプライン内でデータの品質を保証することができます

例えば、CSVで以下のようなデータを扱う場合、「価格」列に期待される値は数値です。しかし、実際のデータは数値ではない、「500円」や「値なし」といったデータが入ってきたとします。

| No | Name | Status | Menu  | Price |
| -- | ---- | :----: | ----- | ----: |
| 1  | 山田   |   OK   | ハンバーグ |   500 |
| 2  | 田中   |   NG   | カレー   |  500円 |
| 3  | 佐藤   |   OK   | 焼肉    |   300 |
| 4  | 齋藤   |   NG   | サラダ   |       |

こういったことが想定される場合、Xplentyで取りうる解決策は、2種類の方法があります。

* 不正なデータをフィルタし、除外する
* 不正なデータがあった場合、ジョブをエラーで中止とする

## フィルタ機能で不正な価格データ検知する

まず、不正なデータを検知し、除外する場合、Filterコンポーネントを使用します。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part03-jp/image-1.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=a0daca56af827a95e81f6213ad1d23ff" alt="intermediate-part03-jp image 1" width="1202" height="829" data-path="images/japanese-knowledge-base/intermediate-part03-jp/image-1.webp" />
</Frame>

Filterコンポーネント内でOperatorに「Text matchs(regex)」を選択し、数値のみの条件をセットします。
正規表現＞整数値のみ： `^[+-]?[0-9]+$`

この場合、結果として上記の表の「**ステータス=NG**」のデータは、フィルタ条件に該当しないため、フィルタで除外されジョブの結果は以下のようになります。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part03-jp/image-2.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=3d74e8fdd251f2ddb7f24ea066cdd7b9" alt="intermediate-part03-jp image 2" width="1013" height="186" data-path="images/japanese-knowledge-base/intermediate-part03-jp/image-2.webp" />
</Frame>

今回は単一条件ですが、複数条件を入力し、Conditionのオプションで「いずれかの条件に一致する(OR)」や「全ての条件を満たす（AND）」さらに「以下の条件のいずれでもない場合（NOT OR）」で複数の条件を設定することも可能です。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part03-jp/image-3.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=a864f81736ae7678cc70db665a990171" alt="intermediate-part03-jp image 3" width="1016" height="460" data-path="images/japanese-knowledge-base/intermediate-part03-jp/image-3.webp" />
</Frame>

また、上記だけで表現できない場合は、パイプラインで複数Filterコンポーネントを使用して表現したり、分岐処理で分けて表現するなど、より複雑な条件にも柔軟に対応可能です。

## アサート機能で不正な価格データを検知し、ジョブをエラー終了する

Assertコンポーネントは、条件にマッチした場合、ジョブをエラーとして中断する機能です。条件設定画面は、Filterと同様の設定画面なので、ここでは割愛しますが、条件にマッチした場合にエラーとしてジョブを終了させたい場合に便利です。また、以下のようにエラーメッセージを指定することが可能です。

<Frame>
  <img src="https://mintcdn.com/integrateio/S5PjFuXd0nNm4BaF/images/japanese-knowledge-base/intermediate-part03-jp/image-4.webp?fit=max&auto=format&n=S5PjFuXd0nNm4BaF&q=85&s=ed2e22af4cc463a51c8f7de65d2c0a04" alt="intermediate-part03-jp image 4" width="1056" height="829" data-path="images/japanese-knowledge-base/intermediate-part03-jp/image-4.webp" />
</Frame>

## 最後に

この他にも様々な正規表現を使右ことで、ニーズに応じて想定されている値かどうかをより柔軟に制御することができます。ぜひ、これらの機能をパイプラインと組み合わせることで、データ品質向上にお役立てください。
