Talend入門 (1)　～はじめてのTalend～

## 更新情報 2023.11.21
開発ツールとして便利に利用してきた「オープンソース製品 Talend Open Studio」ですが、Qlik社より2024年1月31日をもって廃止されるという発表がありました。

詳細 [メーカー発表リンク](https://www.talend.com/blog/update-on-the-future-of-talend-open-studio/?utm_campaign=7013z000001Hgq4AAC)
> we will be discontinuing the open-source product: Talend Open Studio, effective January 31, 2024. 



開発ツールとして便利に利用してきただけに残念ですね。
今後Talend Studioは有償版のみとなるため、本記事も削除を検討しましたが、内容自体はStudioの使い方備忘録ではあるのでこのまま置いておくことにいたします。


## 全体の目的
Talendの超簡単なサンプルジョブを作成して，ETLジョブ開発に必要なスキルを習得することが目的です。

## 対象者
ETL / EAI技術者

## 環境
|使用環境|バージョン|
|:----:|:------------------|
|OS|Windows10|
|Talend|7.1.1|	

## サンプル一覧
以下の順番で習得していきます

|#|内容|
|:----:|:------------------|
|**1**|**[はじめてのTalend（今回）](https://qiita.com/airkoda/items/a837d3c5d851d98d2612)**|
|2|[ファイルI/O](https://qiita.com/airkoda/items/1cd12c05c6136add7178)|
|3|[データベースI/O](https://qiita.com/airkoda/items/bc807c920c3adebad837)|
|4|[tMap](https://qiita.com/airkoda/items/fa4a9c022b5d688698e0)|
|5|[イテレータ](https://qiita.com/airkoda/items/404d2d65eff535b2126c)|
|6|[メタデータ](https://qiita.com/airkoda/items/4b42cf2a86f34abb6c87)|
|7|[Context変数](https://qiita.com/airkoda/items/42d294fca40b81aa20fb)|
|8|[Global Map](https://qiita.com/airkoda/items/1aba0d36905c755deeae)|
|9|[tHashInput/tHashOutput](https://qiita.com/airkoda/items/d9347865190f0f3ab180)|
|10|[エラーハンドリング](https://qiita.com/airkoda/items/85e7c49a9bf6a21db6d5)|
|11|[ロギング](https://qiita.com/y-fujioka-yoshiharu/items/e0280f34cff2e3d00bda)|
|12|[子ジョブ（ジョブのネスト）](https://qiita.com/y-fujioka-yoshiharu/items/04ea4bd74ded382cf03c)|
|13-1|[設定ファイル読み込みオリジナル版](https://qiita.com/airaotaku/items/92f114795108f25e6d0f)|
|13-2|[設定ファイル読み込みコンポ版](https://qiita.com/airyama/items/83c2bf9b2d51a79c3714)|
|14|[tJava](https://qiita.com/airkoda/items/4d81d76c36b6fcbd4d89)|

[サンプルコード（Talendプロジェクトデータ）](https://github.com/kd2air/qiita)

## 今回の目的
Talendとはなんぞやを実際に触ってみて理解する

- Talendとは
- セットアップ
- はじめてのジョブ作成（Hello world.）

## Talendとは
以下の特徴をもったETL製品です。

- ETL
    - **ETL処理**(Extract/Transform/Load)を構築できる
- オープンソース（として発展してきた。。2024/1/31で無償版は廃止）
    - **先進技術への対応**が早い
- GUIベース
    - **アイコン配置だけ**で開発ができる
- Java
    - 構築したバッチ処理はJavaアプリケーションなので**JVM上で実行可能**

## セットアップ（ダウンロードは有償版のみとなりました）

~~1. マシン準備
今回はWindows10で8GBメモリの環境にセットアップしました。
推奨環境については本家 [ソフトウェア要件](https://help.talend.com/reader/otjx9J_SJHX4M48Yygs59g/h3tpFrNJEdIfMi5OsdGYow) をご確認ください。~~

~~2. JDKダウンロード
JDK1.8が必要になります。
Oracle社の[JDKサイト](https://www.oracle.com/technetwork/java/javase/downloads/index.html)よりダウンロード・インストールして下さい。
Java8を選びます
![WS000003.png](https://qiita-image-store.s3.amazonaws.com/0/364565/354df188-b96e-ae29-d056-d928c41408cf.png)
64bit版をダウンロード~~
![WS000004.png](https://qiita-image-store.s3.amazonaws.com/0/364565/9b1dc4c1-ddb7-32da-e508-8a7ebb6ddbf4.png)

~~3. JDKインストール
デフォルト設定で大丈夫です。~~
![WS000018.png](https://qiita-image-store.s3.amazonaws.com/0/364565/969b6ff3-2740-2449-1886-260a80d50b65.png)

~~4. Talendのダウンロード
Talend社のサイトより「[Talend Open Studio for Data Integration]~~(https://jp.talend.com/products/talend-open-studio/)」をダウンロードして下さい。
![WS000002.png](https://qiita-image-store.s3.amazonaws.com/0/364565/c68b6926-81bf-b945-c260-3742f3331ed0.png)

~~5. Talendのインストール
ダウンロードしたzipファイルを展開するだけです。
c:\talend フォルダを作成しそこに展開しました。~~
![WS000019.JPG](https://qiita-image-store.s3.amazonaws.com/0/364565/d58b55da-9648-c05b-aeee-3abec4131524.jpeg)

6. 起動確認
「TOS_DI-win-x86_64.exe」を実行します。
![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/364565/e88b5182-e9f8-8f31-1003-bbbcbd795f75.jpeg)
承認をクリック
![WS000010.JPG](https://qiita-image-store.s3.amazonaws.com/0/364565/49d82218-d2ff-cea8-a1a9-15a7d19b5e84.jpeg)
このまま完了ボタンをクリック
![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/364565/26491833-ee2f-19be-0de1-112ec554bcd3.jpeg)
閉じるをクリック
![WS000013.png](https://qiita-image-store.s3.amazonaws.com/0/364565/6135a9cc-3218-714a-c939-afca135e6a45.png)
右下に追加インストール可能な機能の確認状況が表示されますのでそのまま待ちます。
※進めてもよいのですが、今回はステップを踏んでいきたいので。
![WS000014.png](https://qiita-image-store.s3.amazonaws.com/0/364565/1b70338a-54eb-826e-93dc-3c242a41c8cb.png)
「Talendパッケージの追加」が表示されたら「必須のサードパーティライブラリ」にチェックされていることを確認しFinishボタンをクリックします。
![WS000015.png](https://qiita-image-store.s3.amazonaws.com/0/364565/051eeea5-b2e5-dee4-30af-9767c66275b0.png)
ライセンス条項の確認画面が表示されたら「選択されたライセンスに同意します」を選択して、「全て同意」で進めてください。
必要なJDBCドライバ等のライブラリのインストールが始まります。
右下の新規Talend機能をインストールが完了するまでそのまま待ちます。
![WS000016.png](https://qiita-image-store.s3.amazonaws.com/0/364565/37c81f2e-6cee-0104-9d95-60d7a01c2ea0.png)

## はじめてのジョブ作成（Hello world.）
それではジョブを作成していきましょう。
※Talendで作成するバッチ処理のことをジョブといいます。
#### Hello world.ジョブ作成
リポジトリの[ジョブ]を右クリックし[ジョブの作成]を選択します。
![WS000021.png](https://qiita-image-store.s3.amazonaws.com/0/364565/416f0b33-8338-f2b6-6f41-257ffbc2c4dc.png)
[名前]に"hello"と入力し[Finish]ボタンをクリックします。
![WS000025.JPG](https://qiita-image-store.s3.amazonaws.com/0/364565/ad9d74b8-7ac0-9a31-f7e6-9f2cc5285b35.jpeg)
hello というジョブをデザインできる状態となりました。
実際にコンポーネントを配置する領域のことを「デザインワークスペース」と呼びます。
![WS000032.png](https://qiita-image-store.s3.amazonaws.com/0/364565/4b194f07-c95f-c01c-6cbe-113b064284cb.png)
コンポーネントパレットの「その他」を開くと[tMsgBox]があります。
デザインワークスペースにドラッグ＆ドロップで配置します。
![2019-03-09 16_31_39-Talend Open Studio for Data Integration (7.1.1.20181026_1147) _ Local_Project (2.png](https://qiita-image-store.s3.amazonaws.com/0/364565/9a6bbba8-a261-334d-c2a9-d756ceb470d2.png)
[実行（ジョブ名）]のタブを開き[実行]ボタンをクリックするとビルドされ実行できました。
これだけでジョブが完成です。なんとも簡単ですね。
![2019-03-09 16_32_58-スタート2.png](https://qiita-image-store.s3.amazonaws.com/0/364565/f5af51ac-ccb4-f62c-fd6c-479c3aca17b1.png)

#### テストデータ生成
バッチジョブが簡単に生成できることが確認できたのでもう少しだけ処理を追加してみます。
まずはコンポーネントパレットの[その他]にある[tRowGenerator]というデータ生成用コンポーネントを配置します。
![2019-03-09 16_37_51-Talend Open Studio for Data Integration (7.1.1.20181026_1147) _ Local_Project (接.png](https://qiita-image-store.s3.amazonaws.com/0/364565/347ffadd-c8ba-25e0-144e-6869a2c28e0f.png)

次に[tLogRow]という標準出力用コンポーネント少し違うやり方で配置してみます。
デザインワークスペース上でマウスカーソルを一度左クリックします。そこで tl とキーボード入力してみてください。名前がマッチするコンポーネント一覧が表示されますので[tLogRow]を選びます。
![2019-03-09 16_39_07-Talend Open Studio for Data Integration (7.1.1.20181026_1147) _ Local_Project (接.png](https://qiita-image-store.s3.amazonaws.com/0/364565/2303aea3-7e04-e251-4f98-d7a302b78f53.png)

このようにあらたに2つのコンポーネントが配置できました。
生成データを定義するために[tRowGenerator]アイコンをダブルクリックします。
![2019-03-09 16_39_47-Talend Open Studio for Data Integration (7.1.1.20181026_1147) _ Local_Project (接.png](https://qiita-image-store.s3.amazonaws.com/0/364565/6e4b9cbe-ce6d-cd1d-61d6-eeb4ed0c1b70.png)

設定ダイアログが開きます。
![2019-03-09 16_40_10-Talend Open Studio for Data Integration - tRowGenerator - tRowGenerator_2.png](https://qiita-image-store.s3.amazonaws.com/0/364565/4f8341c1-1556-e66b-9825-ccb66f806ade.png)

[＋]ボタンを2回クリックし2カラム準備します。
![2019-03-09 16_41_53-Talend Open Studio for Data Integration - tRowGenerator - tRowGenerator_2.png](https://qiita-image-store.s3.amazonaws.com/0/364565/5a0be94a-12f7-eb5a-5c62-f68bf24b2159.png)

1カラム目の生成データはシーケンスにしたいので以下のように設定します。

| 設定項目       | 設定値  |
|:-----------------|:------------------|
| タイプ             | int &#124; Integer|
| 関数             | Numeric.sequence(String,int,int)|
![m2.png](https://qiita-image-store.s3.amazonaws.com/0/364565/7da43c55-0c36-747b-3091-5f3a8160f04f.png)

ここまで出来たらデータの流れを定義します。
[tRowGenerator]アイコンを右クリックし[ロウ] - [メイン]を選びます。
![無題1.png](https://qiita-image-store.s3.amazonaws.com/0/364565/3c62de05-f207-4d9f-93d7-b5110addc4ba.png)

マウスで[tLogRow]アイコンにつなぎます。
![2019-03-09 16_44_18-Talend Open Studio for Data Integration (7.1.1.20181026_1147) _ Local_Project (接.png](https://qiita-image-store.s3.amazonaws.com/0/364565/abef3768-0aa3-4344-52b8-a7cc7591185b.png)

これでデータ(Row)の流れを定義できました。
![GS000010.png](https://qiita-image-store.s3.amazonaws.com/0/364565/4c8e1a71-ee19-9e67-c04c-64eb06b8c73a.png)

標準出力の表示方式を定義します。
[tLogRow]アイコンを選択し、[コンポーネントタブ]にある[モード]の設定を[テーブル]に変更します。
![m3.png](https://qiita-image-store.s3.amazonaws.com/0/364565/ca628663-78d1-b308-17f6-108b827a91fb.png)

ここで一度実行してみます。
[実行（ジョブ名）]タブで[実行]ボタンをクリックします。
Helloworldメッセージボックスが表示されました。
ん？ メッセージボックスのOKボタンを押してみます。
![m4.png](https://qiita-image-store.s3.amazonaws.com/0/364565/953ee3d8-c113-629f-642e-677397b39e38.png)

実行結果表示画面に[tRowGenerator]で準備したテストデータが出力されました。
つまり、メッセージボックスを表示したあと生成データ出力、という処理順序で実行されました。
![GS000009a.png](https://qiita-image-store.s3.amazonaws.com/0/364565/202724c9-4f8a-2ebd-b359-531bc099f720.png)

動きはしましたが、メッセージボックスは画面の配置どおり、最後にしたかったんです。
なので、処理の順番を設定してあげます。
[tRowGenerator]アイコンで右クリックし、[トリガー] - [サブジョブがOKの場合]を選択します。
![m5.png](https://qiita-image-store.s3.amazonaws.com/0/364565/92811298-520f-040f-6863-e4f611482cf9.png)

マウスで[tMsgBox]アイコンにつなぎます。
※水色で囲まれた処理の塊を「サブジョブ」と呼びます。
![m6.png](https://qiita-image-store.s3.amazonaws.com/0/364565/0519c0c0-995f-de37-400e-af748d981920.png)

これでサブジョブ毎の処理順序を定義できました。
![GS000011.png](https://qiita-image-store.s3.amazonaws.com/0/364565/89cfbcfd-599e-d548-66e2-85a41dc9f6b8.png)

実行してみます。
メッセージボックスが表示されたときには先ほどとは異なりテストデータも出力できています。
![m7.png](https://qiita-image-store.s3.amazonaws.com/0/364565/2088f560-f0b7-71d3-c5af-2ec5f0f4ab0d.png)

メッセージボックスのOKをクリックすることでジョブ終了となります。
![m8.png](https://qiita-image-store.s3.amazonaws.com/0/364565/65e47cb1-2393-5f80-b1aa-e3f339f0c556.png)

#### 実行モジュールの配布
Talend上で実行確認ができたら実際に配布する方法も知っておきましょう。
リポジトリの[ジョブ]の中にあるhelloジョブを右クリックし[ジョブをエクスポート]を選択します。
![m9.png](https://qiita-image-store.s3.amazonaws.com/0/364565/e4a1d9a0-c498-ad23-d3cf-a54e725f39f3.png)

「ファイルをアーカイブするには」で出力先を指定し[Finish]ボタンを押すことでアプリケーションとして配布できる状態で保存されます。
※今回の例では[アイテム]と[Javaソース]は不要だったのでチェックを外しました。
![2019-03-09 16_51_04-ジョブをエクスポート.png](https://qiita-image-store.s3.amazonaws.com/0/364565/070bd2b9-945d-97df-016d-4ef2c758f546.png)

hello_0.1.zipを展開すると以下のように起動スクリプトがあらかじめ準備されています。

| ファイル名       | 種類  |
|:-----------------|:------------------|
| hello_run.bat             | Windowsでのコマンドプロンプト用|
| hello_run.ps1             | PowerShell用|
| hello_run.sh             | /bin/sh用|

![2019-03-09 16_54_19-C__work_hello_0.1_hello.png](https://qiita-image-store.s3.amazonaws.com/0/364565/ec565aaa-2607-ab58-c7ee-387d46e5dfd7.png)

hello_run.batをJVMが動作するマシン上で実行してみます。
![2019-03-09 16_53_11-スタート.png](https://qiita-image-store.s3.amazonaws.com/0/364565/d19a6174-b5fd-2c8a-516a-3dc46555f980.png)


## まとめ
まずは**Talendとはどのようなツール**か、という観点で実際に触れることができたと思います。
プロパティを少しいじるだけでも振る舞いをいろいろと変えられるのでぜひ試してみてください。
利用したコンポーネントと用途をおさらいしておきます。

- tMsgBox
    - メッセージボックス表示
- tRowGenerator
    - データジェネレータ
- tLogRow
    - 標準出力

今後もサンプル内容としてはこのレベル、つまりはほんのさわりの部分だけを解説する記事でやっていこうと思います。

## 次回以降
次回はファイルI/Oをやっていきます。