BigQueryのフェイルセーフ期間が一般提供(GA)になりました
はじめに
こんにちは、クラウドエース データML ディビジョン所属の篠田です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。
データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。
概要
今回紹介するリリースは、BigQuery のフェイルセーフ期間が一般提供(GA)になったことについてです。
今回のGAに伴い、フェイルセーフ用のストレージ使用量を確認することができるようになりました。
使用量を確認できるようになった背景として、2023/7/5にBigQuery のストレージ料金体系に変更があり、従来の論理ストレージタイプに加え、物理ストレージタイプが登場しました。
そして、物理ストレージタイプを選択した場合、フェイルセーフ用のストレージ使用量に対しても課金されるようになりました。
ユーザーが料金を見積もる時の為に、ストレージ使用量を確認できるようになったと推測します。
本記事では、フェイルセーフに加えて、新ストレージ料金体系とどのように絡むのかについて見ていきます。
タイムトラベルとは
BigQuery で変更または削除されたデータは、回復する必要がある場合に備えて、まずタイムトラベル用のデータとしてストレージに保持されます。
その為、タイムトラベルについて、はじめに紹介します。
タイムトラベルとは、過去7日間(デフォルト7日間)のタイムトラベル期間内であれば、どの時点のレコードにもアクセスできる機能です。(タイムトラベル期間は 2 ~ 7 日の範囲で設定できます。)
タイムトラベル用にストレージに保持されるデータを用いることで、ユーザーは過去のレコードにアクセスできます。
アクセスはレコードレベルで可能な為、復元もレコードレベルで可能です。
アクセス方法ですが、クエリやbqコマンドラインツール でアクセスできます。
クエリでのアクセス例は下記です。
SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
タイムトラベル期間内の任意時点におけるテーブルの履歴データは、
FOR SYSTEM_TIME AS OF 句を使用してクエリできます。
上記クエリを実行すると、1時間前のテーブルの履歴バージョンが返されます。
フェイルセーフ期間とは
フェールセーフ期間とは、タイムトラベル期間の後に、さらに7日間設けられている期間です。
タイムトラベル用のデータが、フェイルセーフ用のデータとして扱われるようになり、自動的に7日間保持されます。
復元はテーブルレベルで可能です。
しかし、復元するには、Cloud Customer Care に問い合わせる必要があります。
新ストレージ料金体系について
新ストレージ料金体系では、データセットに対して、2つのストレージ課金モデルどちらかを選択することができます。
- 論理ストレージタイプ
- 物理ストレージタイプ
そして、物理ストレージタイプを選択した場合、タイムトラベル及びフェイルセーフ用のストレージ使用量に対してもストレージ費用が発生します。
(物理ストレージタイプの青色のエリアが論理ストレージタイプと比較して小さくなっているのは、物理ストレージタイプは物理バイトとしてデータが圧縮されている為です。)
タイムトラベル及びフェイルセーフのストレージ使用量の確認
INFORMATION_SCHEMA.TABLE_STORAGE ビューにクエリを実行することで、
テーブルまたはマテリアライズド・ビューごとのストレージ使用量を確認することができます。
(論理・物理どちらのストレージタイプを選択しているかは問わないです)
タイムトラベル及びフェイルセーフのストレージ使用量を確認するクエリ例は下記です。
1つのテーブルのストレージ使用量を確認しています。
SELECT
time_travel_physical_bytes, -- タイムトラベル物理バイト使用量
fail_safe_physical_bytes -- フェイルセーフ物理バイト使用量
FROM <project_id>.`region-asia-northeast1`.INFORMATION_SCHEMA.TABLE_STORAGE
WHERE table_name = "connection_reg_r3";
クエリ実行結果は下記です。
[{
"time_travel_physical_bytes": "13131",
"fail_safe_physical_bytes": "13141"
}]
1つのテーブルにおいて、
- タイムトラベル物理バイト使用量 13131 bytes
- フェイルセーフ物理バイト使用量 13141 bytes
といったストレージ使用量でした。
頻繁にテーブルのデータを変更または削除するような処理をしている場合に、これらの使用量は肥大化します。
まとめ
フェイルセーフ期間が、新ストレージ料金体系とどのように絡むのかについて紹介しました。
データセットにおいて物理ストレージタイプを選択すると、タイムトラベルやフェイルセーフ用のストレージ費用が発生します。
タイムトラベルやフェイルセーフ用のストレージ費用を節約するには、
タイムトラベル期間をデフォルトの7日間から短くすることで節約が可能です。
期間の変更方法はこちらの公式ドキュメントをご覧ください。
Discussion