AWS Database Migration Serviceを利用するときのちょっとひっかかったところ

Pocket
LINEで送る

こんにちは、平尾です。

弊社のCircuitXのDBの一部をauroraからdynamoDBに移行することになりました。データ移行面倒くさいなぁと思っていたのですが、AWSでAWS Database Migration Service(DMS)というサービスがあり、こちらを利用すると簡単にデータ移行ができました。

移行の際にちょっとひっかかったところがあったのでブログに書きます。

 

まずざっくりとDMSについて紹介します。

移行手順は下記のようになります。

  1. レプリケーションインスタンスの設定
  2. ソースエンドポイントの作成
  3. ターゲットエンドポイントの設定
  4. データベース移行タスクの作成
  5. データベース移行タスクを実行してデータ移行を行う

スクリーンショット 2019-04-22 12.33.36

  • ソースエンドポイント(Source database):移行元のDB(aurora)
  • ターゲットエンドポイント(Target database):移行先のDB(dynamoDB)
  • レプリケーションインスタンス(AWS DMS replication instance):ソースエンドポイントからターゲットエンドポイントへのデータ移行を行うインスタンス

 

 

移行は非常に簡単にできたのですが、ひとつひっかかったところがありました。

データベース移行タスク作成の差異にテーブルマッピングという項目があります。

この項目では、移行元のtable指定や移行するレコードのフィルタリング(ソースフィルタ)も可能となっております。

スクリーンショット 2019-04-24 12.24.38

 

スクリーンショット 2019-04-24 12.24.46

AWSのドキュメントにも記載がありますが、ソースフィルタで複数フィルタリングを行うことは可能なのですがそれらはAND演算子としてのみフィルタリングされます。つまりOR演算子としてのフィルタリングはできない仕様となってます。

例えば、英検3級以上で漢検3級以上の場合というフィルタリングは可能なのですが、英検3級以上または漢検3級以上の場合というフィルタリングは不可能となっております。

正直AND演算子でフィルタリングできるのなら、当然OR演算子でもフィルタリングできのではないかと思いこんで取り組んでいたので結構びっくりしました。

 

結果的には、弊社でデータ移行した場合はどうしてもOR演算子でのフィルタリングが必要でしたので、一度別のDB(aurora)をたてて、そこにフィルタリング舌状態でデータをインポートした後、DMSをつかってデータ移行を行いました。

技術的にOR演算子のフィルタリングは難しいのでしょうか?

Pocket
LINEで送る