IICS(CDI)でRedshiftとBigQueryを行き来してみる

2020.11.02

はじめに

データアナリティクス事業本部のkobayashiです。

Informatica Intelligent Cloud Services(以降、IICS)はオンプレミスおよびクラウド環境に置かれているデータサービスとアプリケーションサービスを統合するiPaaS(integration Platform as a Service)製品です。

IICSの機能の一つであるInformatica Cloud Data Integration(以降、CDI)ではクラウドやオンプレミスに存在する大量のデータをシームレスに統合します。 CDIではインフォマティカで用意してあるドライバを使うことで様々なデータソースから様々なターゲットにデータを統合することができます。

今回は他のデータ統合ツールでも行ったRedshiftとBigQuery間でデータを相互にデータ移行してみたいと思います。

データ移行の内容と下準備

具体的に行う内容としては、

  1. Redshiftに保存してあるirisテーブルのデータをBigQueryへrs_irisとして移行する。また処理時間がわかるようにupdatetimeカラムに処理時間を追加する。
  2. BigQueryのrs_irisからRedshiftのbq_irisへ移行する。こちらも処理時間がわかるようにupdatetimeカラムに処理時間を追加する。

図にすると以下の様になります。

今回は簡単にデータ移行を行うためCDIの実行環境としてInformatica Cloud Hosted Agentを使用します。これはデータ処理をインフォマティカのサーバにて行うのでその点が気になる場合はSecure Agentを使うことで閉じた環境でデータ移行を行います。 この詳しい説明は他のエントリでされているためここでは割愛します。

CDIでソースやターゲットにするためには接続を作成する必要があります。これは使うサービスによって設定する項目が違うため今回扱うRedshiftとBigQueryの接続に必要な下準備を予めしておきます。

RedshiftとAWSでの下準備

Redshiftの接続設定を作成するためには以下の情報が必要になります。

  • Redshiftの接続情報
    • ユーザ名、パスワード、DB名
  • COPY/UNLOADするためのS3のバケット名とアクセスを行えるIAMユーザー情報
    • バケット名、アクセスキー、シークレットキー

設定としては、今回の例ですとInformatica Cloud Hosted Agentからの接続を行えるように外部の環境から接続を行えるようにセキュリティグループとグローバルアクセスができる設定をRedshiftに行う必要がありますのでその設定も予め行っておきます。 またバケット作成時の注意点として、Redshiftのリージョンとバケットのリージョンを合わせる必要があるので注意してください。

BigQueryとGCPでの下準備

BigQueryの接続設定を作成するためには以下の情報が必要になります。

  • サービスアカウントの情報
  • Cloud Stoageのバケット名

設定としては、サービスアカウントを作成した後に適切な権限を付ける必要があります。

今回は簡単に行うため上記の権限をサービスアカウントに設定していますが、本番環境で同様のジョブを行うようでしたら、BigQueryで対象のデータセットのみに管理者権限を与え、CloudStorageで特定のバケットのみに読み書きの権限を与える必要があります。

RedshiftとBigQueryの接続を作成

Redhishtの接続を作成

メニューから管理者機能へ進み接続設定を行います。

手順1)アドオンコネクタで無料トライアルを開始するを押下しコネクタを有効にする。

手順2)接続新しい接続を押下し、接続設定画面を開く。

手順3)下記のように接続設定を行い右上の接続テストを押下し接続のテストに成功しましたが表示されたら保存を押下し接続を作成する。

  • タイプ:Amazon Redshift V2を選択
  • ランタイム接続: Informatica Cloud Hosted Agentを選択
  • Username: Redshiftへ接続を行うユーザー名を入力
  • Password: Redshiftへ接続を行うパスワードを入力
  • Access Key ID: S3へ接続するユーザーのアクセスキーを入力
  • Secret Access Key: S3へ接続するユーザーのシークレットキーを入力
  • JDBC URL: jdbc:redshift://{Redshiftのエンドポイント}:5439/{DB名}を入力

BigQueryの接続を作成

メニューから管理者機能へ進み接続設定を行います。

手順1)アドオンコネクタで無料トライアルを開始するを押下しコネクタを有効にする。

手順2)接続新しい接続を押下し、接続設定画面を開きます。

手順3)下記のように接続設定を行い右上の接続テストを押下し接続のテストに成功しましたが表示されたら保存を押下し接続を作成します。

  • タイプ:Google Big Query V2を選択
  • ランタイム接続: Informatica Cloud Hosted Agentを選択
  • Service Account ID: サービスアカウントのメールアドレスを入力
  • Service Account Key: サービスアカウントで作成したjsonキー内のprivate_keyの値をコピペ
  • Project ID: BigQueryのプロジェクト名を入力
  • Storage Path: データのCOPY/UNLOADを行うバケット名を入力

これで接続の設定は終わったのでCDIでデータ移行の設定を行います。

