6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-03-17

##全体の目的
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読み込み

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

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

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

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

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

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

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

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

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

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

GS000033.png

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

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

GS000022.png

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

ファイル出力の設定

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[tFileInputDelimited]を無効化します。
GS000044b2.png
GS000045.png

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

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をやっていきます。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?