IICS(CDI)でRedshiftとBigQueryを行き来してみる
はじめに
データアナリティクス事業本部の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との簡単なデータ移行を試してみました。
次回は他のデータソースでの移行も試してみたいと思います。
最後まで読んで頂いてありがとうございました。