BigQueryで削除してしまったテーブル・データセットは復元できる!

2022年12月8日掲載

キービジュアル

こんにちは。ご覧いただきありがとうございます。

この記事は、ソフトバンク Advent Calendar 2022 の 8日目の記事になります。

今回は BigQuery のデータを削除してしまった時の復元方法を紹介します。

目次

0.はじめに

誤って BigQuery のテーブルやデータセットを消してしまった、、、!という方も安心してください。BigQuery はデフォルトで削除から7日間以内であればデータを復元することができます

以下、公式ドキュメントからの引用です。

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

本記事ではこのタイムトラベル期間を利用した BigQuery データの復元方法を実行時の注意点とあわせて紹介します。

1.前提

<必要な権限>

・BigQuery 管理者(roles/bigquery.admin)

 復元を行う前に、実行するユーザに必要な権限が付与されているか確認してください。

<削除・復元するデータセットとテーブル>

・データセット

  test_dataset ※リージョンは asia-northeast1

・テーブル

  test_table01
  test_table02

データセットとテーブルの詳細については以下の画像をご参照ください。

▽ データセット:test_dataset

▽ テーブル:test_table01_詳細

▽ テーブル:test_table01_プレビュー

▽ テーブル:test_table02_プレビュー

2.削除したデータセット・テーブルの復元方法

今回は、復元を行うために前提で示したデータセットおよびテーブルを手動で削除します。

▽ test_dataset、test_table01、test_table02 削除後

リソース一覧にデータセットとテーブルが表示されなくなり、削除されたことが分かります。

ここからが本題の復元手順です。削除された test_dataset、test_teble_01、test_teble_02 を復元していきます。

 

手順①:データセットやテーブルが存在していた削除前の時間を取得する

SQL で該当時間を取得することが出来ます。下記に記載しているクエリを参考に適宜数値を変更して SQL を実行してください。

今回は、エポックからのミリ秒の形式を使用しますが、 bqコマンドを実行する際に現在の時刻からの相対オフセット(ミリ秒単位)を利用して削除前の時間を指定することも可能です。

現在の時刻からの相対オフセットについては、手順③の bq コマンド実行時に参考として記載していますのでご参照ください。

 

例)1時間前の時間を取得

■ 時間取得に関する参考クエリ ■

・15 分前の時点を取得

SELECT UNIX_MILLIS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 15 MINUTE))

・1 時間前の時点を取得

SELECT UNIX_MILLIS(TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR))

・絶対時間の値を取得

SELECT UNIX_MILLIS('2022-12-05 12:23:34.456789Z')

手順②:データセットを新しく作成する ※テーブルのみ削除の場合は省略

Cloud Shell を開き、下記コマンドを実行します。

<実行するコマンド>

bq --location=asia-northeast1 mk test_dataset

注)test_dataset:削除したデータセットと同じリージョン・名前にする

 

私はここで同じデータセット名にしておらず、つまづきました、、、(涙)

 

手順③:取得した時間に存在していたテーブルを新しいデータセットにコピーする

下記コマンドを実行して該当テーブルをコピーします。

@の後ろに手順①で取得した時間を入力することでタイムトラベル機能を使うことが出来ます。

 

<実行するコマンド>

bq cp test_dataset.test_table01@1670201415117 test_dataset.new_test_table01

注)test_table01:削除したテーブル名を入力
  1670201415117:手順①で取得した値を入力
  new_test_table01:新しく作成するテーブル名を入力 
※削除したテーブルと同じ名前でもOK

コマンド実行後、Current status が「DONE」となれば成功です。



■ 参考:現在時刻からの相対オフセットを利用する場合 ■

今回のように1時間前の時間を指定する場合、現在時刻からの相対オフセットは「-3600000」となります。

したがって、上記の実行コマンドを現在時刻からの相対オフセットを利用したコマンドに直すと下記のようになります。

<相対オフセットを利用したコマンド>

bq cp test_dataset.test_table01@-3600000 test_dataset.new_test_table01

データセットに複数のテーブルが存在していた場合、テーブル名を適宜変更して手順③を繰り返し実行してください。

 

例)削除したテーブルと同じ名前で test_table02 を作成

<実行するコマンド>

bq cp test_dataset.test_table02@1670201415117 test_dataset.test_table02

以上が削除したデータセットとテーブルの復元方法となります。

 

全ての手順を実行すると、データセットおよびその配下にあったテーブルが全て元通りになりました!!
もちろんテーブルの中身も以前のデータと同じものです。

▽ データセット:test_dataset 

▽ テーブル:new_test_table01

▽ テーブル:test_table02

3.まとめ

BigQuery のデータを削除してしまった時の復元方法をご紹介しました。

注意点をまとめて終わりにしたいと思います。

 

1.復元可能なデータは削除から7日以内のものである

2.復元を実行するユーザに必要な権限を付与する

3.データセットごと削除した場合、新しく作成するデータセット名は削除したデータセットと同じ名前にする

 

本記事が少しでもみなさまの役に立つことができれば幸いです。

最後までお読みいただきありがとうございました。

では、ソフトバンク Advent Calendar 2022の9日目 小柳さんにバトンをお渡しします。

関連サービス

Google Cloud

Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。

おすすめの記事

条件に該当するページがございません