我不小心删除了其中一个BigQuery表。有可能找回来吗?该API似乎不支持取消删除。
通过表格复制和快照装饰器可以在BigQuery中取消删除。也就是说,您可以从删除表之前复制该表的快照。
BigQuery过去对取消删除有限制,但是随着时间的流逝,这些限制已被删除。
这是使用的示例bq
,但是您可以使用BigQuery Web UI进行相同的操作。
首先让我们创建一个虚拟的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 |
+----+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句