Talend小技（３）データに複数の順位を追加する

#**Talend 標準ルーチンの活用**
Talendには多くのシステムルーチンが標準で用意されています。
以下はクラスとその内容です。
DataOperation（各種数値を文字に変換）
Mathmatical（算術演算とビット演算）
Numeric（シーケンス値、ランダム値の生成、文字列からBigDecimalの生成）
Relational（NULL値判定)
StringHandling（英字判定、大文字化、小文字化、長さ取得など文字列変換処理）
TalendDataGenerator（ダミーデータの生成【アメリカ合衆国での姓、名、ストリート名、州名など】）
TalendDate（日付、時間の計算、置換、判定処理）
TalendString（文字列エスケープ、ランダム文字列生成、トリムなどの特殊文字列処理）

今回はNumericクラスのsequenceを使用して複数の順位をデータに追加します。

#**入力ファイル**
入力ファイルには、店舗名（Store）、商品１売り上げ数（Product1）と商品２売り上げ数（Product2）が記録されています。
![Routine_Input1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/de4a697e-1a8d-c90b-fb56-d9bbb06e74d4.jpeg)

#**商品１売り上げ数でソートする**
まず入力データの読み取り用にtFileInpuDelimitedを配置し、tSort_1を追加して商品１売り上げ数（Product1）で降順でソートします。
![Routine_Sequence_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/8a10f395-f755-3bc4-2331-27b08a2949fd.jpeg)

tSortRow_1の設定
スキーマカラムにProduct1を追加し、ソート種別をnum（数値）で設定し、順序をdesc（降順）で設定します。
![Routine_Sequence_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/07303caa-5db1-2b30-d721-23570d77874f.jpeg)

#**商品１売り上げ数の順位を付加する**
tMap_1を追加して商品１売り上げ数の順位を追加します。
![Routine_Sequence_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/b07b2ac3-6c4a-0025-56c4-77acd65c2e6d.jpeg)

tMap_1の設定
Var変数にNumeric.sequence( "S1", 1, 1 )を設定します。
sequenceの引数は、"S1"というキーに対し、初期値を1、増加数を1という設定になります。
out1にはVar.Sequence1を格納するためにProduct1_Sequenceを追加します。
![Routine_Sequence_4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/e204e6cb-6950-35de-d579-eda893785834.jpeg)

#**商品２売り上げ数でソートする**
tSort_2を追加して商品２売り上げ数（Product2）で降順でソートします。
![Routine_Sequence_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/cf87deb6-4d0b-9338-9d0c-aa59a44e033e.jpeg)

tSortRow_2の設定
スキーマカラムにProduct2を追加し、ソート種別をnum（数値）で設定し、順序をdesc（降順）で設定します。
![Routine_Sequence_6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/aff24a4c-72da-dcdc-8677-a17fde1ac504.jpeg)

#**商品２売り上げ数の順位を付加する**
tMap_2を追加して商品２売り上げ数の順位を追加します。
![Routine_Sequence_7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/1d4f0a62-99b6-1fc6-ffa4-f31ef952f8b7.jpeg)

tMap_2の設定
Var変数にNumeric.sequence( "S2", 1, 1 )を設定します。
sequenceの引数は、"S2"というキーに対し、初期値を1、増加数を1という設定になります。
ここでtMap_1で前回に使用した"S1"というキーに設定すると前回の順位が引き継がれてしまいます。
out2にはVar.Sequence2を格納するためにProduct2_Sequenceを追加します。
![Routine_Sequence_8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/ab132b1a-c476-f28f-489a-4b9e4cbe2111.jpeg)

#**店舗名でソートする**
現在のデータは商品２売り上げ数で降順になってますので、tSort_3を追加して店舗名（Store）で昇順でソートします。
![Routine_Sequence_9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/6d227488-40d1-cbaa-651e-4578a02ddeb9.jpeg)

tSortRow_3の設定
スキーマカラムにStoreを追加し、ソート種別をalpha（文字）で設定し、順序をasc（昇順）で設定します。
![Routine_Sequence_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/11d763fe-4207-2b5e-42ee-7afe3c5c9d91.jpeg)

#**ファイルへの出力**
最後にtFileOutputDelimited_1を追加してファイルに出力します。
![Routine_Sequence_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/5d55cbd9-34f7-c91b-49b6-e09ffcfa431c.jpeg)

#**出力結果**
商品１売り上げ数と商品２売り上げ数の売上順位（Product1_Sequence、Product2_Sequence）がデータに追加できました。
![Routine_Sequence_12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463924/8aabdeb6-b672-4fb3-7163-f91c9a24c34c.jpeg)

#**まとめ**
今回はTalendのシステムルーチンの活用例を紹介させていただきました。
今回は詳細について触れておりませんが、日付や時間の処理を行う際にはTalendDateクラスのルーチンは非常に有効利用できます。
次回はユーザールーチンの活用について紹介したいと思います。