コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

タイムトラベルを使用した履歴データへのアクセス

BigQuery では、タイムトラベルを使用して、BigQuery で変更または削除されたデータにアクセスできます。デフォルトでは、過去 7 日間のタイムトラベル期間内であれば、どの時点のデータにもアクセスできます。タイムトラベルを使用すると、更新されたデータや削除されたデータのクエリを実行すること、削除されたテーブルや期限切れのテーブルを復元することができます。

ストレージの課金モデルプレビュー版)で物理バイトを使用するように設定すると、課金される合計ストレージ費用にはタイムトラベル ストレージに使用するバイトが含まれます。ストレージ費用とデータ保持のニーズのバランスを取るようにタイムトラベル期間を構成できます。

制限事項

  • タイムトラベルは、タイムトラベル期間中の履歴データにのみアクセスできます。テーブルデータをタイムトラベル期間より長く保持するには、テーブル スナップショットを使用します。

  • テーブルに行レベルでアクセス ポリシーが設定されている(または、すでに設定されていた)場合は、テーブル管理者のみがタイムトラベルを使用できます。詳細については、タイムトラベルと行レベルのアクセスをご覧ください。

特定の時点のデータをクエリで取得する

タイムトラベル期間内で、任意の時点におけるテーブルの履歴データは、FOR SYSTEM_TIME AS OF 句を使用してクエリできます。この句は、タイムスタンプの定数式を受け取り、そのタイムスタンプの時点で最新であったテーブルのバージョンを参照します。テーブルは BigQuery に保存されている必要があります。外部テーブルは使用できません。SYSTEM_TIME AS OF を使用する場合、テーブルサイズに上限はありません。

たとえば、次のクエリを実行すると、1 時間前のテーブルの履歴バージョンが返されます。

SELECT *
FROM `mydataset.mytable`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

タイムスタンプが、タイムトラベル期間の前かテーブルの作成時刻より前の場合、クエリは失敗し、次のようなエラーが返されます。

Invalid snapshot time 1601168925462 for table
myproject:mydataset.table1@1601168925462. Cannot read before 1601573410026.

CREATE OR REPLACE TABLE ステートメントを使用して既存のテーブルを置き換える場合は、FOR SYSTEM_TIME AS OF を使用してテーブルの以前のバージョンをクエリで取得できます。

テーブルが削除されている場合、クエリは失敗し、次のようなエラーが返されます。

Not found: Table myproject:mydataset.table was not found in location US

ただし、このドキュメントの説明に従って、ある時点から新しいテーブルにコピーすることでテーブルを復元できます。

特定の時点のテーブルを復元する

履歴データをテーブルにコピーすることで、履歴データからテーブルを復元できます。テーブルが削除されている場合や期限切れの場合でも、タイムトラベル期間内にテーブルを復元する限り、データをコピーできます。

テーブルから履歴データをコピーするには、次の構文を使用して、テーブル名にデコレータを追加します。

  • tableid@TIMETIME は Unix エポック時刻からの経過時間(ミリ秒単位)です。
  • tableid@-TIME_OFFSETTIME_OFFSET は、現在の時刻からの相対オフセット(ミリ秒単位)です。
  • tableid@0: 使用可能な履歴データの中で最も古いものを指定します。

たとえば、次の bq コマンドライン ツールのコマンドは、1 時間前の table1 という名前のテーブルを table1_restored という名前のテーブルにコピーします。時間 -3600000 は、相対オフセットを使用してミリ秒単位で指定します。

bq cp mydataset.table1@-3600000 mydataset.table1_restored

次の bq コマンドライン ツールコマンドは、table1 という名前のテーブルを table1_restored という名前のテーブルにコピーします。時間 1624046611000 は、Unix エポック時刻からの経過時間をミリ秒単位で指定します。

bq cp mydataset.table1@1624046611000 mydataset.table1_restored

詳細については、削除されたテーブルの復元をご覧ください。

タイムトラベル期間を構成する

タイムトラベルの時間枠は 2 ~ 7 日の範囲で設定できます。デフォルトは 7 日間です。タイムトラベルの時間枠はデータセット レベルで設定し、データセット内のすべてのテーブルに適用されます。

タイムトラベル期間は、データを復元できる余地が重要な場合は長めに構成し、それほど重要でない場合は短く構成します。タイムとレベル期間を短くすると、ストレージ コストを節約できます。また、特定の期間にデータを復元できない形で削除することを求めるデータ保持ポリシーも遵守できます。

タイムトラベル期間がテーブルの復元に与える影響

削除されたテーブルは、テーブルの削除時に有効であったタイムトラベル期間に永続的に関連付けられます。

たとえば、タイムトラベル期間を 2 日間から 7 日間に延長した場合、変更前に削除されたテーブルは 2 日間しか復元できません。

同様に、タイムトラベル期間が 5 日間で、その時間を 3 日に短縮した場合、変更前に削除されたテーブルは 5 日間復元できます。

タイムトラベル期間を短縮し、テーブルを削除した後、そのデータに対してより長い復旧可能期間が必要であることに気付いた場合、テーブルを削除する前の時点から、そのテーブルのスナップショットを作成することができます。 削除を成功させるには、削除したテーブルを復元できる状態にする必要があります。詳細については、タイムトラベルを使用してテーブル スナップショットを作成するをご覧ください。

タイムトラベル期間を指定する

データセットのタイムトラベル期間は、Google Cloud Console、bq コマンドライン ツール、BigQuery API を使用して指定できます。

新しいデータセットにタイムトラベル期間を指定する方法については、データセットの作成をご覧ください。

既存データセットのタイムトラベル期間を更新する方法については、タイムトラベル期間の更新をご覧ください。

タイムトラベルと行レベルのアクセス

テーブルに行レベルのアクセス ポリシーがあるか、すでに設定されている場合は、テーブル管理者のみがテーブルの過去のデータにアクセスできます。

次の Identity and Access Management(IAM)権限が必要です。

権限 リソース
bigquery.rowAccessPolicies.overrideTimeTravelRestrictions アクセスする過去のデータのテーブル

次の BigQuery ロールには、必要な権限が含まれています。

役割 リソース
roles/bigquery.admin アクセスする過去のデータのテーブル

bigquery.rowAccessPolicies.overrideTimeTravelRestrictions 権限を、カスタムロールには追加できません。

次のステップ