オンプレミスからクラウドにデータを移行する方法:Amazon S3

オンプレミスからクラウドにデータを移行する方法:Amazon S3

  • Eric Higaki
    Eric Higaki joined Talend in 2017 as an Associate Evangelist. In this role, Eric works on the community team to provide technical support and brand awareness. Prior to Talend, Eric worked on the Integration team at the largest protein producing company in the world, while also studying at Colorado State University. Go Rams!

クラウドへの移行

2018年はクラウドの年であり、クラウドテクノロジーに移行する企業が増えるにつれて、ビジネスがクラウドを最大限に活用する方法を理解することが重要となります。企業が今日抱えている大きな問題の1つは、オンプレミスのデータベースからクラウドデータストレージへのデータの移行です。適切なツールがなければ、これは時間のかかる退屈なプロセスになります。幸いなことに、ここでTalendを役立てることができます。

Talendでは、オンプレミスのデータベースであるMySQLをクラウドストレージのAmazon S3に移行する必要がありました。Apache Sqoopの複雑さに対処する代わりに、いつでも新しいデータをクラウドへ移行できるジョブをTalend内に作成することにしました。この方法を使用することで貴重な時間を節約でき、その分を新しく移行したデータの分析に使用できました。このブログでは、このジョブをどのように構築したかを振り返ります。早速始めましょう。

接続の作成

Talendのジョブと同様に、最初に接続を作成します。MySQLデータベースに対しては、tMysqlConnectionコンポーネントを使用します。また、tS3Connectionを使用してS3クラウドストレージへの接続を作成する必要があります。このジョブを実行するたびに、毎回MySQLとS3の両方に接続することになるので、両方のコンポーネントの前にtPrejobを追加する必要もあります。

Talendはコード生成ツールであり、tPrejobを使用することで、常に最初にコンパイルするものを制御でき、常にデータベースに接続できるようになります。両方の接続コンポーネントを構成した後、次のスクリーンショットのようにtPrejob、tMysqlConnection、tS3Connectionを接続できます。

テーブルの取得と動的スキーマの設定

両方のストレージプラットフォームに接続したので、MySQLからAmazon S3へのクラウド移行プロセスを開始できます。まず、データベースから移動する、すべてのテーブルのリストを取得する必要があります。tMysqlTableListを使用して、「WHERE句」を使用してリストするテーブルを指定できます。ただし、今回は顧客テーブルからのみ取得します。

転送対象の全テーブルのリストを取得したので、次にそのテーブル内の列のリストを取得します。

「tMysql」グローバル変数を使用することは、コンポーネントから値を取得するのに最適な方法です。これらのグローバル変数は、他のコンポーネントが使用する「tMysql」コンポーネントからデータを取得できます。この場合、((String)globalMap.get(“tMysqlTableList_1_CURRENT_TABLE”))は、tMysqlTableListコンポーネントによって収集されるテーブルからコンポーネントに列を取得させます。Talendでは、グローバル変数を記憶しなくとも簡単に検索できます。「tMysql」と入力してCtrl + スペースキーを押すだけで、すべての「tMysql」グローバル変数がリストに表示され、必要な変数を選択できます。

次に、tFixedFlowInputを追加して、「tableName」列と「columnName」列を生成する必要があります。最初にこれらの列のスキーマを構成した場合、値はtFixedFlowInputコンポーネント内にのみ表示されます。スキーマを設定したら、これらの列の値を設定できます。「tableName」については((String)globalMap.get(“tMysqlTAbleList_1_CURRENT_TABLE”))、「columnName」については((String)globalMap.get(“tMysqlTAbleList_1_COLUMN_NAME”))になります。

固定フローの後にtLogRowを追加すると、実行コンソールに情報を表示することで、ジョブの取得元であるテーブルと列の名前を確認できます。以下は、これまでのジョブを示すスクリーンショットです。

次に、オンプレミスデータベースからデータを取得するときに、データが使用する動的スキーマを設定します。名前が示すように、動的スキーマは、その時点で読み取られる列に応じて変化するスキーマタイプであり、ジョブに不可欠です。

動的なスキーマを設定するには、tSetDynamicSchemaというコンポーネントを使用します。tSetDynamicSchemaを使用すると、値「columnName」に基づいてスキーマを動的に設定できます。スキーマが動的になったので、各テーブルを個別に移動する必要はなくなり、複数の異なるテーブルを簡単に移動できます。

データの読み取りとテーブルの書き込み

動的スキーマを設定したら、tSetDynamicSchemaコンポーネントから作成された動的タイプを使用して、テーブルデータの読み取りを開始する準備ができました。オンプレミスのデータベースからデータを読み取るため、MySQLデータベースのtMysqlInputから読み取る入力コンポーネントを使用する必要があります。最初に、tMysqlInputコンポーネントのスキーマを編集して、動的DBタイプを使用する必要があります。このスキーマの列に「dynamic_row」という名前を付け、タイプは(もちろん)「Dynamic」、DBタイプは「VARCHAR」を指定します。

スキーマを設定したら、tMysqlInputコンポーネントを構成し、tMysqlTableListによってリストされている現在のテーブルからデータが取得されることを確認します。

テーブル内のデータは現在リストされている現在のテーブルから読み取られますが、依然としてデータをCSVファイルに書き出す必要があります。このために、tFileOutputDelimitedを使用します。「ファイル名」が正しいファイルパスに従っていることを確認する必要があります。

もう少しで終わります。以下は、これまでに作成したジョブを示すスクリーンショットです。

Amazon S3へのファイルの配置

これまでのところ、このジョブはcustomerという名前のすべてのテーブルを読み取り、指定されたフォルダー内のCSVファイルに書き込みます。オンプレミスのデータベースにあるテーブルからデータを取得できるようになったので、これらのファイルをAmazon S3に移動してジョブを完了します。

tFileListを使用すると、指定したフォルダー内に含まれる全ファイルのリストを取得できます。ここでは、オンプレミスデータベースから取得した全テーブルのリストを取得できます。ファイルを配置するディレクトリを指定する必要があるだけです。

すべてのファイルのリストを取得したら、それらをS3バケットに移動し始めることができます。そのために、tS3Putコンポーネントを使用します。「Bucket」、「Key」、および「File」を指定するだけです。「Key」はS3内のファイルの名前であり、「File」はS3にアップロードされるファイルの名前です。

tFileListとtS3Putの構成が完了したので、あとは、クラウド移行ジョブに最後の仕上げをするだけです。ジョブの最初に開いた接続を覚えていますか? tPostjob、tMysqlClose、tS3Closeを使用すると、ジョブが実行されるたびに開いた接続を閉じることができます。ここでも、メインループがコンパイルされた後に何が起こるかを制御でき、tPostjobコンポーネントの意義が発揮されます。簡単ですね。完成したジョブは、次のようになります。

ジョブの実行

ジョブが実行され、すべてが正常に処理すると、実行コンソールは下のスクリーンショットと一致するはずです。ご覧のとおり、コンソールには、読み取りおよび書き込み中のテーブルと、対応する列名が表示されます。

ジョブが完了したので、テーブルごとに複数のジョブを作成したり、厄介なハンドコーディングに煩わされたりすることなく、オンプレミスデータベースからクラウドストレージに任意のテーブルを移動できます。クラウド対応の準備が整うのは気持ちの良いことです。

デモをライブで視聴

このデモをライブで視聴するには、3月22日(木)にTalendのFacebookページに参加してください。#TalendDevLive ではジョブを構築する手順を紹介し、質問にも答えます。お見逃しなく!

ディスカッションに参加

0 Comments

コメントを残す

Your email address will not be published. Required fields are marked *