Talend Tips集

#まず入門する
以下のようなサイトをまずは眺めてみると全体の流れがわかるかと。

Talendに爆速で入門する(環境構築⇒CSV変換ジョブ⇒DB連携まで)
https://qiita.com/hidepy/items/909e1fd689fa9937ae28

Talend Open Studio 入門
https://tasokori.net/%E3%80%90talend-open-studio-%E5%85%A5%E9%96%8001%E3%80%91%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B

[Talend] Talend Open Studio チュートリアル
https://dev.classmethod.jp/talend/talend-open-studio-create-job/

Talend Open Studio によるビッグデータ分析
https://www.gixo.jp/blog/4859/

公式ヘルプ
https://help.talend.com/reader/8reqZ3yO5S5mumwO0bNYhA/RSyC8WwQeuMYEhCGfECGrA

#Talendプロジェクトの全体的な構造について
コンポーネントの接続タイプ等がわかりやすい。
https://qiita.com/ykoji1112/items/e7c99112d16862f69112

#コンポーネント間の接続
https://dev.classmethod.jp/talend/flow-iterate-trigger/

#tMapの使い方
結合の使い方とかが参考になるかと。
https://qiita.com/airkoda/items/fa4a9c022b5d688698e0

#コンテキストグループ
Project全体でファイル格納先フォルダ等を指定するのに便利。各ジョブのコンテキストはジョブ内に閉じてしまうので。
ただし、コンテキストを使うと（Windowsの場合）フルパス上の\を/に置換する必要があるので注意が必要（fFileListの/を許容する設定が効かない）。
これをやらないと、作ったジョブを引き継ぐときのメンテナンスコストがすごく高くなる（ファイルパスが格納されているコンポーネントを探して全部修正する必要がある）
http://jitech.work/talend/690.html

#最新断面のファイル取得
https://dev.classmethod.jp/talend/get_most_recent_file/

#ファイル名の動的生成（日付）
1回1回の処理ごとのバージョンをキープしたいときに便利。
https://lunaticsol.wordpress.com/2016/04/13/talend-%E3%81%AE-output-%E3%81%AB%E6%97%A5%E4%BB%98%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B/

具体的にはこんな感じ（上のサイト通りの記述だとなぜかエラーに）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437327/53c433a8-cd6b-2bac-d2d8-2dc4ac578201.png)

#tMap上での条件分岐
実践例。入力したデータの特定カラム同士を比較して、合致してたら"Y"、そうでなければ"N"を返す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437327/501ec280-673e-01e9-d70d-7bd914206832.png)

https://tasokori.net/%E3%80%90talend%E3%80%91%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90if%E3%81%99%E3%82%8B4%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F#outline__3_1

https://tasokori.net/%E3%80%90talend%E3%80%91%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90if%E3%81%99%E3%82%8B4%E3%81%A4%E3%81%AE%E6%96%B9%E6%B3%95%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%97%E3%81%9F#outline__3_1

JavaにおけるAND条件等
https://www.sejuku.net/blog/21911

#連番を自動採番する
第1引数の使い方次第で同一ジョブ内での通番、同一IDでの通番等の制御ができる。同一ジョブで複数自動採番をしようとすると、第1引数を変えないとコンポーネントを通じて通しの連番を振ってしまうので注意。
https://tasokori.net/【talend】sequenceで連番を振る方法。グループごとの採番

#ジョブの設計ガイドライン
動けばいい、というもんじゃないよね。こういう発想って開発プロジェクトじゃなくても必要だと思います。
https://jp.talend.com/blog/2015/12/07/talend-job-design-patterns-and-best-practicestalend-job-design-patterns-and-best-practices/
https://dev.classmethod.jp/business/talend-tips-design/

#Null Pointer Exemption
Optimizationのデータ移行で最もはまったエラー。tMapでLookupするとき、そもそもLookup先のデータに存在しないものを対象にequals.等で条件分岐をするとぬるぽが発生する。概念的にはこんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437327/03716464-b53c-4e1f-1a60-888d5c83d24a.png)
これを回避するには　== nullを代わりに使用するとか、tFilterRowで除外するとよい。

#レコードの重複除去
多量のデータのなかからあるカラムに注目して重複を除き、マスタを作るときとかに使える。
https://dev.classmethod.jp/business/talend-tips-tuniqrow/

