Talend データ品質改善について

 


📺 Talendで「重複データを見つける方法」

tUniqRow を使って、データの重複を識別する方法を学びます。

🎯 目的

  • tUniqRow コンポーネントを使用して、データ内のユニークな行と重複した行を分ける方法を説明します。


🛠 実際の手順

1. データ生成

  • tRowGenerator を使って、40行のサンプルデータを生成します。

  • 各行には ID, firstName(名前), lastName(苗字) の3つのカラムがあります。

2. 重複とユニークを分ける

  • tUniqRow コンポーネントを使って、名前と苗字の組み合わせが重複している行を「重複(Duplicates)」と「ユニーク(Uniques)」に分けます。

  • 名前と苗字の組み合わせが1回目に出現すれば「ユニーク」に、2回目以降は「重複」に振り分けます。


3. 結果を表示

  • 名前と苗字で並べ替えをしてから、コンソールにユニーク重複を表示します。

  • 初回実行では、すべて異なる名前と苗字の組み合わせが表示され、重複はありません。

  • 2回目の実行では、例えば「Millard Tyler」という名前と苗字の組み合わせが重複として表示されます。


4. 実行結果

  • 最初の実行では、ユニークな40行が表示され、重複はありません。

  • 2回目以降に同じ名前と苗字の組み合わせが再度出現し、ユニーク重複の分け方を確認できます。


✔️ まとめ

  • tUniqRow を使うことで、簡単にユニークな行と重複する行を分けることができる。

  • 名前と苗字など、特定のカラムを使って重複データを効率よく識別可能。


📺 Talendで「区間一致(Interval Match)を行う方法」

tIntervalMatch コンポーネントを使用して、IPアドレスの範囲を照合する方法を学びます。


🎯 目的

  • tIntervalMatch は、tJoin のようにデータを結合しますが、範囲に一致するデータを照合する点が異なります。

  • 参考用のファイル(IPアドレス範囲)とサーバーのIPアドレスを照合し、それに対応する国名を出力します。


🛠 実際の手順

1. 入力ファイル

  • 使用する2つのファイルは以下の通りです:

    • ipRanges.txt(参照ファイル)

    • servers.txt(メイン入力ファイル)

servers.txt
  • サーバー名と対応するIPアドレスが記載されています。

ipRanges.txt
  • IPstart(開始IPアドレス)

  • IPend(終了IPアドレス)

  • country(対応する国名)

2. tIntervalMatchの設定

  • tIntervalMatch コンポーネントを使用して、サーバーのIPアドレス(メイン入力)とIP範囲(参照)を一致させます。

  • メイン入力(servers.txt) では、IP カラムのIPアドレスが、IPstart から IPend の範囲内にあるかどうかを照合します。

  • 照合が一致した場合、対応する country(国名)を出力します。

3. 結果の出力

  • tIntervalMatch の出力では、IPアドレスがどの国に一致したかを確認できます。

  • 例えば、サーバー「server2」のIPアドレスが「001」で始まる場合、それがどのIP範囲に一致するかを ipRanges.txt から照会します。


4. 実行結果

  • 実行後、各サーバーとそのIPアドレスがどの国に一致するかが出力されます。

    • 例えば、「server2」は「001」で始まるIPアドレスを持っており、ipRanges.txt の1行目に一致します。

    • その結果、001から255までの範囲に一致し、対応する国名が出力されます。


✔️ まとめ

  • tIntervalMatch コンポーネントを使うことで、単なる一致だけでなく、IP範囲に対してもデータを照合できる。

  • この方法で、IPアドレスに基づいてサーバーがどの国に属するかを特定することができます。


📺 Talendで「データを置換する方法」

Talendでデータを置換する方法を紹介します。主に2つの方法を使います:

  1. tReplace:コンポーネント内で直接置換を定義します。

  2. tReplaceList:Lookup(参照テーブル)を使って、例えばジョインのようにデータを置換します。


🎯 目的

  • 置換の方法として、tReplacetReplaceList の2つの方法を比較します。

  • 実際に「replacement」というジョブを使って、それぞれの方法を試していきます。


🛠 実際の手順

