刷新雪花数据库

时间:2019-10-07 16:24:54

标签: database refresh snowflake-data-warehouse

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

3 个答案:

答案 0 :(得分:1)

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

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

{{1}}命令可以随时重复以赶上生产速度。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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);