8
4

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入門 (3) ~ データベースI/O~

Last updated at Posted at 2019-03-31

##全体の目的
Talendの超簡単なサンプルジョブを作成して,ETLジョブ開発に必要なスキルを習得することが目的です。

##対象者
ETL / EAI技術者

##環境

使用環境 バージョン
OS Windows10
Talend 7.1.1
PostgreSQL 9.6

##サンプル一覧
以下の順番で習得していきます

# 内容
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プロジェクトデータ)

##今回の目的
データベース入出力について理解する。

##サンプルプログラム概要
特定のテーブルを読み込み別のテーブルに出力するプログラムを作ってみます。

##DB読み込み
まずは入力ソースとしてDBのデータを読み込んでみましょう。
今回はローカル環境のpostgresqlを読み込むことにします。以下のようなDBが使える状態でスタートします。

名称 備考
DB名 qiitadb 事前準備
オーナー koda 事前準備
テーブル名 testuser 下記クエリで準備

e.g. cygwinのpsql

$ psql -l -U koda -h localhost
ユーザ koda のパスワード:
                                             データベース一覧
   名前    |  所有者  | エンコーディング |      照合順序      | Ctype(変換演算子)  |     アクセス権限
-----------+----------+------------------+--------------------+--------------------+-----------------------
 postgres  | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 qiitadb   | koda     | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 |
 template0 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
 template1 | postgres | UTF8             | Japanese_Japan.932 | Japanese_Japan.932 | =c/postgres          +
           |          |                  |                    |                    | postgres=CTc/postgres
(4 行)

入力ソース作成

testuserというテーブルおよびデータを準備します。

testdata.sql
create table testuser (
  id integer primary key,
  name varchar(32) not null,
  gender varchar(32) not null
);
insert into testuser values (1,'kouda','男');
insert into testuser values (2,'mori','男');
insert into testuser values (3,'kubo','男');
insert into testuser values (4,'shimizu','男');
insert into testuser values (5,'aya','女');

testdata.sqlでテーブルを準備した状態

qiitadb=# \d
            リレーション一覧
 スキーマ |   名前   |    型    | 所有者
----------+----------+----------+--------
 public   | testuser | テーブル | koda
(1 行)

qiitadb=# \d testuser
                       テーブル "public.testuser"
   列   |          型           | 照合順序 | Null 値を許容 | デフォルト
--------+-----------------------+----------+---------------+------------
 id     | integer               |          | not null      |
 name   | character varying(32) |          | not null      |
 gender | character varying(32) |          | not null      |
インデックス:
    "testuser_pkey" PRIMARY KEY, btree (id)

qiitadb=# select * from testuser ;
 id |  name   | gender
----+---------+--------
  1 | kouda   | 男
  2 | mori    | 男
  3 | kubo    | 男
  4 | shimizu | 男
  5 | aya     | 女
(5 行)

テーブルデータ読み込み

それではサンプルジョブを作成していきましょう。
リポジトリの[ジョブ]を右クリックし[ジョブの作成]を選択します。
[名前]に"dbio"と入力し[Finish]ボタンをクリックします。

GS000069.png

postgreのテーブルデータ読み込みには[tPostgresqlInput]コンポーネントを使います。
[tPostgresqlInput]と読み込みデータ確認用に[tLogRow]を配置します。
※デザインワークスペース上ではデータベースにPostgreSQLを選択した[tDBInput]として表示されます。

GS000073.png

[tDBInput]の[基本設定]にある接続情報を以下のように設定します。

項目名 設定内容
ホスト localhost
ポート 5432
データベース qiitadb
スキーマ public
ユーザ名 koda
パスワード 環境ごとの設定

GS000076.png

次にスキーマを定義します。
スキーマの編集ボタンをクリックし、カラム名とタイプを以下のように設定します。

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

GS000077.png

最後に実際にデータを取得するためのクエリを設定します。
クエリの右端にあるボタンをクリックします。

GS000080.png

接続設定とSQLが正しく設定できると結果取得ができることをここで確認できます。

①SQLを記載します

設定内容
select id, name, gender from testuser

②実行アイコンをクリックします。
③結果が確認できます。

GS000082.png

[tDBInput]と[tLogRow]をロウでつなぎます。
[tLogRow]の[基本設定]にある[モード]もテーブルにしておきましょう。

GS000084.png

これで設定は完了ですので実行してみます。
testuserテーブルが設定どおり読み込めたことを確認できます。

GS000085.png

データベース出力の設定

今度は実際のデータベースのテーブルにデータを出力してみます。
[tPostgresqlOutput]というDB出力用のコンポーネントを配置します。
※デザインワークスペース上ではデータベースにPostgreSQLを選択した[tDBOutput]として表示されます。

GS000086.png

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

GS000087.png

[tDBOutput]の[基本設定]にある接続情報を以下のように設定します。
※tDBConnectionやメタデータを使うと設定の使いまわしができます。その辺の解説はまた別途^^

項目名 設定内容
ホスト localhost
ポート 5432
データベース qiitadb
スキーマ public
ユーザ名 koda
パスワード 環境ごとの設定
テーブル out1
テーブルへのアクション テーブルがない場合はテーブルを作成します

GS000088.png

次にスキーマを定義します。
[同期カラム]ボタンをクリックすることでロウで流れてくるカラムを自動設定できます。
スキーマの編集ボタンをクリックし、カラム名とタイプが自動設定できていることは確認しておきます。

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

GS000089.png

これで準備は完了です。実行してみましょう。
out1というテーブルが作成され、データが登録されていることが確認できます。

GS000091.png

qiitadb=# \d
            リレーション一覧
 スキーマ |   名前   |    型    | 所有者
----------+----------+----------+--------
 public   | out1     | テーブル | koda
 public   | testuser | テーブル | koda
(2 行)

qiitadb=# \d out1
                       テーブル "public.out1"
   列   |        型         | 照合順序 | Null 値を許容 | デフォルト
--------+-------------------+----------+---------------+------------
 id     | integer           |          |               |
 name   | character varying |          |               |
 gender | character varying |          |               |

qiitadb=# select * from out1;
 id |  name   | gender
----+---------+--------
  1 | kouda   | 男
  2 | mori    | 男
  3 | kubo    | 男
  4 | shimizu | 男
  5 | aya     | 女
(5 行)

##まとめ
今回はデータベース入出力について確認しました。
サンプルとしてはSQLでもできちゃうレベルのテーブル複製でしたが、読み込みと書き出しがコンポーネントの設定だけでできることが確認できたと思います。

あらたに利用したコンポーネントと用途をおさらいしておきます。

  • tPostgresqlInput
    • PostgreSQLのテーブルデータの読み込み
  • tPostgresqlOutput
    • PostgreSQLのテーブルへデータの書き込み

毎度のことですが、ほんのさわりの部分だけを解説していますのでぜひここから深掘りしてみてください。

##次回以降
次回はいよいよ強力なETL処理を実現するためのメインコンポーネントともいえるtMapをやっていきます。

8
4
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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?