Talend入門 (2) ~ファイルI/O~


全体の目的

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

対象者

ETL / EAI技術者

環境

使用環境 バージョン
OS Windows10
Talend 7.1.1

サンプル一覧

以下の順番で習得していきます

# 内容
1 はじめてのTalend
2 ファイルI/O(今回)
3 データベースI/O
4 tMap
5 イテレータ
6 メタデータ
7 Context変数
8 Global Map
9 tHashInput/tHashOutput
10 エラーハンドリング
11 ロギング
12 子ジョブ(ジョブのネスト)
13-1 設定ファイル読み込みオリジナル版
13-2 設定ファイル読み込みコンポ版
14 tJava

サンプルコード(Talendプロジェクトデータ)

今回の目的

ファイル入出力について理解する。

サンプルプログラム概要

csvを読み込みtsvを出力するプログラムを作ってみます。

CSVファイル読み込み

まずは入力ソースとしてETLでよく使われるCSVファイルを読み込んでみましょう。

入力ソース作成

in.csvというファイルを作成します。

  • エンコードはシフトJIS
  • 改行コードはLF
in.csv
id,name,gender
1,kouda,男
2,mori,男
3,kubo,男
4,shimizu,男
5,aya,女

CSV読み込み

リポジトリの[ジョブ]を右クリックし[ジョブの作成]を選択します。

[名前]に"fileio"と入力し[Finish]ボタンをクリックします。

csvファイル読み込みには[tFileInputDelimited]コンポーネントを使います。
[tFileInputDelimited]と読み込みデータ確認用に[tLogRow]を配置します。

[tFileInputDelimited]の[基本設定]を以下のように設定します。

項目名 設定内容 説明
ファイル名 C:/work/fileio/in.csv 読み込みファイルのパス
フィールド区切り , 入力データに合わせてカンマを指定
ヘッダー 1 1行目はヘッダとして扱う

[tFileInputDelimited]の[詳細設定]でエンコーディングを指定します。

項目名 設定内容 説明
エンコーディング CUSTOMでSJIS 入力ファイルのエンコーディングに合わせる

[tFileInputDelimited]の[基本設定]の[スキーマ編集]ボタンを押下しカラム定義画面を開きます。

カラム名とタイプを以下のように設定します。

カラム タイプ
1列目 id int
2列目 name String
3列目 gender String

[tLogRow]の[基本設定]にある[モード]をテーブルにします。

[tFileInputDelimited]と[tLogRow]をロウでつなぎます。

これで設定は完了ですので実行してみます。
in.csvが設定どおり読み込めたことを確認できます。

ファイル出力の設定

今度は実際のファイルに出力してみます。
[tFileOutputDelimited]というファイル出力用のコンポーネントを配置します。

[tLogRow]とロウをつなぎ[tFileOutputDelimited]の[基本設定]を以下のように設定します。

項目名 設定内容 説明
ファイル名 C:/work/fileio/out.tsv 出力ファイルのパス
フィールド区切り \t 今回はタブ区切りで出力する
ヘッダーを含む チェック ヘッダを出力する

[tFileOutputDelimited]の[詳細設定]でエンコーディングを指定します。

項目名 設定内容 説明
エンコーディング UTF-8 出力したエンコーディングを指定
CSVオプション チェック 囲み文字を設定する
ファイルが既に存在する場合はエラーが発生します チェックなし 毎回上書きにする

これで準備は完了です。実行してみましょう。
タブ区切りのファイルが出力できます。

out.tsv
id  name    gender
"1" "kouda" "男"
"2" "mori"  "男"
"3" "kubo"  "男"
"4" "shimizu"   "男"
"5" "aya"   "女"

入力ソースをジョブ内で定義(おまけ)

ちょっとした検証をしたい場合、入力ファイルを都度作るのは少々手間がかかります。
そんな時に便利な独自定義の入力ソースをジョブ内で定義する方法を紹介します。

[tFixedFlowInput]コンポーネントを配置します。

[tFixedFlowInput]の[基本設定]の[スキーマ編集]ボタンを押下しカラム定義画面を開きます。
カラム名とタイプを以下のように設定します。先ほどと違いが分かるようにカラム名を大文字にしています。

カラム タイプ
1列目 ID int
2列目 NAME String
3列目 GENDER String

[tFixedFlowInput]の[基本設定]のモード設定で[インラインコンテンツの使用]を選び以下設定します。

項目名 設定内容 説明
フィールド区切り , 入力データはcsv定義
コンテンツ 上記in.csvのヘッダなし状態を張り付ける csvファイルの代わりをここで定義できる

[tFileInputDelimited]と[tLogRow]を結んでいたrow1を[tFixedFlowInput]と[tLogRow]が結ばれるように変更します。

[tLogRow]と[tFileOutputDelimited]の[同期カラム]ボタンを押してrow定義を更新します。

[tFileInputDelimited]を無効化します。

これで準備は完了です。実行してみましょう。
標準出力の結果は問題なさそうです。

out.tsvも確認しましょう。
こちらも想定どおりの出力ができました。

out.tsv
ID  NAME    GENDER
"1" "kouda" "男"
"2" "mori"  "男"
"3" "kubo"  "男"
"4" "shimizu"   "男"
"5" "aya"   "女"

まとめ

今回はファイル入出力について確認しました。
csvでの解説でしたが、簡単に扱えることが分かってもらえたのではないでしょうか。
あらたに利用したコンポーネントと用途をおさらいしておきます。

  • tFileInputDelimited
    • csvファイル読み込み
  • tFileOutputDelimited
    • csv(tsv)ファイル出力
  • tFixedFlowInput
    • 入力データの独自定義

毎度のことですが、ほんのさわりの部分だけを解説していますのでぜひここから深掘りしてみてください。

次回以降

次回はデータベースI/Oをやっていきます。