削除されたテーブルを復元する
このドキュメントでは、BigQuery で削除されたテーブルを復元(または削除を取り消し)する方法について説明します。削除されたテーブルは、データセットに指定されたタイムトラベル期間内であれば復元できます。これには、明示的な削除だけでなく、テーブルの有効期限の経過による暗黙的な削除も含まれます。タイムトラベル期間を構成することもできます。
削除したデータセットまたはスナップショット全体を復元する方法については、次のリソースをご覧ください。
タイムトラベル期間は、日数を 2~7 日に設定できます。タイムトラベル期間が経過すると、BigQuery はフェイルセーフ期間を開始します。この期間中、削除されたデータはさらに 7 日間自動的に保持されます。フェイルセーフ期間が経過した後、サポート チケットをオープンするなどの方法でテーブルを復元することはできません。
始める前に
削除されたテーブルを復元するために必要な Identity and Access Management(IAM)権限が付与されていることを確認します。
必要なロール
削除されたテーブルを復元するために必要な権限を取得するには、プロジェクトに対する BigQuery ユーザー(roles/bigquery.user)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
テーブルを復元する
過去のデータを新しいテーブルにコピーすることで、過去のデータからテーブルを復元できます。テーブルが削除されている場合や期限切れの場合でも、タイムトラベル期間内でテーブルを復元する限り、過去のデータをコピーできます。
過去のデータからテーブルを復元しても、ソーステーブルのタグは宛先テーブルにコピーされません。 テーブルのパーティショニング情報も宛先テーブルにコピーされません。元のテーブルのパーティショニング スキームを再作成するには、Cloud Logging で最初のテーブル作成リクエストを表示し、その情報を使用して復元されたテーブルをパーティショニングします。
削除されたテーブルは、タイムトラベル期間内であれば、@<time> 時間デコレータを使用してテーブルを新しいテーブルにコピーすることで復元できます。時間デコレータを使用しても、削除されたテーブルをクエリすることはできません。まずテーブルを復元する必要があります。
@<time> 時間デコレータで次の構文を使用します。
tableid@TIME。TIMEは Unix エポック時刻からの経過時間(ミリ秒単位)です。tableid@-TIME_OFFSET。TIME_OFFSETは、現在の時刻からの相対オフセット(ミリ秒単位)です。tableid@0。使用可能な過去のデータの中で最も古いものを指定します。
テーブルを復元するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールを使用してテーブルの削除を取り消すことはできません。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
テーブルを復元するには、まずテーブルが存在していたときの UNIX タイムスタンプ(ミリ秒単位)を特定します。Linux の
dateコマンドを使用して、通常のタイムスタンプ値から UNIX タイムスタンプを生成できます。date -d '2023-08-04 16:00:34.456789Z' +%s000
次に、
@<time>タイムトラベル デコレータを指定してbq copyコマンドを使用し、テーブルのコピー オペレーションを実行します。たとえば、
1418864998000の時点のmydataset.mytableテーブルを新しいテーブルmydataset.newtableにコピーするには、次のコマンドを入力します。bq cp mydataset.mytable@1418864998000 mydataset.newtable
(省略可)
--locationフラグを指定して、その値をロケーションに設定します。相対オフセットを指定することもできます。次の例は、1 時間前のテーブルのバージョンをコピーします。
bq cp mydataset.mytable@-3600000 mydataset.newtable
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
タイムトラベル期間によって許されている期間後にテーブルを復元することが想定される場合は、テーブルのスナップショットを作成します。 さらに詳しい内容については、テーブル スナップショットの概要をご覧ください。
論理ビューを直接復元することはできません。詳細については、ビューを復元するをご覧ください。
テーブルの復元のトラブルシューティング
過去のタイムスタンプを使用して、削除されたテーブルをクエリする
過去に削除されたテーブルのタイムスタンプ デコレータを使用したクエリ、または FOR SYSTEM_TIME AS OF を使用した宛先テーブルへの結果の保存による、テーブルデータの復元はできません。これらの方法を使用すると、次のエラーが生じます。
Not found: Table myproject:mydataset.table was not found in location LOCATION
テーブルをコピーするには、テーブルを復元するの手順に沿って操作してください。
エラー: VPC Service Controls: Request is prohibited by organization's policy
Google Cloud Shell からコピーのコマンドを実行しようとすると、次のようなエラーが発生することがあります。
BigQuery error in cp operation: VPC Service Controls: Request is prohibited by organization's policy
VPC Service Controls(SC)で Google Cloud コンソールから Cloud Shell を使用することはサポートされていません。これは、サービス境界外のリクエストとして扱われ、VPC SC が保護するデータへのアクセスが拒否されるためです。この問題を回避するには、Google Cloud CLI を使用して Cloud Shell を起動し、ローカルに接続します。
エラー: Latest categories are incompatible with schema
Google Cloud Shell からコピーのコマンドを実行すると、次のようなエラーが表示されることがあります。
Latest categories are incompatible with schema at TIMESTAMP
このエラーには、次のような原因が考えられます。
- 宛先テーブルのスキーマが元のテーブルのスキーマと異なる(列レベルのポリシータグがアタッチされていない限り、余分な列が許可されます)。
- 宛先テーブルの列レベルのポリシータグの構成が、ソーステーブルとは異なっている。
このエラーを解決する方法は以下のとおりです。
- 宛先テーブルのスキーマを必ず同一にします。また、元のテーブルの列が宛先テーブルから欠落していないことを確認します。
- 元のテーブルのスキーマにない列レベルのポリシータグを、宛先テーブルから削除します。
エラー: BigQuery error in cp operation: Invalid time travel timestamp
Google Cloud Shell から bq copy コマンドを実行すると、次のようなエラーが表示されることがあります。
BigQuery error in cp operation: Invalid time travel timestamp 1744343690000 for table PROJECT_ID:DATASET_ID.TABLE_ID@1744343690000. Cannot read before 1744843691075
このエラーは、タイムトラベル期間の前かテーブルの作成時刻より前のテーブルの状態からデータを復元しようとしていることを示します。これはサポートされていません。エラー メッセージには、テーブルデータの読み取りに使用できる最新のタイムスタンプが含まれています。bq copy コマンドでエラーのタイムスタンプを使用します。
このエラーは、負のタイムスタンプ値(TABLE@-1744963620000 など)を指定した場合にも発生します。- 符号と一緒に使用できる時間オフセットを使用してください。
BigQuery error in cp operation: Invalid time travel timestamp 584878816 for table PROJECT_ID:DATASET_ID.TABLE_ID@584878816. Cannot read before 1744843691075
このエラー メッセージは、bq cp コマンドにオフセットとして負のタイムスタンプ値が含まれており、CURRENT_TIMESTAMP - PROVIDED TIMESTAMP でテーブルを読み取ろうとしたことを示しています。この値は通常、1970 年のタイムスタンプです。この問題を回避するには、テーブル デコレータの値を設定するときにオフセット値またはタイムスタンプ値を確認し、- 符号を適切に使用します。
次のステップ
- テーブルを作成して使用する方法を学習する。
- テーブルを管理する方法を学習する。
- テーブル スキーマを変更する方法を学習する。
- テーブルデータの操作について学習する。