1. データ作成

まず、3行のデータを作成します。データは次のような構造です:

  • country(国名)

  • name(名前、姓)

  • data(ランダムなASCIIデータ)

これらのデータを、コンソールでテーブル形式で表示します。


2. データの置換方法

次に、2つの方法でデータを置換します。

方法1:tReplaceを使う方法
  • tReplaceコンポーネントを使って、置換を行います。具体的には、次のように設定します:

    • 置換対象の入力カラムを指定。

    • 検索する値置換後の値を定義。

その後、置換後のデータをコンソールに出力します。

方法2:tReplaceListを使う方法
  • より柔軟な方法として、tReplaceListコンポーネントを使う方法です。

    • Lookupとして、置換対象のデータを別のテーブル(リスト)から検索します。

    • 検索対象のカラム置換後の値を指定します。

こちらも結果はコンソールに表示します。


3. 実行と結果

  • ジョブを実行すると、置換後のデータがコンソールに表示されます。

    • 例えば、最初に実行すると「Germany」と「USA」が表示されます。

    • もう一度実行すると、別の組み合わせ(例えば「Spain」と「Germany」)が表示されます。


✔️ まとめ

Talendでは、tReplacetReplaceList を使って、簡単にデータを置換することができます:

  • tReplace:直接コンポーネント内で置換を設定する方法。

  • tReplaceList:Lookupテーブルを使って、より柔軟に置換を行う方法。


📺 Talendで「スキーマの確認方法」

Talendでスキーマをチェックする方法を紹介します。

📌 2つの方法:

  1. tSchemaComplianceCheck を使って、スキーマに適合しないデータ(スキーマリジェクト)をチェックする。

  2. tFileInputDelimited の「Reject」出力を使って、スキーマに適合しないデータをキャッチする。

これらの方法を「schemaCheck」というジョブで確認していきます。


🛠 具体的な手順

1. 使用するファイル

  • 「schemaCheck」ジョブでは、「data/in」ディレクトリにある「.csv」というファイルを使用します。

  • このファイルには不正なデータが含まれており、後で確認できます。

2. データの構成

  • まず、このファイルには「ID」「名前」「日付」などが含まれていますが、いくつかのデータにエラーがあります。


3. tFileInputDelimited の設定

次に、通常のデータ処理を行うために tFileInputDelimited コンポーネントを設定します:

  • ファイル名、行の区切り文字、フィールドの区切り文字、そしてスキーマを定義します。

    • 例えば、1列目は「Integer型」、3列目は「Date型」とします。

さらに、Advanced Settings(詳細設定)の中で「Check each row structure against schema」を有効にします。

4. Rejectのキャッチ

  • 「Reject」出力を使って、スキーマに適合しないデータをキャッチします。

    • 例えば、数値が正しくない「ID」や、日付形式が不正なデータ、列が不足しているデータなどです。


5. tSchemaComplianceCheck の使用

次に、スキーマに適合しないデータを見つけるために tSchemaComplianceCheck コンポーネントを使用します:

  • tSchemaComplianceCheck コンポーネントを使って、データのスキーマを再度チェックします。

  • スキーマは tFileInputDelimited と同じものを使い、「Check all columns from schema」 を選択します。

そして、tLogRow コンポーネントを使って、適合するデータとリジェクトされたデータをコンソールに出力します。


6. 実行結果

ジョブを実行すると、スキーマに適合しないデータが次のようにリジェクトされます:

  • 1つの列にデータが不足している(nullまたは空)データがリジェクトされます。

  • 例えば、「Montana」といったデータは列が不足しているため、スキーマに適合せずリジェクトされます。

✔️ まとめ

Talendでは、tFileInputDelimited の「Reject」出力や、tSchemaComplianceCheck コンポーネントを使って、スキーマに適合しないデータ(スキーマリジェクト)を簡単にチェックできます。

  • tFileInputDelimited を使って、データがスキーマに適合しない場合にリジェクトする方法。

  • tSchemaComplianceCheck を使って、スキーマに適合しないデータをさらに詳細にチェックする方法。


📺 Talendで「冗長キーを生成する方法」

