Database 刷新雪花数据库
我们有两个雪花环境(非prod和prod)。是否有办法将Prod数据库刷新到非Prod环境和/或研究此过程的自动化。按环境,您指的是两个单独的帐户或两个单独的数据库 我不确定“刷新数据”的含义,但如果:Database 刷新雪花数据库,database,refresh,snowflake-cloud-data-platform,Database,Refresh,Snowflake Cloud Data Platform,我们有两个雪花环境(非prod和prod)。是否有办法将Prod数据库刷新到非Prod环境和/或研究此过程的自动化。按环境,您指的是两个单独的帐户或两个单独的数据库 我不确定“刷新数据”的含义,但如果: 它的两个独立数据库:您可以在非prod数据库中创建指向prod数据库的视图,这样就可以始终查看最新的数据集 如果它有两个独立的环境:您可以使用雪花的共享功能,这有助于独立帐户之间的数据共享 我假设您的意思是在某个时间点将prod环境复制到测试环境中,以便可以在那里使用真实数据 使用CLONE D
我假设您的意思是在某个时间点将prod环境复制到测试环境中,以便可以在那里使用真实数据 使用
CLONE DATABASE
命令可以很容易地完成这一点,但要求prod和test数据库位于同一个帐户中。使用Snowflake,您应该将所有环境保持在同一个帐户中,但使用不同的角色和可能不同的用户将它们分开
CLONE DATABASE
命令可以在任何时候重复,以赶上生产进度。我发现,使用复制授权克隆单个表可以在这些对象上复制授权,因此无需重新应用角色权限。
我使用存储过程从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_对象('prod_db':VARCHAR,'uat_db':VARCHAR)