🔌 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;
で中身もチェックできる