RedshiftからBigQueryへのデータ移行

今回行う手順は2つのステップです。

  1. マッピングを作成する
  2. マッピングタスクを作成しタスクを実行してデータ移行を行う

メニューからデータ統合へ進み接続設定を行います。

マッピングの作成

手順1)左のメニューの新規を選択し、モーダルからマッピングを選択する。

手順2)マッピン、ソース、ターゲットそれぞれの全般タブの名前で適切な名前を付ける。

手順3)ソースステップを選択し、ソースタブを開いてデータソースの設定を行う。

  • 接続 : 先に作成したRedshiftの接続を選択
  • オブジェクト : 選択を押下しデータソースを選択

手順4)詳細を押下すると詳細設定が開くのでS3 Bucket NameでS3のバケット名を入力する。

手順5)処理日時を追加するためにソースとターゲットの間にステップを左のメニューからドラッグ&ドロップする。

手順6)ステップのタブを選択しフィルドを追加する。

フィールド
updatetime Systimestamp()を入力

手順7)ターゲットステップを選択し、ターゲットタブを開いてデータソースの設定を行う。

  • 接続 : 先に作成したBigQueryの接続を選択
  • オブジェクト : 選択を押下しデータソースを選択

手順8)フィールドマッピングタブを選択し、右下のオートマッチ正確なフィールド名を押下してターゲットのフィールドにマッピングを行う。

マッピング後

ここまででマッピングの設定は完成しました。

次にデータ移行を行うジョブを実行するマッピングタスクを作成します。

マッピングタスクの作成

手順1)左のメニューの新規を選択し、モーダルからマッピングタスクを選択する。

手順2)マッピングタスクの定義を設定し次へを謳歌する。

  • タスク名 : 適切なタスク名を入力
  • マッピング : 先に作成したマッピングを選択

手順3)マッピングタスクのスケジュールを設定し完了を押下してマッピングタスクを作成する。

*マッピングのジョブを定期実行する場合はスケジュールを設定しますが、今回は手動実行するので設定を行いません。

これでデータ移行を実行する準備が整ったので実行してみます。

データ移行を実行

手順1)作成したマッピングタスクを選択し右上の実行を押下する。

手順2)左のメニューからマイジョブを選択しとジョブの実行状況を確認する。

手順3)インスタンス名を押下しジョブの詳細を確認する。

GCPのコンソールからBigQueryのデータを確認するとデータ移行が行われ、ジョブの実行日にもデータが入っていることがわかります。

BigQueryからRedshiftへのデータ移行

「RedshiftからBigQueryへのデータ移行」と同じステップを辿ります。

メニューからデータ統合へ進み接続設定を行います。

マッピングの作成

手順1)左のメニューの新規を選択し、モーダルからマッピングを選択する。

手順2)マッピン、ソース、ターゲットそれぞれの全般タブの名前で適切な名前を付ける。

手順3)ソースステップを選択し、ソースタブを開いてデータソースの設定を行う。

  • 接続 : 先に作成したBigQueryの接続を選択
  • オブジェクト : 選択を押下しデータソースを選択

手順4)処理日時を追加するためにソースとターゲットの間にステップを左のメニューからドラッグ&ドロップする。

手順5)ステップのタブを選択しフィルドを追加する。先ほどと違いBigQueryのカラムにはupdatetimeがあり同一のフィールド名は作成できないので新しく作成するフィールド名を変更する。

フィールド
new_updatetime Systimestamp()を入力

手順6)ターゲットステップを選択し、ターゲットタブを開いてデータソースの設定を行う。

  • 接続 : 先に作成したRedshiftの接続を選択
  • オブジェクト : 選択を押下しデータソースを選択

手順7)詳細を押下すると詳細設定が開くのでS3 Bucket NameでS3のバケット名を入力する。

手順8)フィールドマッピングタブを選択し、右下のオートマッチ正確なフィールド名を押下してターゲットのフィールドにマッピングを行う。

手順9)手順8でオートマッチをするとターゲットフィールドのupdatetimeにはBigQueryのupdatetimeカラムが割り当てられる。

これを式で作成したnew_updatetimeに変更する必要があるので、マッピングされたフィールドの右はしの``左の受信フィールドからマッピングされたフィールドにドラッグ&ドロップする。

ここまででマッピングの設定は完成しました。

此処から先はRedshiftからBigQueryの時と同様にマッピングタスクを作成して実行するだけなので割愛します。

マッピングタスクを作成して実行するとRedshiftのデータを確認するとデータ移行が行われ、ジョブの実行日にもデータが入っていることがわかります。

まとめ

CDIを使うことで異なるサービス間でもGUI上で簡単にデータ移行を行えました。今回はRedshiftとBigQueryとの簡単なデータ移行を試してみました。

次回は他のデータソースでの移行も試してみたいと思います。

最後まで読んで頂いてありがとうございました。