Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DMS を使って MySQL のデータを Snowflake に同期する
Search
DragonTaro1031
December 10, 2021
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DMS を使って MySQL のデータを Snowflake に同期する
社内の勉強会で話した内容です。
DragonTaro1031
December 10, 2021
More Decks by DragonTaro1031
See All by DragonTaro1031
大規模データを扱うクラウドセキュリティプラットフォームのアーキテクチャ変遷
dragontaro
1
9.3k
CDK で未対応のパラメータを付与する方法
dragontaro
0
240
CloudbaseでのAWS CDKとAWS Step Functionsを用いたバッチ処理基盤の爆速構築
dragontaro
0
600
Redshift から Snowflake に移行した話
dragontaro
2
2.2k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Between Models and Reality
mayunak
4
460
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
The Spectacular Lies of Maps
axbom
PRO
1
1k
The Language of Interfaces
destraynor
162
27k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Scaling GitHub
holman
464
140k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
DMS を使って MySQL のデータを Snowflake に同期する AI事業本部 AirTrack 宮川竜太朗
お話する内容 1. DMS とは 2. MySQL と Snowflake を同期するアーキテクチャ 3.
View で MySQL テーブルを復元する 4. DMS の課題点と改善ポイント
1. DMS とは
DMS とは - Database Migration Service - データベースの移行をや継続的なレプリケートに利用 - DB
→ DB のレプリケート - 外部 DB や RDS の binlog を整形して s3 に収集吐き出すことも - 専用のインスタンスを立ててタスクを実行
DMS の概要図
s3 への抽出のログフォーマット 以下のテーブルを例に紹介します。
- カラムの情報のみ - ヘッダーなし - /[table名]/LOADXXXX.csv csv の場合(初回ロード時)
- 同じくヘッダーなし - 処理の種類とその時のスナップショット - /[table名]/YYYY/MM/DD/xxx.csv - 先頭に処理の種類が付与 - I:
Insert - U: Update - D: Delete - Insert して Update すると左のように csv の場合(レプリケート時)
parquet の場合 - ターゲットエンドポイントを設定することで利用可 能 - csv 同様に - 初回ロード時は全テーブルデータのみ
- レプリケーション時は テーブルデータ + オペレーションタイプ - parquet なのでもちろんカラムのデータも ※ json で表示
2. MySQL と Snowflake を同期する アーキテクチャ
MySQL と Snowflake を同期するアーキテクチャ
3. View で MySQL テーブルを復元する
View で MySQL を再現する手順 1. DMS でタスクを定期実行する 2. ログテーブルを作成する 3.
初回データを Snowflake に一気に入れる 4. SnowPipe で s3 のログデータを継続的に取り込む 5. View でログデータの順序から現在の状態を再現する
DMS でタスクを定期実行する - レプリケーションインスタンス - 移行タスクを実行するための専用インスタンス - ソースエンドポイント - MySQL
- binlog_format を RAW にするなど制約あり - ターゲットエンドポイント - s3 - パスとファイルフォーマットの指定
MySQL と Snowflake を同期するアーキテクチャ
DMS でタスクを定期実行する - ソース・ターゲット・レプリケーションインスタンスを指定 - 対象テーブルのフィルター - 移行タイプの選択(既存の移行とレプリケートを今回は選択)
ログテーブルを作成する - View を構築するためのメタデータも必要 - 何のアクション(Insert or Update or ...)なのか
- 変更が加えられた順序をどう保証するのか - 順序を保証するためにログ作成時間とログファイルの行数を取る - DMS のファイル名 (metadata$file_name) から日付をパース - 行数は metadata$file_row_number
ログテーブルを作成する
初回データを Snowflake に一気に入れる - 初回ロード分に関しては I や U はつかない -
type: ‘L’ として取り込む
SnowPipe で継続的に取り込む - s3 に吐かれたログデータを Snowflake に取り込む - 初回ロード分を除く -
実行されたアクションの取り込み - メタデータの取り込み - ファイル作成日 - 行番号
SnowPipe で継続的に取り込む
生ログから View を構築する - それぞれのログがレコードのスナップショット - メタデータから最新の状態を判断して取り出す
以下のデータを想定 DMSタスク 作成
生ログから View を構築する
4. DMS の課題点と改善ポイント
DMS の課題点と改善ポイント - csv で s3 に吐かれるため変更に弱い - parquet を指定するオプションがあるが頭が回ってなかった
- 停止・再開の挙動がよくわからない - チェックポイントがあるがトランザクション中なら壊れるらしい - 毎回新しい DMS タスクとテーブルを作った方が安全では? - エラーが起きたときの対応方法が掴めていない - 今のところエラーなく動いてくれてるからいいけど。。
おまけ
ちなみに Firebase なら。。 - Firestore のデータをポチポチで BQ に同期してくれます!? - しかも
view も自動で構築してくれます!? - レコード自体は json で入れられるのでパースが面倒だが。。 - スキーマがないからそうするしかないよね