Talendを使って冗長キーを生成する方法を紹介します。

📌 冗長キーとは?

冗長キー(Redundancy keys)は、データ内の重複をチェックするための一意の識別子を生成するために使用されます。この動画では、tAddCRCRow コンポーネントを使って冗長キーを生成します。


🛠 具体的な手順

1. 使用するファイル

  • この例では、既に他の例で使用した「addres7.csv」というファイルを使います。

  • ファイルは「File delimited」として設定し、必要に応じて tFileInputDelimited コンポーネントにドラッグ&ドロップしてジョブに追加します。

2. tAddCRCRow コンポーネントの設定

  • 次に、tAddCRCRow コンポーネントを使います。

  • このコンポーネントでは、どのカラムを使ってIDを生成するかを定義します。そして、そのIDを新しいカラム「CRC」に書き込みます。

3. 結果の表示

  • 最後に、生成されたデータをコンソールに出力して確認します。

    • ここでは、データソースから新しいデータを取得し、生成されたIDを比較することで、重複データを簡単にチェックすることができます。


✔️ まとめ

tAddCRCRow コンポーネントを使うことで、データ内の重複を簡単にチェックするための冗長キーを生成することができます。これにより、データを定期的に確認して重複を避ける作業が簡単になります。

  • tAddCRCRow で冗長キー(CRC)を生成し、重複をチェックする。


📺 Talendで「ファジーマッチングを行う方法」

Talendでファジーマッチングを行う方法を紹介します。

📌 ファジーマッチングとは?

ファジーマッチング(Fuzzy Matching)は、完全に一致しないが似ているデータをマッチングする手法です。例えば、名前がわずかに異なっている場合などに有効です。

この例では、「meier.csv」というファイルに含まれる姓「Meier」を基準に、他の姓とファジーマッチングを行います。


🛠 手順

1. 使用するファイルと設定

  • ファイル: 「meier.csv

    • このファイルには「Meier」という姓が異なるスペルで含まれています。

    • 姓(lastname)という1つのカラムがあり、そのデータを使ってファジーマッチングを行います。

  • 目的: 入力された姓と「meier.csv」の姓を比較し、似ている姓を見つける。

2. Talendでの設定

  • tFileInputDelimited コンポーネントを使い、ファイル「meier.csv」を読み込みます。

    • カラムは「lastname」で、データ型は「String」です。

    • ファイルにはヘッダーがなく、行とフィールドの区切り文字が設定されています。

  • tFixedFlowInput コンポーネントを使って、比較する姓を手動で設定します。

3. tFuzzyMatch コンポーネント

  • tFuzzyMatch コンポーネントを使用して、姓をファジーマッチングします。

    • Levenshteinアルゴリズムを選択します。このアルゴリズムは、2つの文字列間の最小と最大の違いを計算します。

  • 設定:

    • Levenshteinの距離(文字の違いの許容範囲)を設定します。例えば、距離「0」は完全一致を意味しますが、距離「1」や「2」にすると、わずかな違いでも一致と見なされるようになります。

4. 結果を表示

  • tLogRow コンポーネントを使って、結果をコンソールに表示します。表示形式は「テーブル」モードに設定します。


✔️ 結果と動作

  • Levenshtein距離「0」(完全一致)では、「Meier」と一致するデータは1件のみです。

  • Levenshtein距離「1」(1文字の違いを許容)では、「Geier」などの別の姓も一致として出力されます。これは、最初の文字が異なっているだけのためです。

  • Levenshtein距離「2」に設定すると、さらに多くの一致が見つかりますが、例えば「Meierlein」などは完全には一致しません。しかし、部分一致として処理することもできます。

  • 逆に、「Smith」のような全く違う名前と「Meier」を比較するのは意味がありませんが、部分的な一致を見つけることができるのもファジーマッチングの良い点です。


📝 まとめ

  • tFuzzyMatch コンポーネントを使うことで、データ間のわずかな違いを許容しながら一致を見つけることができる。

  • Levenshteinアルゴリズムを使うことで、スペルの違いに対応でき、データの不完全な一致を検出できる。

前の記事:Talend Transformation

次の記事:Talend ファイル管理について