刷新雪花数据库

问题描述 投票:0回答:3

我们有2个雪花环境(非prod和prod)。有没有一种方法可以将Prod数据库刷新到非prod环境和/或考虑使此过程自动化。

database refresh snowflake
3个回答
1
投票

我假设您是想将产品环境在某个时间点复制到测试环境,以便可以在那里使用真实数据。

这很容易通过CLONE DATABASE命令完成,但是要求prod和test数据库位于同一帐户中。使用Snowflake,您应该将所有环境都保留在同一帐户中,但要使用不同的角色和可能的不同用户将它们分开。

CLONE DATABASE命令可以随时重复以赶上生产速度。


0
投票

按环境,您是指两个单独的帐户还是两个单独的数据库?

我不确定“ 刷新数据”的含义,但如果:

  1. 它的两个独立的数据库:您可以在非生产数据库中创建指向PROD数据库的视图,从而始终查看最新的数据集。
  2. 如果有两个独立的环境:可以使用SNOWFLAKE的共享功能,该功能有助于在独立帐户之间共享数据。

0
投票

我发现,使用复制授权克隆单个表使您可以在这些对象上复制授权,因此不需要重新应用角色权限。我使用存储过程从Prod-> Uat-> Dev等运行所有对象克隆。这对于数据有效,但是,如果要在较低的环境上进行架构更改,则这可能不是最佳解决方案。从源复制到目标(从产品复制到uat)。这是一些示例代码,请对其进行修改以适合您的需求。您可以根据需要添加任意多个表。只需在$$ javascript $$块中重复代码即可。

CREATE or REPLACE PROCEDURE public.clone_table_objects(SOURCE_DATABASE_NAME VARCHAR,DESTINATION_DATABASE_NAME VARCHAR)
  RETURNS VARCHAR
  LANGUAGE javascript
  EXECUTE AS CALLER
  AS
  $$  
  table1 = snowflake.execute( { sqlText: 
      "CREATE OR REPLACE TABLE  " + DESTINATION_DATABASE_NAME + ".schema1.table1  COPY GRANTS CLONE "+ SOURCE_DATABASE_NAME + ".schema1.table1;"
       } );
  table2 = snowflake.execute( { sqlText: 
      "CREATE OR REPLACE TABLE  " + DESTINATION_DATABASE_NAME + ".schema1.table2    COPY GRANTS CLONE "+ SOURCE_DATABASE_NAME + ".schema1.table2;"
       } );
  $$;

执行该过程。拨打电话public.clone_table_objects('prod_db':: VARCHAR,'uat_db':: VARCHAR);

© www.soinside.com 2019 - 2024. All rights reserved.