この記事では、bq コマンドを使用して、特定の時点のテーブルを復元する方法を紹介しています。(※最大、過去 7 日間まで遡ることができます。)
間違えてテーブルを削除したり、データを追加・更新したりしたときに知っていると便利です。
目次
まとめ
# 方法1:エポックミリ秒を指定
$ bq cp DATESET.TABLE@EPOCH_MILLISECONDS DATESET.TABLE
# 方法2:現在時刻との相対オフセット(ミリ秒)を指定
$ bq cp DATESET.TABLE@-MILLISECONDS DATESET.TABLE
# 方法3:復元可能な最古の履歴データを指定
$ bq cp DATESET.TABLE@0 DATESET.TABLE
タイムトラベルとフェイルセーフによるデータの保持 | BigQuery | Google Cloud
タイムトラベルとフェイルセーフがテーブルの履歴データを保持する方法について説明します。また、行レベルのアクセス ポリシーが適用された場合にタイムトラベルを使用す…
解説
まず、bq コマンドを使用する前に、復元したいテーブルにアクセスできるアカウントとプロジェクトに切り替えておきましょう。
# アカウントの切り替え
$ gcloud auth login
# プロジェクトの切り替え
$ gcloud config set project PROJECT_ID
エポックミリ秒を指定
$ bq cp DATESET.TABLE@EPOCH_MILLISECONDS DATESET.TABLE
この記事を書いている日時が 2022 年 3 月 26 日 0 時 なので、例えば 1 日前の 2022 年 3 月 25 日 9 時 30 分 時点のテーブルを復元したいとすると、以下のようになります。
$ bq cp DATESET.TABLE@1647909000000 DATESET.TABLE
日時からエポックミリ秒に変換するときは以下の SQL を参考にしてみてください。
SELECT UNIX_MILLIS(TIMESTAMP("2022-03-22T09:30:00", "Asia/Tokyo"))
# 1647909000000
現在時刻との相対オフセットを指定
$ bq cp DATESET.TABLE@-MILLISECONDS DATESET.TABLE
現在時刻から 1 時間前のテーブルに復元したい場合は、相対オフセットを使用してミリ秒単位で指定します。
$ bq cp DATESET.TABLE@-3600000 DATESET.TABLE
時間 | ミリ秒 |
---|---|
10 分前 | 600000 |
1 時間前 | 3600000 |
1 日前 | 86400000 |
復元可能な最古の履歴データを指定
$ bq cp DATESET.TABLE@0 DATESET.TABLE
コメント