Talendデータベース操作について

 


🔌 Talendでデータベースに接続するには?

🛠 使用するコンポーネント

  • tDBConnection(または tMySQLConnection など、DBの種類に応じたもの)

👟 手順(MySQLの例)

  1. MySQLが動いているか確認

    • ローカルにインストール済み

    • test というデータベースを使用

  2. Talendで接続設定をする方法は2つ

    方法①:ジョブ内で直接コンポーネントを使う

    • Palette(画面右側) → tMySQLConnection をドラッグ&ドロップ

    • プロパティに接続情報を手入力

    方法②:Repositoryに設定を保存して使う(おすすめ!)

    • Talendの画面左側「Repository」パネルへ

    • MetadataDB Connections → 右クリックで「Create Connection

    • 名前をつける(例:mysqlLocal

    • DBの種類を選ぶ(例:MySQL)

    • 接続情報を入力(ホスト名、ポート、DB名、ユーザー、パスワード)

    • Test connection」で接続確認 → 成功したら「Finish」

    ➤ この方法だと、再利用が簡単でエラーにも気づきやすい!


🎯 実際のジョブ構成(例)

以下のような構成で、Talendジョブを作ります。

[tPreJob]
↓ OnComponentOk [tDBConnection](例:tMySQLConnection) ↓ OnSubjobOk [tMsgBox] → "DB running" と表示

コンポーネントの意味:

  • tPreJob:最初に1回だけ実行される

  • tDBConnection:データベースに接続

  • tMsgBox:メッセージ表示(接続できたことを確認)

💡 実行結果:

  • 「DB running」というメッセージが表示されれば接続成功!


✅ 補足ポイント

  • Repositoryに接続を保存しておくと便利!

    • 他のジョブでも再利用可能

    • 接続情報が一元管理できる

  • tPreJob → tDBConnection → tMsgBox の順番でつなげることで、処理の流れを明確にできる



📌 Talendでデータベースにデータを書き込む

  • sales.csvというCSVファイルのデータを、

  • そのまま(変換なしで)、

  • MySQLデータベースに書き込む(保存する)

  • 使用コンポーネントは tDBOutput


🧪 事前準備:MySQLに接続できているか確認

ターミナルでMySQLに接続して「test」というデータベースを使用していることを確認。
この中にはまだテーブルは何もない(show tables → 空)


🛠 Talendでジョブを作る手順

✅ ステップ①:既存の接続ジョブを再利用する

  1. すでにあるジョブ(例:dbConnection)を複製する

    • 右クリック → Duplicate → 名前を dbWrite にする

  2. ジョブを開いて、不要な tMsgBox は削除

  3. 接続部分(tDBConnection)はそのまま使えるか確認しておく


✅ ステップ②:CSVファイルを読み込む

  1. 左の Repository > Metadata に、以前定義した sales.csv があるはず

  2. それをジョブ画面にドラッグして tFileInputDelimited に変換

  3. 一度 tLogRow に繋いで、CSVの中身がちゃんと読めるか確認(デバッグ用)

  4. 「テーブル」モードにして、ジョブを実行

    • 正常にCSV内容が出力されればOK!


✅ ステップ③:CSVの内容をデータベースに書き込む

  1. tLogRow を削除

  2. 左の Metadata > DB Connections から mysqlLocal をドラッグ

    • 今度は tDBOutput として使う(出力用)

  3. tFileInputDelimited から tDBOutput に接続

  4. 既に上でDB接続しているので、「既存の接続を使う」にチェック✅

    • 「使用する接続」→ tDBConnection_2(mysqlLocal)


✅ ステップ④:テーブルの設定

  1. 書き込むテーブル名を設定(例:sales)

  2. 「テーブルがすでに存在する場合」→ 「削除して作成」を選ぶ

    • ※ こうすると何度でも安心してジョブを再実行できる


✅ ステップ⑤:コミットとロールバックの追加(エラー対応)

  • 正常に書き込みが終わったら「tDBCommit」で確定処理

  • エラーが起きたら「tDBRollback」で取り消し

それぞれ接続方法:

  • tDBOutputOn Component OKtDBCommit

  • tDBOutputOn Component ErrortDBRollback

※ 警告が出ている場合、該当コンポーネントに「どの接続を閉じるか」指定する必要あり。
(今回だと tDBConnection_2 を選べばOK)


🧪 実行して確認!

  • ジョブを実行すると:

    • 書き込まれたログが表示される

    • tDBCommit が「OK」になっていれば成功

ターミナルで再確認:

SHOW TABLES;
SELECT * FROM sales;

→ すると、CSVの内容がすべて入ったテーブルが確認できます!



📘 Talendでデータベースから読む

  • 以前データを書き込んだ sales テーブルを、

  • Talendを使って 読み込む(SELECTする)

  • 使用コンポーネントは tDBInput

  • 結果を画面に表示するだけの簡単なジョブ


🛠 Talendでのジョブの作り方(手順)


✅ ステップ①:ベースとなるジョブを複製する

  • 以前作った dbConnect ジョブを右クリック → Duplicate(複製)

  • 新しい名前を dbRead にする

  • 作ったら開いて編集開始!


✅ ステップ②:不要なパーツを削除し、接続の準備をする

  • tMsgBox は削除(表示用なので今回不要)

  • tPreJob + tDBConnection で、DB接続はすでにOKな状態

  • 最後に接続を切るために tPostJobtMySQLClose を追加

    • tDBConnectiontMySQLClose"On Component OK" で接続

    • tMySQLClose の「接続を閉じる対象」は、自動で正しいものが選ばれる


✅ ステップ③:データベースから読み取る準備

🔹 テーブル構造(スキーマ)をTalendに取り込む

  1. 左側の Metadata > DB Connections の中から mysqlLocal(DB接続)を右クリック

  2. Retrieve Schema(スキーマ取得) を選択

  3. テーブル一覧が出る(例:test.sales

  4. sales を選択 → Next → テーブル構造を確認 → Finish

→ これで sales テーブルの定義がTalendに取り込まれる!


✅ ステップ④:テーブルを読み取る設定

  1. 取り込んだ sales をジョブ画面にドラッグ

  2. tDBInput に変換(=読み取り用のコンポーネント)

  3. 設定内容:

    • ✅ 「既存の接続を使う」にチェック

    • 🔘 既にある tDBConnection を選ぶ

    • 📋 クエリ(SQL)は SELECT * FROM sales が初期で入っている

      • 必要があれば WHERE句など追加もOK

  4. 結果を画面に出したいので 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)

  • 入力値には「現在処理中のテーブル名」を入れる

🔸 値の入力方法はこうします:

((String)globalMap.get("tDBTableList_1.CURRENT_TABLE"))

または、補完機能(Ctrl + Space)を使って
「tDBTableList の CURRENT_TABLE」を選択できます。


✅ ステップ⑤:ログ出力の整備

  • tFixedFlowInputtLogRow を接続(Row → Main)

  • tLogRow の警告が出たら、「Sync columns(カラム同期)」をクリックして修正

  • 表示モードは Basic に変更(テーブルモードだと出力が見づらいため)


✅ ステップ⑥:実行!

ジョブを実行すると:

  • データベースに接続

  • テーブルを1つずつ取得しながら、tableName として出力

  • 最後に接続を切断

📦 例として、3つのテーブルがあると、3回繰り返してそれぞれの名前が出力されます。


💡補足知識:Talendにおける「イテレーション(反復処理)」

用語意味
Row → Iterateデータではなく「繰り返しのトリガー」としてつなぐ
globalMapTalend内部の変数(システムが自動的に情報を保持)
CURRENT_TABLE今処理しているテーブル名が入っている特別な変数



🎯 Talendでルックアップ(参照)処理する

お客さんデータに含まれる「国コード」を、別データの「国名」と結びつける処理をTalendで行います。


💡やりたいこと(例え話つき)

たとえば「DEU」って書かれた国コードがあったら、それを「Germany(ドイツ)」に直したい!
つまり:

お客さんの情報(元データ)国の一覧(参照データ)
山田 太郎 / DEUDEU → Germany
ジョン・スミス / USAUSA → United States
このように、「コード → 名前」への変換を Talend の tMap を使って実現します。

これが「ルックアップ(lookup)処理」です。


🧩 使用するTalendの部品(コンポーネント)

コンポーネント名役割
tRowGenerator架空のお客さんデータを自動生成する(名前と国コード)
tFixedFlowInput国コードと国名の対応表(固定データ)
tMap2つのデータをくっつける(ルックアップ)
tLogRowデータを画面に表示する
tDBOutput最終結果をデータベースに保存する(オプション)

🪜 手順の流れ(かんたん解説)


✅ ステップ①:お客さんデータと国データを用意する

  • tRowGenerator → 架空の顧客データを100件ほど作成

    • 各行に「名前」と「国コード(例:DEU, USA, COL)」が入っている

  • tFixedFlowInput → 国コードの対応表を用意

    • 例:

      countryCodecountryName
      DEUGermany
      COLColombia
      ESPSpain

✅ ステップ②:中身を確認しておく(tLogRowで表示)

  • それぞれ tLogRow に接続して、画面にどんなデータが出ているか確認

  • 表モード(table mode)にして見やすくする


✅ ステップ③:tMapで2つのデータを結合(ルックアップ処理)

  • tMap をジョブに追加

  • tRowGenerator を「メイン入力(Main)」としてつなぐ

  • tFixedFlowInput を「ルックアップ入力」としてつなぐ

  • tMapの中で次のように設定:

🔹列の結合(マッピング)

  • 「顧客データの country(国コード)」列
     と

  • 「国一覧の countryCode」列
     を一致させるように設定(ドラッグ&ドロップで簡単)

  • 「国名(countryName)」列を出力にも追加する

🔹結合方法(Joinの設定)

  • 「Inner Join(内部結合)」に設定
     → 共通の国コードがある場合だけマッチさせる

  • tMap settings(赤い丸のアイコン)から設定できる


✅ ステップ④:結果を画面に表示

  • tMap の出力を tLogRow に接続

  • 実行すると、国コードに対応する国名が付いたデータが表示される
     例:

    Name | country | countryName
    ------------|---------|-------------- Taro Yamada| DEU | Germany John Smith | COL | Colombia

✅ ステップ⑤(オプション):結果をデータベースに保存する

  • tDBOutput コンポーネントを追加

  • tMapの出力から接続

  • 次のように設定:

    • 「テーブルが存在すれば削除して再作成」

    • テーブル名は customer_out

    • データは「Insert(追加)」方式で書き込む

    • 「Sync columns」で列を自動で合わせる

  • 実行すればデータベースに新しいテーブルが作られ、データが保存される!


✅ ステップ⑥:データベースで確認

  • MySQLで show tables;customer_out が存在する

  • select * from customer_out limit 10 offset 10;
     で中身もチェックできる




前の記事:Talendファイル操作について

次の記事:Talend そのほかの形式の操作について