目次
プログラミング不要!? TalendがあればSQL知識だけでDB間のデータコピーが行える
企業内でデータ分析システムを構築した場合、業務DBと分析DBを分け、夜間バッチなどでDB間のデータコピーを行うことは多いと思います。ORACLE DBのDATABASE LINKなどを使えば、SQLだけでデータコピーは行えます。しかし、異なる種類のDB間では、この方法は使えないため、プログラミングによるシステム構築が必要になります。これから紹介するのは、今までの常識を超えたDB間のデータコピー方法です。
作成するジョブについて ~入力と出力のレイアウトを統一することがミソ~
今回、作成するTalendのジョブは、可能な限り簡単にするために入力と出力のレイアウトを統一します。レイアウトを統一することで、Talendのスキーマ情報(テーブルなどの項目情報)の設定について、DBから定義情報の取得するだけで行うことができるため、非常にミスも少なくなり、DB側とTalend側で開発者の作業分担も行えます。
コピー元の出力レイアウトを統一するためには、テーブルから必要な情報を絞り込んだビュー(View)を作成する必要があります。このビューの中で複数のテーブル結合、テーブル項目(カラム)の型変換なども行います。
DB接続とスキーマ情報の設定
DB接続の設定
DB接続の設定は、「リポジトリ」→「メタデータ」→「DB接続」を右クリックを行い、コンテキストメニューの「DB接続の作成」から行います。ここから接続できるDBは約40種類で、ORACLEやPoatgreSQLなどの一般的なDBからRedshiftなどのクラウドDBなど大変豊富に用意されています。設定画面にDB接続情報を入力しましたら「チェック」ボタンをクリックすることで接続確認を行えますので、接続確認後にDB接続情報を登録してください。
スキーマ情報の設定
スキーマ情報の設定は、上記で作成したDB接続情報から右クリックを行い、コンテキストメニューの「スキーマ情報の取得」から行います。この画面からは、接続されたDBのテーブル名、ビュー名などが一覧表示されますので、その中から必要な物を選択します。この操作を完了するだけでテーブルやビューのカラムの名前、型などの定義情報をDBから取得し、スキーマ情報を自動生成します。スキーマ情報は、コピー元のビューとコピー先のテーブルの2つを設定してください。
コンポーネントの配置
上記で作成したスキーマ情報をそれぞれ画面中央の作業エリアにドラック&ドロップを行いコンポーネントを配置します。DBがPostgreSQLの場合、コピー元のコンポーネントは「tPostgresqlInput」、コピー先のコンポーネントは「tPostgresqlOutput」になります。配置が完了しましたら、それぞれのコンポーネントを「Row」で紐づければジョブの完成です。もし、コピー元のコンポーネントでSQLエラーが発生する場合、取得のSQLが正しく自動生成されていない場合があります。その場合、コンポーネントの設定でSQLを「”select * from v_test_output”」などに変更してください。
トランザクション処理を行う場合
これまでの作業で基本的なジョブは作成できますが、DBデータの整合性の確保のために複数のテーブルに対して登録、更新、削除を行う場合、トランザクション処理が必要になってきます。現在の状況ですと1つのコンポーネントの処理が完了すれば、その都度、変更の確定(コミット)が行われます。そのため、DBの接続方法を変え、コミットを行うコンポーネントを配置する必要があります。
最初に作成したDB接続情報をドラック&ドロップし、DB接続コンポーネント(PostgreSQLの場合「tPoatgresqlConnection」)を配置します。その後、DB接続を行っているコンポーネントの設定で「既存の接続を使用」にチェックを入れます。この操作で毎回、DB接続を行わなくなるためトランザクション処理が行えるようになります。最後に画面右側のパレットからコミット用のコンポーネント(PostgreSQLの場合「tPoatgresqlCommit」)を配置すれば変更完了です。
Talendジョブをエクスポートすれば夜間バッチの開発完了
作成したジョブは、WindowsのタスクスケジューラやLinuxのcronなどで定期バッチとして実行できるように「ジョブを実行ファイルとしてエクスポートする」機能を持っています、ジョブをエクスポートするためには、リポジトリ上のジョブを右クリックし、コンテキストメニューの「ジョブをエクスポート」から行えます。バッチの設定には、多少、Javaの実行環境の設定が必要ですが、決して難しい作業ではありません。
Talendを使えば大幅な開発コストの削減が行える
通常、DB間のデータコピーを行うバッチ開発は、プログラミングのスキルを持った専門の技術者の依頼する必要があり、簡単なバッチ開発でも数百万円の開発費と数か月の開発期間が掛かることは珍しくありません。しかし、Talendを導入することで、SQLのスキルがあれば、自社開発も行うことができます。また、自社開発ですので、頻繁な分析業務の変更に即座に対応することができます。
次回は、クラウドの代表として、AWSのRedshiftとS3の連携について、ご紹介したいと思います。
【連載、Talend Open Studio によるビッグデータ分析】
- ”Talend”と”RapidMiner Studio”、2つのETLツールを比較してみた
- Talendのインストールと初期設定(Windows 8.1編) ~Javaのバージョンに気を付けろ~
- Talendで簡単なジョブの作成
- フォルダ中のファイルを変換して1つにまとめる
- フィルタリングと文字列置換とプログラムによる変換方法
- DB間のデータコピーを2つのコンポーネントだけで行う (本稿)
- Amazon Redshiftへのデータインポートを2つのコンポーネントだけで行う
- Talendがバッチ処理の開発方法を変える ~スマートな開発を行おう~
- Talendの無償版(TOS)と有償版(Enterprise)の違い
- TOSを使ってMicrosoft Azure SQL Data Warehouseを操作する
- TOSでギガ単位の適切なテストデータを作成する
- Web API からの取得結果をデータベースに登録する処理をノンプログラミングで実現する