🎃

BigQueryのフェイルセーフ期間が一般提供(GA)になりました

2023/08/01に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の篠田です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。

データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

概要

今回紹介するリリースは、BigQuery のフェイルセーフ期間が一般提供(GA)になったことについてです。
今回のGAに伴い、フェイルセーフ用のストレージ使用量を確認することができるようになりました。

使用量を確認できるようになった背景として、2023/7/5にBigQuery のストレージ料金体系に変更があり、従来の論理ストレージタイプに加え、物理ストレージタイプが登場しました。
そして、物理ストレージタイプを選択した場合、フェイルセーフ用のストレージ使用量に対しても課金されるようになりました。
ユーザーが料金を見積もる時の為に、ストレージ使用量を確認できるようになったと推測します。

本記事では、フェイルセーフに加えて、新ストレージ料金体系とどのように絡むのかについて見ていきます。

タイムトラベルとは

BigQuery で変更または削除されたデータは、回復する必要がある場合に備えて、まずタイムトラベル用のデータとしてストレージに保持されます。
その為、タイムトラベルについて、はじめに紹介します。

タイムトラベルとは、過去7日間(デフォルト7日間)のタイムトラベル期間内であれば、どの時点のレコードにもアクセスできる機能です。(タイムトラベル期間は 2 ~ 7 日の範囲で設定できます。)

タイムトラベル用にストレージに保持されるデータを用いることで、ユーザーは過去のレコードにアクセスできます。
アクセスはレコードレベルで可能な為、復元もレコードレベルで可能です。

alt

アクセス方法ですが、クエリや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 に問い合わせる必要があります。

alt

新ストレージ料金体系について

新ストレージ料金体系では、データセットに対して、2つのストレージ課金モデルどちらかを選択することができます。

  • 論理ストレージタイプ
  • 物理ストレージタイプ

そして、物理ストレージタイプを選択した場合、タイムトラベル及びフェイルセーフ用のストレージ使用量に対してもストレージ費用が発生します。

(物理ストレージタイプの青色のエリアが論理ストレージタイプと比較して小さくなっているのは、物理ストレージタイプは物理バイトとしてデータが圧縮されている為です。)
alt

タイムトラベル及びフェイルセーフのストレージ使用量の確認

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日間から短くすることで節約が可能です。
期間の変更方法はこちらの公式ドキュメントをご覧ください。
https://cloud.google.com/bigquery/docs/updating-datasets?hl=ja#update_time_travel_windows

Discussion