如何使用特定的交易ID编写代码以进行时间旅行

时间:2019-10-28 17:47:23

标签: snowflake-data-warehouse

我想在雪花上使用时间旅行功能并恢复原始表。

我已使用以下命令删除并创建了表:

DROP TABLE "SOCIAL_LIVE"
CREATE  TABLE "SOCIAL_LIVE" (...)

在删除表格之前,我想回到原始表格。

我使用了以下代码(将交易ID隐藏到“ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”)

Select "BW"."PUBLIC"."SOCIAL_LIVE".* From "BW"."PUBLIC"."SOCIAL_LIVE";
select * from SOCIAL_LIVE before(statement => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');

收到一条错误消息:

Statement xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cannot be used to specify time for time travel query.

我们如何回到原始表并将其还原到雪花上?

4 个答案:

答案 0 :(得分:2)

文档指出:

  

删除表格后,创建具有相同名称的表格会创建一个   表格的新版本。上表的删除版本   仍然可以使用以下方法还原:

     
      
  1. 将表的当前版本重命名为其他名称。

  2.   
  3. 使用UNDROP TABLE命令还原以前的版本。

  4.   

如果您需要更多信息,此页面将非常有用:

https://docs.snowflake.net/manuals/sql-reference/sql/drop-table.html#usage-notes

不过,您将需要删除表才能访问该数据。时间旅行不是仅靠名称来维护。因此,一旦您删除并重新创建了表格,新表格就会拥有自己的新时间旅行。

答案 1 :(得分:0)

声明xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx不能用于指定时间旅行查询的时间。

通常,当我们尝试落后于对象创建时间时,就会遇到错误。尝试将时间旅行选项与偏移选项一起使用。

非常感谢, 斯里加

答案 2 :(得分:0)

一旦您删除表并重新创建具有相同名称的表,您将必须

1。首先将新表名称更改为其他名称

ALTER TABLE t1 RENAME TO t1_Backup;
  1. 然后使用undrop命令重新删除已删除的表

    删除表t1;

Using undrop in Snowflake

答案 3 :(得分:0)

看起来有3个常见的原因可以看到错误,并提供了解决方案:

  1. 该表已删除并重新创建
  2. 已超过旅行时间
    • 没有解决方案:在表格的时间范围内定位语句
  3. 定位了错误的语句类型
    • 仅某些语句类型可以作为目标。当前,它们包括SELECTBEGINCOMMIT和DML(INSERTUPDATE等)。 See documentation here