我无意中删除了我的一个BigQuery表。能把它拿回来吗?API似乎不支持取消删除。
发布于 2014-12-17 17:19:18
可以通过表复制和快照装饰器取消BigQuery中的删除。也就是说,可以在删除表之前复制表的快照。
BigQuery过去对取消删除有限制,但是随着时间的推移,这些限制已经被删除了。
下面是一个使用bq
的示例,但是您可以使用BigQuery Web做同样的事情。
首先,让我们创建一个虚拟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
。让我们将其复制回旧位置,然后删除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 |
+----+
发布于 2019-06-05 17:23:54
正如在其他答案中所表示的那样,"undelete“在CREATE OR REPLACE table
之后将无法工作。
如果需要取消删除已替换的表,请使用更新以下问题
但是,这是如何使用#standardSQL实现表的早期版本的:
SELECT *
FROM `project.dataset.table`
FOR SYSTEM TIME AS OF '2019-06-05 18:10:00'
发布于 2019-07-03 02:37:18
1小时前你的桌子怎么样(@-3600000次,以毫秒计):
bq cp my_project:old_dataset.old_table_name@-3600000 my_project:new_dataset.new_table_name
https://stackoverflow.com/questions/27537720
复制