#文字化け対応
Input時は元のシステムに合わせる（クラウド系のシステムだったらUTF8とか？）にしておいて、Output時に使用するシステムに合わせる（WindowsでハンドリングするんだったらShift-JISとかwindows-31jとか）。使える漢字の幅を考えるとwindows-31jが無難な気がする。以下文字コードそのものについて。
https://weblabo.oscasierra.net/shift_jis-windows31j/

(2020/03/12追記)　Windows-31J(CP932)でも、中国籍の方の難しい漢字がカバーされていないケースがあるので、やはりUTF-8はそのまま使ったほうが無難。かつCSVはなんだかんだで前ゼロが落ちたりするので、xlsx、UTF-8で出力するのが安定な気がする（連携先システムの仕様によるけど）

#同一ID、最新データの抽出方法
（もっといいやり方もあるかもしれないが）社員ID・データ断面順にソートした後に、連番を付与することで最新断面を指定することが可能（連番1をフィルタ）

#ファイル名を取得しレコードに格納する
tFileListからファイル名を取得するのと同様の指定で可能。
例:　((String)globalMap.get("tFileList_1_CURRENT_FILE"))

#特定文字列より指定文字数分テキストを抽出する
StringHandling.SUBSTRとStringHandling.INDEXの組み合わせで可能。
例:  StringHandling.SUBSTR(((String)globalMap.get("tFileList_1_CURRENT_FILE")),StringHandling.INDEX(((String)globalMap.get("tFileList_1_CURRENT_FILE")),"(")+2,10)  

StringHandlingに関するドキュメントは以下。
https://help.talend.com/reader/QfepFiIJO_6eLiY1WN~6mQ/sbXAVsOCoee5xYTQMw8oZw

#String型をDate型に変換する
形式の指定と変換対象を指定することで可能。
https://community.talend.com/t5/Design-and-Development/how-to-convert-String-to-date-in-talend/td-p/11915

#メモリに一時処理用にrowを格納する
処理途中のrowを一時格納する。Temporallyにファイルを生成しなくてよいので処理がすっきりする。
https://tasokori.net/%E3%80%90talend%E3%80%91%E8%A1%8Crow%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%B8%80%E6%99%82%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%A6%E5%BE%8C%E3%81%A7%E4%BD%BF%E3%81%84%E3%81%BE%E3%82%8F%E3%81%99thashinp

https://dev.classmethod.jp/business/talend-tips-thashinput/

#正規表現
半角数字のみ入っているレコードを処理したい、といった特定の文字列等の明確な検索条件で処理ができないときには正規表現を使用する。今回はManager IDに全角文字列が入っているものを制御したかったので以下のようなコードを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437327/e5476068-caf8-1773-66b5-7390edde5cee.png)

・Talend上の正規表現
http://over50.hatenablog.com/entry/2014/03/19/081942
https://takemasa5.tumblr.com/post/26813788839/talend-%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%A7filterrow%E3%81%99%E3%82%8B
https://dev.classmethod.jp/tool/talend-use-fileinputfullrow/

・Javaでの正規表現リファレンス
https://java-reference.com/java_string_regex.html

・前ゼロの埋め方
https://techacademy.jp/magazine/19023

#べからず集
https://www.talend.com/blog/2019/12/05/10-things-youre-doing-wrong-in-talend/

#Talend Exchange
https://exchange.talend.com/
ユーザ自身が開発したCustom Comportmentがやりとりされているサイト。ユーザ登録は必要。
tFileExcel-Componentsがめちゃくちゃ便利。

#スキーマを一括編集する
全部Stringにしたいときとかに便利
https://dev.classmethod.jp/articles/talendchangeschema/

#Inputファイルのスキーマが突然変更になった際に備えて
詳細設定の以下にチェックを付けて、基本設定のエラー強制終了にチェックを付けておくと、エラー検知できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437327/3d62be67-40c2-292a-e428-ac8ba3230f9d.png)


#エラーが発生したら
割と頻発するエラーについて対処法を以下に記載(するつもり)。

#Apple Silicon Macへのインストール
なかなか手こずったので以下に参考にしたサイトを掲載。とりあえず最新バージョンの8.0系は非対応。
https://www.reddit.com/r/Talend/comments/rbz6n0/talend_open_studio_for_data_integration_on_apple/