
IICS(CDI)でRedshiftとBigQueryを行き来してみる
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
データアナリティクス事業本部のkobayashiです。
Informatica Intelligent Cloud Services(以降、IICS)はオンプレミスおよびクラウド環境に置かれているデータサービスとアプリケーションサービスを統合するiPaaS(integration Platform as a Service)製品です。
IICSの機能の一つであるInformatica Cloud Data Integration(以降、CDI)ではクラウドやオンプレミスに存在する大量のデータをシームレスに統合します。 CDIではインフォマティカで用意してあるドライバを使うことで様々なデータソースから様々なターゲットにデータを統合することができます。
今回は他のデータ統合ツールでも行ったRedshiftとBigQuery間でデータを相互にデータ移行してみたいと思います。
データ移行の内容と下準備
具体的に行う内容としては、
- Redshiftに保存してある
irisテーブルのデータをBigQueryへrs_irisとして移行する。また処理時間がわかるようにupdatetimeカラムに処理時間を追加する。 - 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)マッピン、ソース、ターゲットそれぞれの全般タブの名前で適切な名前を付ける。
手順3)ソースステップを選択し、ソースタブを開いてデータソースの設定を行う。
- 接続 : 先に作成したRedshiftの接続を選択
- オブジェクト :
選択を押下しデータソースを選択
手順4)詳細を押下すると詳細設定が開くのでS3 Bucket NameでS3のバケット名を入力する。
手順5)処理日時を追加するためにソースとターゲットの間に式ステップを左のメニューからドラッグ&ドロップする。
手順6)式ステップの式タブを選択しフィルドを追加する。
| フィールド | 式 |
|---|---|
| updatetime | Systimestamp()を入力 |
手順7)ターゲットステップを選択し、ターゲットタブを開いてデータソースの設定を行う。
- 接続 : 先に作成したBigQueryの接続を選択
- オブジェクト :
選択を押下しデータソースを選択
手順8)フィールドマッピングタブを選択し、右下のオートマッチ>正確なフィールド名を押下してターゲットのフィールドにマッピングを行う。
次にデータ移行を行うジョブを実行するマッピングタスクを作成します。
マッピングタスクの作成
手順1)左のメニューの新規を選択し、モーダルからマッピングタスクを選択する。

手順2)マッピングタスクの定義を設定し次へを謳歌する。
- タスク名 : 適切なタスク名を入力
- マッピング : 先に作成した
マッピングを選択
手順3)マッピングタスクのスケジュールを設定し完了を押下してマッピングタスクを作成する。
*マッピングのジョブを定期実行する場合はスケジュールを設定しますが、今回は手動実行するので設定を行いません。
これでデータ移行を実行する準備が整ったので実行してみます。
データ移行を実行
手順1)作成したマッピングタスクを選択し右上の実行を押下する。
手順2)左のメニューからマイジョブを選択しとジョブの実行状況を確認する。

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との簡単なデータ移行を試してみました。
次回は他のデータソースでの移行も試してみたいと思います。
最後まで読んで頂いてありがとうございました。
































