Snowflake cloud data platform CREATE或REPLACE语句是否影响雪花中的时间旅行?

Snowflake cloud data platform CREATE或REPLACE语句是否影响雪花中的时间旅行?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,如果我在snowflake中创建一个表,然后使用create或REPLACE语句创建另一个具有相同名称的表,我将无法使用时间旅行访问第一个表的内容 例如,如果我运行此代码 CREATE TABLE "MY_DB"."MY_SCHEMA"."MY_TABLE" (COL1 VARCHAR, COL2 NUMBER); INSERT INTO "MY_DB"."MY_SCHEMA"."

如果我在snowflake中创建一个表,然后使用create或REPLACE语句创建另一个具有相同名称的表,我将无法使用时间旅行访问第一个表的内容

例如,如果我运行此代码

CREATE TABLE "MY_DB"."MY_SCHEMA"."MY_TABLE" (COL1 VARCHAR, COL2 NUMBER);   
INSERT INTO "MY_DB"."MY_SCHEMA"."MY_TABLE" VALUES ('A',1);
。。。然后在五分钟内运行这段代码

CREATE OR REPLACE TABLE "MY_DB"."MY_SCHEMA"."MY_TABLE" (COL1 VARCHAR, COL2 NUMBER);
INSERT INTO "MY_DB"."MY_SCHEMA"."MY_TABLE" VALUES ('B',2);
SELECT * FROM "MY_DB"."MY_SCHEMA"."MY_TABLE"
UNION
SELECT * FROM "MY_DB"."MY_SCHEMA"."MY_TABLE" AT (offset => -60*1)
查询只返回第二个表中的值。这是预期的行为吗?我试图用谷歌搜索这个,或者在雪花文档中找到澄清,但没有任何运气


谢谢你

是的-这是意料之中的事。通过运行CREATE或REPLACE,您已经删除了原始表,并将其替换为新表。在发布替换表之前,不会有时间旅行数据

如果希望从表中删除数据并保留数据以用于时间旅行,请改用
TRUNCATE table
语句


更新:请参阅@peterb-answer“使用还原旧表”


正如Mike所说,上一个表是用
CREATE AND REPLACE
删除的,因此时间旅行无法找到它

但是,您仍然可以通过重命名较新的表并取消删除前一个表来恢复数据:

创建表“测试行程”(COL1 VARCHAR,COL2编号);
插入“测试行程”值('A',1);
创建或替换表“测试行程”(COL1 VARCHAR,COL2编号);
插入“测试行程”值('B',2);
将表“test_travel”重命名为“test_travel2”;
UNDROP表格“测试行程”;
挑选*
从(偏移量=>-60*1)处的“测试行程”


您还可以使用模式级别的时间旅行将旧表恢复到运行“创建或替换表”之前的时间:

create schema "MY_DB"."MY_SCHEMA_RESTORED" clone "MY_DB"."MY_SCHEMA" AT (offset => -60*1)

我很高兴这有帮助!请记住投票和/或接受对你有用的答案哦,我喜欢这种方法,谢谢!还有
insert overwrite
--