最近は業務でデータ整形をすることが多いので、その際に私が使用しているTalend Open Studio(TOS)をなんとなく紹介します。
どんなことができるソフトなの?
基本的な使い方を一言で言えば「CSVファイルの書式を整える」ですね。専門的な表現をするなら「ETL処理」なのですが、ここでは誰でも分かる言葉で説明します。会社でよくある実業務だと、データベースAから引っこ抜いてきたデータを、データベースBに投入するために加工する必要がある時とか、そういう時に使うと便利です。
例えば、次のような処理を簡単に行えます。
エクセルでCSV保存したファイルがあります。
テキストエディタで開いてみました。(sakuraエディタのCSVモード)
セル内改行はLF。カンマや改行などが含まれる場合、そういった項目を1つの列と表すために、ダブルクオーテーションで囲むようです。また文字としてのダブルクオーテーションは、それを示すため””と2回。エクセルではCSVファイルはそういった書式になるみたいですね。
さてこのファイルをこのままSQLServerに入れようとしてみましょうか。
テーブル作ります。
放り込みます。なんか2行だけ入っちゃいました。3行目でエラー出てますね。この記事はSQLServer入門ではないので、コマンドの中身については省略。
入った2行目も、データ投入はできているけど元の形と変わっています。
ダブルクオーテーションが普通にそのまま入っており、LFは半角スペースに置き換えられたようです。
日付列の型をNVARCHARにして再投入して確認してみると、エラーとなっていた3行目は、コメントの「禿」の後のカンマで次の列に移り、最後の列になったので残りのカンマは列区切りと判断されず、まとめて日付列に放り込まれたみたいです。「脱珍,”,2018-04-12」は日付型に変換できないので、エラーになるのでしょう。
さてこのデータを綺麗に直すならば、例えばこうなるでしょう。LFは弄らなくても半角スペースになりましたが、明確に半角スペースに置換します。列囲みのダブルクオーテーションは削除し、列区切りではないカンマはドットに置換しました。
こういった修正は、サンプルのように3行なら手作業でできますが、何万行もの修正はもちろん無理です。また普通にテキストエディタで置換する場合、「この列のカンマだけ置換」というのはできないので、地味に面倒になってきます。Emエディタなどの高機能エディタならCSV列に対する置換処理くらいは可能ですが、複雑になってくると難しくなります。
TOSでは、こういった変換を簡単に実現できます。そんなわけでここからTOSの使い方説明です。
動作にはJavaが必要
TOSのダウンロードはココから。いくつか種類がありますが、今回の用途ならData Integration(右上)を選びます。インストーラー形式ではなく、ZIPファイル解凍です。
TOSの実行にはJava SE(JDK)が必要です。ダウンロードページはココです。
本記事執筆現在、TOSのバージョンは7.0.1で、要求されるJDKのバージョンは8のようです。最新のJDK10は動かなかったので、JDK8をダウンロードしましょう。ちなみにTOS6.1以前はJDK6が要求されるそうです。
ジョブを作って加工してみよう
TOSを実行したらライセンス承認などが出るので「続行」とか「OK」とか連打押しておけば、そのうちメイン画面が出ます。
細かい設定は抜きにして、とりあえず使ってみましょう。
初回起動だとサンプルジョブが出ているかも知れませんが、無視してジョブ作成します。
名前に全角は使えません。
ジョブを作ったら、まずは右のパレットの検索ボックスに「fileinputde」と入れてみます。tFileInputDelimitedが見つかると思います。中央の市松模様なメイン画面にドラッグアンドドロップしましょう。
メイン画面でtFileInputDelimitedを選択したら、入力ファイルの設定を行います。設定は画像を参考にどうぞ。
列項目の設定は「スキーマの編集」です。とりあえず列数分だけ+ボタン連打。
ここでは区別のためカラム名を入れていますが、連打後のデフォルト名のままでもOK。
文字コード、昔のバージョンでは選択肢で色々と選べたんですけど、現行バージョンだとISO-8859-15とUTF-8以外は手入力になったようです。UTF-8のBOM有無選択もなくなっちゃいました。なぜ消したのかは不明。ただのCSV加工程度なら、旧バージョンの方が使いやすいかも知れませんね。記憶違いだったようです。
愚痴はおいといて。設定が終わったら、赤い矢印をドラッグで引っ張り、出てきた検索ボックスからtReplaceを作ります。
先ほどと同様に、パレットでtReplaceを検索、メイン画面に放り込んでから赤い矢印をドラッグして繋いでもOKです。赤い矢印から伸びる線の繋がりが、データの流れを示します。
ここからは、スキーマの編集は「同期カラム」をクリックでOK。直前のパーツの設定を丸コピーしてくれます。
tReplaceはその名の通り置換処理ができるパーツですので、置換条件を設定します。コメント列に対し、カンマをドット、LF(\n)を半角スペースにする置換を行います。
またまた矢印を引っ張って、今度はtFileOutputDelimitedを作ります。区切り文字で区切られたファイルを出力するパーツです。
tFileOutputDelimitedの設定。やっぱりスキーマの編集は同期カラムポチーでOKです。
設定が終わったら実行タブから実行をしてみます。設定に問題がなければ成功します。
出力ファイルを見ると、想定通りのフォーマットで出力できています。
基本操作はマスターしました
以上で基本操作はマスターです。お疲れ様でした。
TOSには様々なパーツがありますが、どのパーツでも「やりたい機能を持ったパーツを置いて繋ぐ」という基本操作でデータ加工ができ、プログラミング知識もほとんど不要です。個人用途だとこの手のソフトを使うことはないと思いますが、会社で使えば、エクセルの大先生から一歩進んでITプロフェッショナルと思われるかも知れません。
ちなみに弊社では、私以外にTOSを使っている人はおらず、複雑な変換の必要があるとPythonでフルスクラッチしています。「ツールに頼らず手で書くことで気持ちがこもり~」みたいな根性論のようですが、そんなものは無駄なので、普通にツールで横着しましょう。
他の簡単な操作も軽く紹介
tFileOutputDelimitedのスキーマ設定で、DateとCommentの位置を逆にしてみました。
列の位置が入れ替わって出力できました。
続いて、tMapというパーツを入れてみました。
tMapの設定。一つ列を追加し、今日の日付をYYYY-MM-DD形式で設定しました。
最後尾に今日の日付が出ました。
入力ファイルに1行、英字で追加してみました。
この行では、コメント列に「 sa gishi 」と、先頭・末尾・途中に半角スペースを入れています。
tMapを再編集し、コメント列にトリム(前後の半角スペースを除外)と、大文字変換を行う処理を設定。
トリムと大文字変換ができました。
コメント コメントは承認制です。