Aurora(MySQL)からDMSを使ってSnowflakeにデータを転送する場合にはパーティションドロップが使えない話
前置き
こんにちは。株式会社GENDAのデータエンジニアのこみぃです。
本番DBのデータをデータウェアハウスに入れたいっていう需要は常にありますよね。
弊社でもそういう需要が出てきたので対応していました。
そして、AWSのAuroraのデータをSnowflakeに同期するには、先駆者様がすでに前例を記事にしてくれています。ありがたい!!
さっそくこの手順を私もやろうかと思ったのですが、その作業の過程で結構つらい事態に行き当たったので本日はそのお話など。
DMSはパーティション操作(ALTER)に対応していない
DMSでのRDS -> S3のレプリケーションは無事に完成し、色々なテストをしていたときです。
ある操作の際にDMSがエラーになりました。
ログを確認していくと、以下のようなエラーが!!
Cannot change partition in table 'てーぶるめい'. Altering partitions is not currently supported (mysql_endpoint_capture.c:1860)
パーティションドロップが、できない、、、
本番DBはログ系のデータを一定期間保持したあとに削除する運用になることがままあり、その際にパーティションドロップを使うのは考えられることなので、それに対応してくれないのは結構困ります。
その、すごく困ります。すごくすごい困る。
そういうわけで、他に推奨の方法がないかというのをサポートに問い合わせつつ、一旦はパーティションドロップを使わないのが良いのかなと思っています。
そもそもDMSはALTERにだいぶ弱い
AuroraをソースとしてDMSを使う場合、DMSはAuroraのbinlogを追いかけてターゲットのエンドポイントで再現するという方式を取ります。
このときにALTERが結構難点らしく、カラムの追加などの操作もMySQL本来のレプリケーションのようには完璧に再現してくれません。
非常に便利な機能ではあるのですがまだまだつけ入るスキがあるという、新卒のルーキーのような存在ということですね。
本日の結論
本日のまとめは簡単ですね。
RDSからSnowflakeへの同期をDMSでやりたいならデータの削除の用途でパーティションは使うな
結びの言葉
DMSは結構難易度の高い気難しいサービスなのは前職で運用していて重々承知していたのですが、今回のはまあまあ困りました。
サポートへの問い合わせなどで解決策を模索しているところですので、なにか良い方法をご存じの方は是非教えて下さい。
最後に一つ宣伝を。
私が所属する株式会社GENDAでは一緒に働く仲間をすごく真剣に求めています。
興味がありましたらぜひお気軽にお声おかけください。
本日はこのあたりで。
それじゃあ、バイバイ!
Discussion
DMSは直接snowflakeをサポートしてないので、ソーステーブルの同期という意味でのマイグレーションができないのが難点ですね。Snowflake 側にソーステーブルの履歴を作りたいなら問題ありませんが。
もしソーステーブルの最新の状態をSnowflake 側に同期させたい場合、Fivetran のようなETLサービス、もしくは自分で同期させるバッチを組むしかないですね。
コメントありがとうございます。
リアルタイム同期は常に悩ましいですよね。。。
ETLサービスを使うのもいいですが、データ基盤ってただでさえ金食い虫なのである程度のラインまでは自力でなんとかしたいという気持ちがあります。