BigQueryテーブルの1つを誤って削除してしまいました。取り戻すことはできますか? APIはundeleteをサポートしていないようです。
BigQueryでの削除の取り消しは、テーブルコピーとスナップショットデコレータを介して可能です。つまり、テーブルが削除される前のテーブルのスナップショットをコピーできます。
注意点がいくつかあります。
これはbq
を使用した例ですが、BigQuery WebUIでも同じことができます。
まず、削除するダミーのbigqueryデータセットとテーブルを作成しましょう。
$ bq mk -d dataset1
Dataset 'helixdata2:dataset1' successfully created.
$ bq query --destination_table=dataset1.table1 "SELECT 17 as a"
Waiting on bqjob_ra0dedbee5cb4228_0000014a5af133d6_1 ... (0s)
Current status: DONE
+----+
| a |
+----+
| 17 |
+----+
ここで、テーブルが有効だった時点から現在のUNIXタイムスタンプを取得します。
$ date +%s
1418864998
この時間は秒単位であることに注意してください。ミリ秒が必要です。
'誤って'テーブルを削除する
$ bq rm dataset1.table1
rm: remove table 'helixdata2:dataset1.table1'? (y/N) y
これで、スナップショットをコピーしてテーブルの削除を取り消すことができます。
$ bq cp dataset1.table1@1418864998000 dataset1.temp
Waiting on bqjob_r4d8174e2e41ae73_0000014a5af2a028_1 ... (0s)
Current status: DONE
Tables 'helixdata2:dataset1.table1@1418864998000' successfully copied to
'helixdata2:dataset1.temp'
(ミリ秒が必要なため、時間を1000倍したことに注意してください)これにより、テーブルの古いスナップショットがdataset1.temp
にコピーされました。それを元の場所にコピーして、一時テーブルを削除してみましょう。
$ bq cp dataset1.temp dataset1.table1
Waiting on bqjob_r3c0bb9302fb81d59_0000014a5af2dc7b_1 ... (0s)
Current status: DONE
Tables 'helixdata2:dataset1.temp' successfully copied to
'helixdata2:dataset1.table1'
$ bq rm dataset1.temp
rm: remove table 'helixdata2:dataset1.temp'? (y/N) y
次に、テーブルが復元されたことを確認しましょう。
$ bq query "select * from dataset1.table1"
Waiting on bqjob_r5967bea49ed9e97f_0000014a5af34dec_1 ... (0s)
Current status: DONE
+----+
| a |
+----+
| 17 |
+----+
他の回答で述べられているように、「[削除]」はCREATE OR REPLACE table
の後には機能しません。
置き換えられたテーブルの削除を取り消す必要がある場合は、 次の問題に賛成 :
ただし、これは、#standardSQLのみを使用して以前のバージョンのテーブルにアクセスする方法です。
SELECT *
FROM `project.dataset.table`
FOR SYSTEM TIME AS OF '2019-06-05 18:10:00'
1時間前のテーブルの状態の回復(ミリ秒単位の@ -3600000時間):
bq cp my_project:old_dataset.old_table_name@-3600000 my_project:new_dataset.new_table_name
BigQuery CLIを使用して、古いテーブル名、エポック時間の目的の日付、および新しいテーブル名を指定できます。
<project>:<dataset>.<table>@<DESIRED_Epoch_TIME> <project>:<dataset>.<table>
例えば:
bq cp my_project.old_dataset.old_table_name@1551880188000 my_project.new_dataset.new_table_name
2019年3月9日(Epoch:1551880188000)にあったコンテンツを新しいテーブルにコピーします