Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Redshift から Snowflake に移行した話

Redshift から Snowflake に移行した話

Snowflake 社主催の社内勉強会で発表した内容です。

DragonTaro1031

November 26, 2021
Tweet

More Decks by DragonTaro1031

Other Decks in Programming

Transcript

  1. 今日お話する内容 1. AirTrack について 2. Redshift から Snowflake に移行を決意した理由 3.

    移行にあたって苦労した点 4. 移行後のパフォーマンス・コスト面について
  2. 今日お話する内容 1. AirTrack について 2. Redshift から Snowflake に移行を決意した理由 3.

    移行にあたって苦労した点 4. 移行後のパフォーマンス・コスト面について
  3. AirTrack での DWH の使い方 保持しているデータ - 数万 qps のトラフィックのサンプリングされたログ -

    広告の配信実績 - 数千億行の位置情報データ 実行されているクエリ - 1日数千クエリ - 位置情報データをフルスキャンするような高負荷な処理も - ↑のような処理がビジネス起因で不定期に実行される
  4. 今日お話する内容 1. AirTrack について 2. Redshift から Snowflake に移行を決意した理由 3.

    移行にあたって苦労した点 4. 移行後のパフォーマンス・コスト面について
  5. Redshift のコスト最適化が難しかった - ds2 ファミリーを使用 - RI を1年で購入していた - データ量が多い(常にストレージ90%ぐらい)

    - たまに激重クエリが走るから耐えうるスペック - つまり不均一なワークロードに最適化するのが難しかった - これによりコストがかかってしまう - ra3 ファミリーでも課題感はあまり変わらない - RI を3年で購入すればかなりお得だが覚悟が持てなかった
  6. Redshift のコスト最適化が難しかった - ds2 ファミリーを使用 - RI を1年で購入していた - データ量が多い(常にストレージ90%ぐらい)

    - たまに激重クエリが走るから耐えうるスペック - つまり不均一なワークロードに最適化するのが難しかった - これによりコストがかかってしまう - ra3 ファミリーでも課題感はあまり変わらない - RI を3年で購入すればかなりお得だが覚悟が持てなかった 低コストでスケーリングできたらそれだけで解決するなぁ
  7. リソースが足りず外部リソースを使っていた - 定常的に走る比較的重めな集計処理を EMR に切り出していた - ただの join 程度の集計に EMR

    を使うのはコスパが悪かった - 金銭的なコスト - 保守・運用コスト 低コストでスケーリングできたらそれだけで解決するなぁ
  8. 無駄な EMR を廃止できるのか - DWH でできることは DWH に集約したかった - クラスタの管理

    - 学習コスト(運用できる人が抜けた) - スケールアウトが容易なのでなんら問題なかった
  9. 他の DWH の検討 - Big Query - データ転送量がかかる - Big

    Query Omni - AWS 上で Big Query を使えるサービス - 検討当時は利用できなかった - 2021/10 公開
  10. 今日お話する内容 1. AirTrack について 2. Redshift から Snowflake に移行を決意した理由 3.

    移行にあたって苦労した点 4. 移行後のパフォーマンス・コスト面について
  11. ほとんど保守されていない Java のバッチ
 - 組織のメンバーが入れ替わったタイミングでの移行だった
 - ちょっと触ったことのあるメンバーが3人だけ。。
 - 大量の temp

    table と unload 祭り。。
 - 一時データは削除されるので削除しないようにするところから
 - 謎の union all(csv のヘッダー付与してるだけ)
 - 条件分岐を含めて動的に生成される100行ぐらいのクエリ
 

  12. 恐怖の Java バッチとの戦い - とはいえ移行するしかない - 慣れない Java を読み解くところからスタート -

    Redshift 経由の処理と Snowflake 経由の処理を同時に実行 - 成果物を逐一蓄積するようにして比較 - Redshift の処理を消して Snowflake の処理で本番書き込み - ORM がぱっと動かなくて JDBC 直書き - 新たな負債を生み出したかも。。
  13. 今日お話する内容 1. AirTrack について 2. Redshift から Snowflake に移行を決意した理由 3.

    移行にあたって苦労した点 4. 移行後のパフォーマンス・コスト面について
  14. 1. 遅いクエリのチューニング - Redshift に比べて圧倒的にパフォーマンスが悪いクエリ - ただの join だったはずがパフォーマンスが悪かった -

    Double(浮動小数点)⇔ Number(固定小数点)の join が原因 - Double を Number にキャストすると約 1000 倍早くなったw
  15. 2. クラスタリングキー - 位置情報の検索が遅かった - 丸めた緯度経度にクラスタリングキーの付与をおすすめされた - あまりのデータ量に再クラスタリング(alter table)で 💸

    - insert into target select * from origin; で全部入れ直す方が安い - 問題箇所は圧倒的にクエリが早くなった - ただ致命的に他のクエリが遅くなった - もっと入念に相談すべきだった。。
  16. 3. Snowflake 関係なく window 関数で苦労した話 - 毎回結果が変わるクエリを生み出してしまった - 原因 -

    毎回レコードの順序が変わる with 句 - レコードの順序に依存する不完全な lead 関数 - 詳しくは ADC と Snowflake のアドベントカレンダーで - 結果として Snowflake が悪くない部分の調査をさせてしまう形に - ちなみに解決までほぼ1営業日