在 Snowflake 中,虽然单个视图缺少 UNDROP 命令,但使用 UNDROP DATABASE 恢复已删除的数据库会恢复其包含的所有对象(包括视图),前提是恢复发生在数据保留期内。我们知道这是因为数据库和架构的 UNDROP 操作利用了 Snowflake 的时间旅行功能,该功能在删除后将这些对象的状态保留指定的持续时间。
但是为什么它可以取消删除数据库中的视图,却不能取消删除单个视图呢?
在 Snowflake 中,虽然单个视图缺少 UNDROP 命令,但使用 UNDROP DATABASE 恢复已删除的数据库会恢复其包含的所有对象(包括视图),前提是恢复发生在数据保留期内。我们知道这是因为数据库和架构的 UNDROP 操作利用了 Snowflake 的时间旅行功能,该功能在删除后将这些对象的状态保留指定的持续时间。
但是为什么它可以取消删除数据库中的视图,却不能取消删除单个视图呢?
应该对 DB 对象定义(视图、UDF、SP)进行版本控制以避免这种情况。
示例:在 Snowflake 中使用 Git 存储库
可以通过查询SNOWFLAKE.ACCOUNT_USAGE.VIEWS来恢复已删除的视图定义:
例子:
询问:
如文档中所述 ,已删除的视图无法恢复;必须重新创建它们。一旦删除,视图就无法恢复,因为视图更像是存储查询语句而不是存储数据。
此外,我们没有针对视图的取消删除功能。https
://docs.snowflake.com/en/sql-reference/sql/undrop#syntax
但是,您可以使用 query_history 视图来获取已删除视图的 SQL。https
://docs.snowflake.com/en/sql-reference/account-usage
https://docs.snowflake.com/en/sql-reference/info-schema#list-of-table-functions
您可以使用 QUERY_ID 或 QUERY_TEXT 作为过滤器来检索视图定义。