2020/08/07TweetPocketBI(分析)基盤を運用していると必ず起こるのが、日々のレコード数上昇によりBigQueryへのシンクが遅くなってしまうということです。実際にRDS(MySQL)のレコード数はどのくらいあるのか調査してみたところ、1000万レコードもあるテーブルが複数存在しており、シンクも1時間半くらいかかっていました。なる前に差分更新により、前日のデータをシンクするように作れば高速になるので、今回対象のテーブルを改善するべく方法と注意点をまとめてみます。■構成Digdagのバッチで、EmbulkがRDS(MySQL)のテーブルをガツンとBigQueryにシンクしています。これを前日分のみをシンクするとなると以下のような流れになります。Embulkでhogeテーブルだとしましょう。このテーブルをBigQueryにtmpというデータセットを作り、その中で前日分のhogeテーブルをシンクします。BigQueryにはupdateの概念がないのでこのようなテクニックで実装することができます。実際にコードを見てみましょう。tmpに変更してあげましょう。transformを使って、下記のSQLを叩くように実際に格納するテーブルに行を追加するわけですね。allで前日差分と全データを結合しています。ちなみに私の場合だと、そのテーブルにidカラムがなく、user_idカラムで差分更新しようとしていたのでユーザーに対して、1レコードしか作られなくなる=レコード消えるということになりました。基本idカラムで抽出条件を作るように気をつけましょう。■まとめ差分更新により1時間半のシンクが3分になりました!激速っ!今後は500万レコードくらいになったら差分更新するよう改善していけば良さそうですね。ROBOTICS/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWS/Azureでのインフラ構築、Docker開発環境の提供、Kubernetes保守、インフラコード化、新技術の検証、リファクタリング、セキュリティ強化、エンジニア採用広報などを担当している。個人開発では「夫婦、パートナー向け家事管理サービス/famii」をCakePHPで開発中。副業では数社サーバー保守とベンチャー企業のインフラコンサルティングやMENTAで未経験者にインフラのコーチング/コミュニティの運用を実施している。「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。コメントデータの処理方法の詳細はこちらをご覧ください。