[Talend] DBからデータを抽出してS3へPutする

2016.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データ分析基盤構築においてありがちな連携パターンのサンプルジョブですが、作ってみました。

使用した環境

  • Talend Open Studio 6.1 for MACOS
  • 読み出し元D/B:仮想OS上のWindows7 on MySQL5.5
  • ジョブをデザインする

    流れとしては

    1. MySQLへのコネクションコンポーネント( tMysqlConnection )
    2. MySQLからデータを抽出するコンポーネント( tMysqlInput )
    3. クエリ結果をファイルに書き出すコンポーネント( tFileoutputDelimited )
    4. S3へのコネクションコンポーネント( tS3Connection )
    5. S3へファイルを配置するコンポーネント( tS3Put )

    この5つのコンポーネントを使用してジョブを作成します。 エラー処理とかも本来は必要ですが、ここでは割愛して正常系のみを想定して作成します。

    ジョブを作成する

    1.まずは各コンポーネントをペインにドラッグ&ドロップで配置します。

    CMBlog9_1_1

    2.配置したあとは処理の流れを想定して、コンポーネントの位置を整えます(見栄え良くコンポーネントを配置する)

    CMBlog9_2_1

    3.関係線を定義します。 CMBlog9_3_1

    4.tMysqlConnectionのプロパティを設定します。 CMBlog9_4_1

    5.tMysqlInputのプロパティを設定します。 『既存の接続を使用』にチェックし、tMysqlConnection_1が選択されていることを確認し、select対象のテーブル名を指定します。 あとはクエリを書いて終了です。(ここでは全件を取得する "select * from customers" にします。)

    CMBlog9_5_1

    6.tFileOutputDelimitedでファイルを書き出すためのスキーマを定義する

    書き出すファイルの位置と区切り文字や改行コード及びヘッダーを含む等を適切に指定します。

    CMBlog9_6_1

    次にMySQL上のcumtomersテーブルのデータを確認します。(customersテーブルは下記のような感じで作成しています)

    CMBlog9_3

    上記のテーブルのデータをファイルに書き出したいのでtFileOutputDelimitedの『スキーマの編集』で定義します。

    入力スキーマで定義が終わったら全選択後、オレンジ枠で囲んでいる部分の矢印クリックで出力スキーマにコピーし、最後にOKをクリックします。

    CMBlog9_7_1

    7.tS3Connectionのプロパティを設定します。

    Access Key と Secret Key を適切なもので設定します。

    CMBlog9_8_1

    8.tS3Putのプロパティを設定します。

    CMBlog9_9_1

    ※しばらく使ってないといつも Key に指定するのってなんだっけ?ってなるのですが、S3にPutする時のファイル名を指定します。

    これでジョブ作成は完了です。

    tMysqlInputコンポーネントでビックリマークが出てる場合は CMBlog9_10_1

    のようにスキーマ編集でDBタイプを指定すればビックリマークが消えると思います。

    実行してみる

    S3のバケットが空であることを確認。 CMBlog9_11_1

    実行してみます。

    CMBlog9_12_1

    エラーもなく実行が終わったので、S3にファイルがアップされているかを確認します。

    CMBlog9_13_1

    問題なくS3へファイルがアップされていることが確認できました。

    まとめ

    基本的にはRedshiftにロードする場合はS3経由が前提となりますので、必要に応じてtFileOutputDelimitedのプロパティにてUTF8への文字コードで書き出しを行う必要がありますしファイルを圧縮する方が効率が良いので、必要に応じてプロパティで『zipファイルに圧縮』にチェックすることも必要になりますが、基本はDBから抽出しS3へアップロード、copyコマンドでRedshiftへロードという流れは変わりませんので、ちょっと検証とかで試してみたいとかであれば使えるかなとは思います。