我们有2个雪花环境(非prod和prod)。有没有一种方法可以将Prod数据库刷新到非prod环境和/或考虑使此过程自动化。
答案 0 :(得分:1)
我假设您的意思是将产品环境在某个时间点复制到测试环境,以便在那里可以使用真实数据。
使用CLONE DATABASE
命令很容易做到这一点,但是要求prod和test数据库位于同一帐户内。使用Snowflake,您应该将所有环境都保留在同一帐户中,但要用不同的角色和可能的不同用户将它们分开。
{{1}}命令可以随时重复以赶上生产速度。
答案 1 :(得分:0)
按环境,您是指两个单独的帐户还是两个单独的数据库?
我不确定“ 刷新数据”的含义,但是如果:
答案 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);