AWS DMSのFull loadを行いOracleからTarget Endpoint(S3)にparquetを出力

やったこと

CloudFormationでDMS Endpoint Target S3を実装しました
Oracle DBからDMS taskのfull loadのみを実行し、S3にparquetファイルで出力するフローを構築しました
今回はDMS Endpoint Target S3、DMS Task周りでつまづいたポイントをざっくりですが紹介します

実装例

CloudFormationでDMS Endpoint Target S3の実装例だけ置いておきます!

Resources:
  TargetEndpoint:
    Type: AWS::DMS::Endpoint
    Properties:
      EndpointIdentifier: endpoint-target-s3
      EndpointType: target
      EngineName: S3
      SslMode: none
      S3Settings:
        BucketName: target-bucket
        BucketFolder: fullloaded
        DataFormat: parquet
        CompressionType: gzip
        ServiceAccessRoleArn: !GetAtt DMSTargetEndpointServiceRole.Arn

ネットで検索してもCloudFormationでTarget Endpointの設定例がそれほど出てこなかったので、誰かの役に立てれば幸いです(特にややこしいことはやってないですが、、)

DMSのEndpointにすることでハマったこと、調査したこと

CDCを行わない場合supplemental_loggingの設定は不要

データソースはOrarcleを設定していました
CDCを行う場合はサプリメンタルロギングの有効化が必須ですが、今回やった「Full loadのみ(CDCは行わない)」ケースではこの設定は不要でした

DMS taskの設定ReplicationTaskSettings

(CFnで実装したとき)S3Settingsのjsonの記述がおかしいとマネージメントコンソールからEndpointの詳細画面へ遷移するとエラーが表示される
具体的なエラーメッセージは忘れましたが「原因不明のエラーが発生しました」のようなメッセージが表示されました
最終的にjsonを修正するとエラーは解消され正常に詳細画面が表示されました

データ型 FIXED_LEN_BYTE_ARRAY

コマンドラインツールparquet-cliを使ってparquetの中身を除くと、小数を含めることができるデータ型FIXED[16]で出力されていました


apatch-parquetのドキュメントを読んでみるとFIXED_LEN_BYTE_ARRAYを指しているようで、OracleのNUMBER型(presicion=null, scale=null)のデータ型はFIXED[n]で出力される
「Oracle DBのどのデータ型がparquetのどのデータ型に変換されるか?」はAWSのドキュメントに大体記載されている
しかしApatch parquetのデータ型名称と違うので混乱した
正確に調べる場合は、AWSのドキュメントApatch parquetの公式ドキュメントを合わせて読む必要がある

ReplicationTaskSettingsのTargetTablePrepMode

DO_NOTHING, DROP_AND_CREATEで保存時の挙動が違う
DROP_AND_CREATEの場合、S3でもちゃんとファイルを消してくれる
この場合 IAM policyに書き込み権限に加えS3の削除権限も必要になる

出力先pathの設定でpartitionを切るのは不可

通常の出力pathは下記のようになる

/SchemaName/TableName/xxxxx.parquet


下記のようにテーブル名の配下でpartitionを切りたかったけど、既存の設定だけでは実現できそうになかった

#これはボツ
/SchemaName/TableName/year={yyyy}/month={mm}/day={day}/xxxxx.parquet

まとめ

他に色々つまずいた記憶がありますが、今日は一旦ここまで

DMSは全体的に設定箇所は多いですが、「何をしてくれるための設定か」がわかりやすく感じました

また時間があればFull loadの速度の結果を載せたいなあ

確定申告しないとなあ