Database 刷新雪花数据库

Database 刷新雪花数据库,database,refresh,snowflake-cloud-data-platform,Database,Refresh,Snowflake Cloud Data Platform,我们有两个雪花环境(非prod和prod)。是否有办法将Prod数据库刷新到非Prod环境和/或研究此过程的自动化。按环境,您指的是两个单独的帐户或两个单独的数据库 我不确定“刷新数据”的含义,但如果: 它的两个独立数据库:您可以在非prod数据库中创建指向prod数据库的视图,这样就可以始终查看最新的数据集 如果它有两个独立的环境:您可以使用雪花的共享功能,这有助于独立帐户之间的数据共享 我假设您的意思是在某个时间点将prod环境复制到测试环境中,以便可以在那里使用真实数据 使用CLONE D

我们有两个雪花环境(非prod和prod)。是否有办法将Prod数据库刷新到非Prod环境和/或研究此过程的自动化。

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

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

  • 它的两个独立数据库:您可以在非prod数据库中创建指向prod数据库的视图,这样就可以始终查看最新的数据集
  • 如果它有两个独立的环境:您可以使用雪花的共享功能,这有助于独立帐户之间的数据共享

  • 我假设您的意思是在某个时间点将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)