Snowflake cloud data platform 雪花:自动化克隆过程

Snowflake cloud data platform 雪花:自动化克隆过程,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,要求:我正在研究如何每天自动化从Prod到dev的克隆过程 无论是Python还是存储过程既然您提到了克隆,我将假设您的Prod和Dev环境位于同一个Snowflake帐户中。您可以很容易地通过一个简单地删除DEV数据库然后克隆PROD数据库的任务来实现这一点。我认为您不需要SP或Python来实现这一点。既然您提到了克隆,我将假设您的Prod和Dev环境位于同一个Snowflake帐户中。您可以很容易地通过一个简单地删除DEV数据库然后克隆PROD数据库的任务来实现这一点。我认为您不需要SP或

要求:我正在研究如何每天自动化从Prod到dev的克隆过程


无论是Python还是存储过程

既然您提到了克隆,我将假设您的Prod和Dev环境位于同一个Snowflake帐户中。您可以很容易地通过一个简单地删除DEV数据库然后克隆PROD数据库的任务来实现这一点。我认为您不需要SP或Python来实现这一点。

既然您提到了克隆,我将假设您的Prod和Dev环境位于同一个Snowflake帐户中。您可以很容易地通过一个简单地删除DEV数据库然后克隆PROD数据库的任务来实现这一点。我认为您不需要SP或Python来实现这一点。

您可以用一行SQL语句克隆数据库;但是,我测试了在SQL存储过程中运行它,它不会在SQL存储过程中运行create语句。JavaScript存储过程可以工作

因为所有雪花任务都需要一个存储过程来运行,所以如果要使用任务,就需要一个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;

可以使用单行SQL语句克隆数据库;但是,我测试了在SQL存储过程中运行它,它不会在SQL存储过程中运行create语句。JavaScript存储过程可以工作

因为所有雪花任务都需要一个存储过程来运行,所以如果要使用任务,就需要一个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;

到目前为止你试过什么?您是否创建了任何python代码或存储过程?您是否遇到任何具体问题?你的问题太宽泛了,到目前为止你试过什么?您是否创建了任何python代码或存储过程?您是否遇到任何具体问题?你的问题太广泛了谢谢,很有意思,我会查一查的。每一次克隆都需要花费吗?谢谢,有趣的是,我会检查一下。每一次克隆都要付出代价吗?