# データクオリティルールを使ってデータを検証し、無効なデータをフィルタリング

情報メモ重要: Talend Studio 8.0 R2025-06以降、標準コンポーネントであるtDataQualityRulesは、tDQRulesに置き換えられました。このコンポーネントによって、以下からのルールを使用できるようになります:

* Qlik Talend Data Integration。
* Talend Cloud Data Inventory。
* Talend Cloud Data Stewardship。
* Talend Data Stewardship 8.0 R2022-07以降のハイブリッドバージョン

Apache Sparkジョブの場合、Talendアプリで使用できるのはtDataQualityRulesのみです。

このシナリオのジョブでは次のコンポーネントを使います。

* Talend Studio 8.0 R2025-06より前のtDataQualityRulesコンポーネントは、Talend Cloud Data Stewardshipの[データクオリティルール](https://help.qlik.com/talend/r/ja-JP/Cloud/data-stewardship-user-guide/tds-dqr)を使ってデータを検証します。
* tFilterRowコンポーネント: 実行不可能なデータをフィルタリングします。

ジョブでは次のデータクオリティルールが使用されます。 ![データクオリティルールの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-tds-rule.png)

[scholarship_programs.zip](https://help.qlik.com/talend/ja-JP/components/8.0/Content/Resources/attachments/scholarship_programs.zip)ファイルをダウンロードして解凍できます。

## ジョブを設定

### 手順

1. **[Palette] (パレット)**から、tFixedFlowInputコンポーネント、tDataQualityRulesコンポーネント、tExtractJSONFieldsコンポーネント、tFilterRowコンポーネント、および3つのtLogRowコンポーネントをデザインワークスペースにドロップします。
2. [Main] (メイン)リンクを使い、次のように接続させます。
   * tFixedFlowInputをtDataQualityRulesに
   * tDataQualityRulesをいずれかのtLogRowに
   * tExtractJSONFieldsをtFilterRowに
3. [Filter] (フィルター)リンクを使い、tFilterRowを別のtLogRowに接続させます。
4. [Reject] (リジェクト)リンクを使い、次のように接続させます。
   * tDataQualityRulesからtExtractJSONFieldsに
   * tFilterRowから最後のtLogRowに

   ![tDataQualityRulesコンポーネントを使ってデータを検証する7コンポーネントのジョブ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdataqualityrules-job.png)

   情報メモヒント: 有効なデータのみ必要である場合は、[Main] (メイン)リンクを使ってtDataQualityRulesを1つのtLogRowコンポーネントだけに接続させます。tExtractJSONFieldsコンポーネントとtFilterRowコンポーネントは必要ありません。

## tFixedFlowInputコンポーネントを設定

### 手順

1. tFixedFlowInputをダブルクリックして、[Basic settings] (基本設定)ビューを開きます。
2. [Schema] (スキーマ)で[Built-In] (組み込み)を選択し、[Edit schema] (スキーマを編集)の横にある[...]をクリックします。
3. カラムを追加する場合は、![\[Add\] (追加)アイコン](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/add.svg)をクリックしてOKをクリックします。

   ![tFixedFlowInputコンポーネントのスキーマ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-input.png)
4. [Use Inline Content (delimited file)] (インラインコンテンツを使用: 区切りファイル)を選択します。
5. データを入力します。[scholarship_programs.zip](https://help.qlik.com/talend/ja-JP/components/8.0/Content/Resources/attachments/scholarship_programs.zip)のファイル内のデータセットのデータを使用できます。

   ![tFixedFlowInputコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-input-final.png)

## tDataQualityRulesコンポーネントを設定

### 始める前に

* Talend Cloud Data Stewardshipで[データクオリティルール](https://help.qlik.com/talend/r/ja-JP/Cloud/data-stewardship-user-guide/tds-dqr)を少なくとも1つ作成済みであること。
* パーソナルアクセストークンを持っていること。パーソナルアクセストークンを生成する場合は、[https://help.talend.com/r/ja-JP/Cloud/management-console-user-guide/cloud-access-token](https://help.qlik.com/talend/r/ja-JP/Cloud/management-console-user-guide/cloud-access-token)をご覧ください。

  情報メモヒント: この例では、Talend Cloud Data Stewardshipが使用されています。また、Talend Data Stewardship 8.0 R2022-07以降のハイブリッドバージョンとTalend Cloud Data InventoryのURLも入力できます。

### このタスクについて

ルールを取得するためには、[Rules - View] (ルール - 表示)権限が必要です。詳細は、使用しているアプリの[事前定義済みユーザーロール](https://help.qlik.com/talend/r/ja-JP/Cloud/management-console-user-guide/tmc-predefined-roles)をご覧ください。

### 手順

1. [Output schema] (出力スキーマ)として[Built-in] (組み込み)を選択します。
2. 入力コンポーネントからスキーマを取得するためには、[Sync columns] (カラムを同期)ボタンをクリックします。
3. [Application] (アプリケーション)ドロップダウンリストから、Data Stewardshipを選択します。
4. Talend Cloud Data StewardshipへのURLを"https://tds.us.cloud.talend.com/rulerepository/api/v1"と入力します。

   このURLはお使いのリージョンによって異なります。[Talend Cloudのアプリケーションにアクセス](https://help.qlik.com/talend/ja-JP/installation-guide-windows/Cloud/talend-cloud-application-url)をご覧ください。
5. パーソナルアクセストークンを入力する場合は、[...]をクリックします。
6. データクオリティルールを取得する場合は、[Refresh] (更新)をクリックします。

   ![\[DQ rule library timestamp\] (DQルールライブラリーのタイプスタンプ)フィールドの横にある\[Refresh\] (更新)ボタン。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-timestamp.png)

   [Refresh] (更新)をクリックすると、ルール定義が含まれているJARファイルが以下で作成されます:
   ```
   studio-path\configuration\.m2\repository\org\talend\libraries\rule-number
   ```

   Talend Cloud Data Stewardshipでデータクオリティルールをアップデートする場合は、[Refresh] (更新)をクリックして最新バージョンを取得します。
7. [Configure DQ rules] (DQルールを設定)の横にある[...]をクリックします。
8. ルールを選択し、ルール変数を入力カラムに関連付けます。

   ![変数を関連付ける\[Configuration\] (設定)ウィンドウ。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-config.png)

   Talend Studioのデータ型はTalend Cloud Data Stewardshipのデータ型の一部に関連付けることができます。プロパティで[データ型を関連付け](https://help.qlik.com/talend/ja-JP/components/8.0/validation/tdqrules "Talend StudioをQlik Talend Data IntegrationまたはTalendアプリに接続させ、データクオリティルールを使ってデータを検証します。")をご覧ください。

   利用できるルールや入力カラムがない場合は、次の点をご確認ください。
   * [DQ rule library timestamp] (DQルールライブラリーのタイムスタンプ)でデータクオリティルールが取得されたこと
   * 入力スキーマが正しいこと
9. 設定を検証するため、[OK]をクリックします。

## tExtractJSONFieldsコンポーネントを設定

### このタスクについて

tExtractJSONFieldsコンポーネントを使うとさらに読みやすいデータを取得できるので、tFilterRowコンポーネントを使って簡単にフィルタリングできるようになります。

### 手順

1. [Property Type] (プロパティタイプ)と[Schema] (スキーマ)として[Built-In] (組み込み)を選択します。
2. [Edit schema] (スキーマを編集)の横にある[...]をクリックします。

   INVALID\_STATUSカラムが入力スキーマに追加されました。カラムの名前は出力スキーマで変更できます。 ![入力スキーマと出力スキーマの例。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-textract-schema.png)
3. JsonPathとAPI version 2.1.0を選択します。
4. [Loop Json query] (Jsonクエリーをループ)フィールドに\*というワイルドカードを入力すれば、エレメントがすべて選択されます。
5. [JSON Field] (JSONフィールド)ドロップダウンリストでINVALID\_STATUSを選択します。
6. [Mapping] (マッピング)テーブルでJSONクエリーを定義します。

   スキーマにあるカラムが[Mapping] (マッピング)テーブルの[Column] (カラム)フィールドにリスト表示されます。
7. [Mapping] (マッピング)テーブルの[Json query] (Jsonクエリー)カラムで、StatusにexecutionResults[0].statusと入力します。

   executionResults[0].statusはstatusへのパスを、[0]は最初のルールの実行詳細を表します。2番目のルールの実行詳細が必要である場合は[1]、3番目のルールの場合は[2]というようになります。これによって、tFilterRowコンポーネントを使ったデータのフィルタリングが容易になります。
   ### 例

   INVALID\_STATUSは、[{"executionResults":[{"ruleName":"ScholarshipProgram\_Else","inputColumn":["EffectiveOn","Code","Program"],"status":"Invalid"}]}]です。

   tExtractJSONFieldsはこれをInvalidに変換します。

   ![tExtractJSONFieldsコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tdqrules-textract.png)

## tFilterRowコンポーネントを設定

### このタスクについて

このシナリオでは、tFilterRowコンポーネントによって次の2つのカテゴリーが作成されます。

* NE: データではルールを実行できません。
* [Invalid] (無効): データは条件を満たすものの、検証式は満たしていません。

### 手順

1. [Conditions] (条件)で、![\[Add\] (追加)アイコン](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/add.svg)をクリックします。
2. InputColumnで、Statusを選択します。
3. [Value] (値)で、"NE"を選択します。

   情報メモ要確認: 複数のカラムを追加する場合は、テーブルの上部で論理演算子(AndまたはOr)を定義します。デフォルトではAndが選択されています。

## tLogRowコンポーネントを設定

### 手順

1. tLogRowコンポーネントをダブルクリックして、[Basic settings] (基本設定)ビューを開きます。
2. [Schema] (スキーマ)で[Built-In] (組み込み)を選択し、[Sync columns] (カラムを同期)をクリックします。
3. [Mode] (モード)エリアで、[Table (print values in cells of a table)] (テーブル(テーブルのセルの出力値))を選択します。

   ![tLogRowコンポーネントの設定。](https://help.qlik.com/talend/ja-JP/components/8.0/Resources/images/tLogRow_BasicSettings.png)

## ジョブを保存して実行

### 手順

ジョブを保存し、**F6**を押して実行します。

### タスクの結果

[Main] (メイン)リンクのtLogRowでは、次のような学生が返されます。

* スターテスコードは2632で、日付は2021-09-01である

  OR

* ステータスコードは2632ではなく、プログラムは10ABまたは10ACで終わる

```
.-------+----+-------+-----------+-----------.
|                    main                    |
|=------+----+-------+-----------+----------=|
|ID     |Code|Program|EffectiveOn|Nationality|
|=------+----+-------+-----------+----------=|
|1002145|2632|2310AB |2021-09-01 |Canada     |
|1002146|1132|3610AC |2021-10-01 |US         |
|1002149|2632|3711AB |2021-09-01 |US         |
|1002150|2632|2310AB |2021-09-01 |US         |
|1002151|2632|3711AB |2021-09-01 |US         |
|1002152|2632|2310AB |2021-09-01 |US         |
|1002153|2632|3711AB |2021-09-01 |US         |
|1002155|2675|3610AC |2021-10-01 |US         |
|1002156|2675|2310AB |2021-10-01 |Canada     |
|1002158|2632|2310AB |2021-09-01 |US         |
|1002159|1132|2310AB |2021-10-01 |US         |
|1002162|2675|2310AB |2021-10-01 |US         |
|1002163|2632|3610AC |2021-09-01 |US         |
'-------+----+-------+-----------+-----------'
```

無効なデータはフィルタリングされて2つのテーブルに分けられます。

```
.-------+----+-------+-----------+-----------+------.
|                        NE                         |
|=------+----+-------+-----------+-----------+-----=|
|ID     |Code|Program|EffectiveOn|Nationality|Status|
|=------+----+-------+-----------+-----------+-----=|
|1002161|abcd|3611AC |2021-09-01 |US         |NE    |
'-------+----+-------+-----------+-----------+------'
```

NEというステータスは、データでルールを実行できないことを意味します。このシナリオではステータスコードはabcdですが、ルール条件はis equal to 2632です。

もう1つの無効なデータは次のいずれかを表します。

* スターテスコードは2632だが、日付は2021-09-01である

  または

* ステータスコードは2632ではなく、プログラムは10ABまたは10ACで終わらない

  ```
  .-------+----+-------+-----------+-----------+-------+----------------------------------.
  |                                     OtherInvalid                                      |
  |=------+----+-------+-----------+-----------+-------+---------------------------------=|
  |ID     |Code|Program|EffectiveOn|Nationality|Status |errorMessage                      |
  |=------+----+-------+-----------+-----------+-------+---------------------------------=|
  |1002147|2632|3610AC |2022-01-01 |Canada     |Invalid|Status.compareTo("NE") == 0 failed|
  |1002148|2632|2310AB |2022-01-01 |Canada     |Invalid|Status.compareTo("NE") == 0 failed|
  |1002154|2632|3610AC |2022-01-01 |Canada     |Invalid|Status.compareTo("NE") == 0 failed|
  |1002157|2632|3610AC |2022-01-01 |Canada     |Invalid|Status.compareTo("NE") == 0 failed|
  |1002160|2632|2310AB |2022-01-01 |Canada     |Invalid|Status.compareTo("NE") == 0 failed|
  |1002164|2675|3611AC |2021-09-01 |US         |Invalid|Status.compareTo("NE") == 0 failed|
  '-------+----+-------+-----------+-----------+-------+----------------------------------'  
  ```