🔌 Talendでデータベースに接続するには?
🛠 使用するコンポーネント
-
tDBConnection(または tMySQLConnection など、DBの種類に応じたもの)
👟 手順(MySQLの例)
-
MySQLが動いているか確認
-
ローカルにインストール済み
-
testというデータベースを使用
-
-
Talendで接続設定をする方法は2つ
方法①:ジョブ内で直接コンポーネントを使う
-
Palette(画面右側) →
tMySQLConnectionをドラッグ&ドロップ -
プロパティに接続情報を手入力
方法②:Repositoryに設定を保存して使う(おすすめ!)
-
Talendの画面左側「Repository」パネルへ
-
Metadata→DB Connections→ 右クリックで「Create Connection」 -
名前をつける(例:
mysqlLocal) -
DBの種類を選ぶ(例:MySQL)
-
接続情報を入力(ホスト名、ポート、DB名、ユーザー、パスワード)
-
「Test connection」で接続確認 → 成功したら「Finish」
➤ この方法だと、再利用が簡単でエラーにも気づきやすい!
-
🎯 実際のジョブ構成(例)
以下のような構成で、Talendジョブを作ります。
コンポーネントの意味:
-
tPreJob:最初に1回だけ実行される -
tDBConnection:データベースに接続 -
tMsgBox:メッセージ表示(接続できたことを確認)
💡 実行結果:
-
「DB running」というメッセージが表示されれば接続成功!
✅ 補足ポイント
-
Repositoryに接続を保存しておくと便利!
-
他のジョブでも再利用可能
-
接続情報が一元管理できる
-
-
tPreJob → tDBConnection → tMsgBox の順番でつなげることで、処理の流れを明確にできる
📌 Talendでデータベースにデータを書き込む
sales.csvというCSVファイルのデータを、
-
そのまま(変換なしで)、
-
MySQLデータベースに書き込む(保存する)
-
使用コンポーネントは
tDBOutput
🧪 事前準備:MySQLに接続できているか確認
ターミナルでMySQLに接続して「test」というデータベースを使用していることを確認。
この中にはまだテーブルは何もない(show tables → 空)
🛠 Talendでジョブを作る手順
✅ ステップ①:既存の接続ジョブを再利用する
-
すでにあるジョブ(例:
dbConnection)を複製する-
右クリック →
Duplicate→ 名前をdbWriteにする
-
-
ジョブを開いて、不要な
tMsgBoxは削除 -
接続部分(tDBConnection)はそのまま使えるか確認しておく
✅ ステップ②:CSVファイルを読み込む
-
左の
Repository>Metadataに、以前定義したsales.csvがあるはず -
それをジョブ画面にドラッグして
tFileInputDelimitedに変換 -
一度
tLogRowに繋いで、CSVの中身がちゃんと読めるか確認(デバッグ用) -
「テーブル」モードにして、ジョブを実行
-
正常にCSV内容が出力されればOK!
-
✅ ステップ③:CSVの内容をデータベースに書き込む
-
tLogRowを削除 -
左の
Metadata>DB ConnectionsからmysqlLocalをドラッグ-
今度は
tDBOutputとして使う(出力用)
-
-
tFileInputDelimitedからtDBOutputに接続 -
既に上でDB接続しているので、「既存の接続を使う」にチェック✅
-
「使用する接続」→
tDBConnection_2(mysqlLocal)
-
✅ ステップ④:テーブルの設定
-
書き込むテーブル名を設定(例:sales)
-
「テーブルがすでに存在する場合」→ 「削除して作成」を選ぶ
-
※ こうすると何度でも安心してジョブを再実行できる
-
✅ ステップ⑤:コミットとロールバックの追加(エラー対応)
-
正常に書き込みが終わったら「tDBCommit」で確定処理
-
エラーが起きたら「tDBRollback」で取り消し
それぞれ接続方法:
-
tDBOutput→ On Component OK →tDBCommit -
tDBOutput→ On Component Error →tDBRollback
※ 警告が出ている場合、該当コンポーネントに「どの接続を閉じるか」指定する必要あり。
(今回だと tDBConnection_2 を選べばOK)
🧪 実行して確認!
-
ジョブを実行すると:
-
書き込まれたログが表示される
-
tDBCommitが「OK」になっていれば成功
-
ターミナルで再確認:
→ すると、CSVの内容がすべて入ったテーブルが確認できます!
📘 Talendでデータベースから読む
以前データを書き込んだ
salesテーブルを、-
Talendを使って 読み込む(SELECTする)
-
使用コンポーネントは
tDBInput -
結果を画面に表示するだけの簡単なジョブ
🛠 Talendでのジョブの作り方(手順)
✅ ステップ①:ベースとなるジョブを複製する
-
以前作った
dbConnectジョブを右クリック →Duplicate(複製) -
新しい名前を
dbReadにする -
作ったら開いて編集開始!
✅ ステップ②:不要なパーツを削除し、接続の準備をする
-
tMsgBoxは削除(表示用なので今回不要) -
tPreJob+tDBConnectionで、DB接続はすでにOKな状態 -
最後に接続を切るために
tPostJobとtMySQLCloseを追加-
tDBConnectionとtMySQLCloseを "On Component OK" で接続 -
tMySQLCloseの「接続を閉じる対象」は、自動で正しいものが選ばれる
-
✅ ステップ③:データベースから読み取る準備
🔹 テーブル構造(スキーマ)をTalendに取り込む
-
左側の
Metadata>DB Connectionsの中からmysqlLocal(DB接続)を右クリック -
Retrieve Schema(スキーマ取得)を選択 -
テーブル一覧が出る(例:
test.sales) -
salesを選択 →Next→ テーブル構造を確認 →Finish
→ これで sales テーブルの定義がTalendに取り込まれる!
✅ ステップ④:テーブルを読み取る設定
-
取り込んだ
salesをジョブ画面にドラッグ -
tDBInputに変換(=読み取り用のコンポーネント) -
設定内容:
-
✅ 「既存の接続を使う」にチェック
-
🔘 既にある
tDBConnectionを選ぶ -
📋 クエリ(SQL)は
SELECT * FROM salesが初期で入っている-
必要があれば WHERE句など追加もOK
-
-
-
結果を画面に出したいので
tLogRowを接続-
モードは「テーブルモード」に変更
-
タイトルを「read table from DB」にしておくとわかりやすい
-
✅ 実行して確認!
-
ジョブを実行すると:
-
🔌 DB接続
-
📥 salesテーブルからデータ読み込み
-
🖥 コンソールに結果表示
-
🔌 DB切断
-
→ 結果として、sales テーブルに入っているデータが 表形式で表示される はず!
🎯 TalendでDB内のテーブル名を1つずつ取り出す
🔧 使用する主なコンポーネント
| コンポーネント名 | 役割 |
|---|---|
tDBTableList | データベース内のテーブル一覧を取得(1つずつ取り出せる) |
tFixedFlowInput | イテレーションしたテーブル名を流すための通路的役割 |
tLogRow | テーブル名を画面に出力(確認用) |
🪜 手順(ステップ・バイ・ステップ)
✅ ステップ①:ベースとなるジョブを複製
すでに作った dbRead ジョブを右クリックして「Duplicate」
→ 新しい名前を dbIterate にして作成
→ 中を開いて編集開始
✅ ステップ②:不要な部品を削除&整理
-
tDBInput(データ取得用コンポーネント)は今回は使わないので削除 -
tLogRowは使うので、画面の右側へ移動
✅ ステップ③:MySQLのテーブル一覧を取得する準備
🔹 tDBTableList を使う
-
Talendのパレットから
tDBTableListをジョブ画面に配置 -
「使用する接続」は、すでに上部で設定済みの
tDBConnectionを選択
✅ ステップ④:1テーブルずつ処理するための流れを作る
🔹 tFixedFlowInput を追加
この部品は、イテレーションで得られたテーブル名を後ろに流すための中継役です。
-
tFixedFlowInputに1つのカラムを追加(例:tableName、型はString) -
入力値には「現在処理中のテーブル名」を入れる
🔸 値の入力方法はこうします:
または、補完機能(Ctrl + Space)を使って
「tDBTableList の CURRENT_TABLE」を選択できます。
✅ ステップ⑤:ログ出力の整備
-
tFixedFlowInputとtLogRowを接続(Row → Main) -
tLogRowの警告が出たら、「Sync columns(カラム同期)」をクリックして修正 -
表示モードは
Basicに変更(テーブルモードだと出力が見づらいため)
✅ ステップ⑥:実行!
ジョブを実行すると:
-
データベースに接続
-
テーブルを1つずつ取得しながら、
tableNameとして出力 -
最後に接続を切断
📦 例として、3つのテーブルがあると、3回繰り返してそれぞれの名前が出力されます。
💡補足知識:Talendにおける「イテレーション(反復処理)」
| 用語 | 意味 |
|---|---|
Row → Iterate | データではなく「繰り返しのトリガー」としてつなぐ |
globalMap | Talend内部の変数(システムが自動的に情報を保持) |
CURRENT_TABLE | 今処理しているテーブル名が入っている特別な変数 |
🎯 Talendでルックアップ(参照)処理する
お客さんデータに含まれる「国コード」を、別データの「国名」と結びつける処理をTalendで行います。
💡やりたいこと(例え話つき)
たとえば「DEU」って書かれた国コードがあったら、それを「Germany(ドイツ)」に直したい!
つまり:
| お客さんの情報(元データ) | 国の一覧(参照データ) |
|---|---|
| 山田 太郎 / DEU | DEU → Germany |
| ジョン・スミス / USA | USA → United States |
tMap を使って実現します。これが「ルックアップ(lookup)処理」です。
🧩 使用するTalendの部品(コンポーネント)
| コンポーネント名 | 役割 |
|---|---|
tRowGenerator | 架空のお客さんデータを自動生成する(名前と国コード) |
tFixedFlowInput | 国コードと国名の対応表(固定データ) |
tMap | 2つのデータをくっつける(ルックアップ) |
tLogRow | データを画面に表示する |
tDBOutput | 最終結果をデータベースに保存する(オプション) |
🪜 手順の流れ(かんたん解説)
✅ ステップ①:お客さんデータと国データを用意する
-
tRowGenerator→ 架空の顧客データを100件ほど作成-
各行に「名前」と「国コード(例:DEU, USA, COL)」が入っている
-
-
tFixedFlowInput→ 国コードの対応表を用意-
例:
countryCode countryName DEU Germany COL Colombia ESP Spain
-
✅ ステップ②:中身を確認しておく(tLogRowで表示)
-
それぞれ
tLogRowに接続して、画面にどんなデータが出ているか確認 -
表モード(table mode)にして見やすくする
✅ ステップ③:tMapで2つのデータを結合(ルックアップ処理)
-
tMapをジョブに追加 -
tRowGeneratorを「メイン入力(Main)」としてつなぐ -
tFixedFlowInputを「ルックアップ入力」としてつなぐ -
tMapの中で次のように設定:
🔹列の結合(マッピング)
-
「顧客データの country(国コード)」列
と -
「国一覧の countryCode」列
を一致させるように設定(ドラッグ&ドロップで簡単) -
「国名(countryName)」列を出力にも追加する
🔹結合方法(Joinの設定)
-
「Inner Join(内部結合)」に設定
→ 共通の国コードがある場合だけマッチさせる -
tMap settings(赤い丸のアイコン)から設定できる
✅ ステップ④:結果を画面に表示
-
tMapの出力をtLogRowに接続 -
実行すると、国コードに対応する国名が付いたデータが表示される
例:
✅ ステップ⑤(オプション):結果をデータベースに保存する
-
tDBOutputコンポーネントを追加 -
tMapの出力から接続 -
次のように設定:
-
「テーブルが存在すれば削除して再作成」
-
テーブル名は
customer_out -
データは「Insert(追加)」方式で書き込む
-
「Sync columns」で列を自動で合わせる
-
-
実行すればデータベースに新しいテーブルが作られ、データが保存される!
✅ ステップ⑥:データベースで確認
-
MySQLで
show tables;→customer_outが存在する -
select * from customer_out limit 10 offset 10;
で中身もチェックできる
