Cost optimization best practices for BigQuery
↑の記事が参考になったので簡単に要約しました。
詳細は元記事を読んでください。
コスト最適化(ストレージ編)
1. 必要なデータだけ残しとく
適切にexpirationを設定する。
datasetのexpirationを変えても既存のテーブルには反映されないから気をつける。
2. データの編集には注意する
90日間テーブルを編集しなければ、自動的に long-term storageに移行されて、storage金額は50%になる。streaming, copy, loadingとかすると、また active storage になって90日間は long-term storage にならないからそのあたりを考えて運用する。
1年に一回以上編集しないならば、BigQeuryのデータをGCSの Coldline class のGCSに移したほうがいい。
3. データの重複コピーは避ける
federated data access model 機能があるから、BigTableとか、GCSとか、CloudSQLのデータをBQにコピーするのは避ける。
4. Streaming Insertを使ってないかチェックする
Streaming Insert 使ってたら、ほんとにこの処理はリアルタイムである必要があるのかを考える。
例えば1時間ごとのloadでもよければbatch loadingに切り替える。
5. バックアップとデータリカバリについて理解しておく
BQは7日間のテーブル変更履歴を持つ。つまり、リカバリーバックアップなしにリバートできる。テーブルが消えても、履歴が消えるのはその2日後。
コスト最適化(クエリ編)
1. 必要なクエリだけ投げる
カラムナーテーブルだから必要なカラムだけ宣言する。 *
とか使わない。
2. 事故的なニューマンエラー用の設定しておく
3. キャッシュを賢く使う
デフォルトでキャッシュ設定はONになってて24時間有効
4. テーブルを分割する
5. クラスタリングでさらに節約
パーティションあと、最大4カラム指定してクラスタリングできる
flat-rate vs on-demand
月の請求が$10,000(約100万円)を超えたら、flat-rateに移行することを考えよう。
一定slotを購入し、あとは料金を気にせず好きなだけqueryを実行できる。