要求:我正在研究如何每天自动从Prod到dev进行克隆过程
Python或存储过程
答案 0 :(得分:2)
您可以使用单行SQL语句克隆数据库。但是,我测试了在SQL存储过程中运行它的情况,并且它不会在SQL存储过程中运行create语句。 JavaScript存储过程将起作用。
由于所有Snowflake任务都需要一个存储过程才能运行,因此,如果要使用任务,则需要一个JavaScript存储过程。
这里是一个示例:
-- Recommend you do not store the SP in a database you'll be cloning
create or replace procedure UTIL_DB.PUBLIC.CLONE_MY_DB()
returns string
language javascript
as
$$
return executeNonQuery('create or replace database TEST2 clone TEST1');
function executeNonQuery(queryString) {
var out;
cmd1 = {sqlText: queryString};
stmt = snowflake.createStatement(cmd1);
var rs;
rs = stmt.execute();
rs.next();
return rs.getColumnValue('status');
return out;
};
$$;
-- Make sure the SP works
drop database if exists TEST2;
call UTIL_DB.PUBLIC.CLONE_MY_DB();
-- Create a task calling the SP.
-- Use CRON syntax to get productionized
-- https://docs.snowflake.com/en/sql-reference/sql/create-task.html
create task MY_CLONE_TASK
warehouse = TEST
schedule = '1440 minute'
as call UTIL_DB.PUBLIC.CLONE_MY_DB();
请记住,默认情况下未启用您的任务。您需要对要运行任务的角色执行以下操作:
use role ACCOUNTADMIN;
grant execute task on account to role SYSADMIN;
use role SYSADMIN;
alter task UTIL_DB.PUBLIC.MY_CLONE_TASK resume;
答案 1 :(得分:0)
由于您引用了克隆,因此我假设您的Prod和Dev环境在同一个Snowflake帐户中。您可以通过简单地删除DEV数据库然后克隆PROD数据库的任务轻松地做到这一点。我认为您不需要SP或Python。