Dav*_*pin 1 snowflake-cloud-data-platform
是否可以指定仓库的最大大小?
我们希望能够让用户在限制范围内灵活地调整他们的仓库。对于我们的环境,当从 MEDIUM 到 XX-Large 仓库时,查询性能不太可能有很大提高。然而,我们的用户往往会犯偏高的错误,而不是偏低的错误,从而导致高计算成本。
我知道我们可以限制仓库中的集群数量,我们可以使用资源监视器在仓库(或帐户)上实施基于信用的配额,但我真的想从限制 WH 可以设置的最大大小开始首先。
我认为它可能是 WH 的另一个参数,例如 MAX_SIZE = 'M'。
谢谢,
小智 5
假设有一个角色(例如,SYSADMIN)创建所有仓库或具有修改权限。使用该角色创建此过程,然后任何用户都可以调用此 SP,并传递仓库名称和所需大小。由于 SP 作为所有者(相对于调用者)执行,因此调用 SP 的用户不需要对仓库具有 MODIFY 权限,只是他们的角色必须具有对 SP 的使用权限。
CREATE OR REPLACE PROCEDURE utl.arch_set_wh_size_sp(P_WH_NM VARCHAR, P_WH_SIZE VARCHAR)
/****************************************************************************************\
DESC: set WH size
YY-MM-DD WHO CHANGE DESCRIPTION
-------- ------------ ----------------------------------------------------------------
19-12-13 eroesch Initial design
\****************************************************************************************/
RETURNS STRING
LANGUAGE JAVASCRIPT
AS $$
var result = "";
var sqlCmd = "";
var sqlStmt = "";
var rs = "";
var curSize = "";
var whSizesAllowed = ["X-SMALL", "XSMALL", "SMALL", "MEDIUM"];
try {
// first validate the warehouse exists and get the current size
sqlCmd = "SHOW WAREHOUSES LIKE '" + P_WH_NM + "'";
sqlStmt = snowflake.createStatement( {sqlText: sqlCmd} );
rs = sqlStmt.execute();
if (sqlStmt.getRowCount() == 0) {
throw new Error('No Warehouse Found by that name');
} else {
rs.next();
curSize = rs.getColumnValue('size').toUpperCase();
}
// next validate the new size is in the acceptable range
if (whSizesAllowed.indexOf(P_WH_SIZE.toUpperCase()) == -1) {
throw new Error('Not a valid Warehouse size');
};
// set Warehouse size
sqlCmd = "ALTER WAREHOUSE " + P_WH_NM + " SET WAREHOUSE_SIZE = :1";
sqlStmt = snowflake.createStatement( {sqlText: sqlCmd, binds: [P_WH_SIZE]} );
sqlStmt.execute();
result = "Resized Warehouse " + P_WH_NM + " from: " + curSize + " to: " + P_WH_SIZE.toUpperCase();
}
catch (err) {
if (err.code === undefined) {
result = err.message
} else {
result = "Failed: Code: " + err.code + " | State: " + err.state;
result += "\n Message: " + err.message;
result += "\nStack Trace:\n" + err.stackTraceTxt;
result += "\nParam:\n" + P_WH_NM + ", " + P_WH_SIZE;
}
}
return result;
$$;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |