是否可以指定仓库的最大大小?
我们希望能够为用户提供在有限的范围内扩展其仓库规模的灵活性。对于我们的环境,从中型仓库到大型XX仓库时,查询性能不太可能会提高很多。然而,我们的用户往往会偏向高端而不是低端,从而导致高昂的计算成本。
我知道我们可以限制仓库中的集群数量,并且可以使用资源监视器在仓库(或帐户)上实施基于信用的配额,但是我真的想从限制WH的最大大小开始可以首先设置为。
我认为这可能是WH的另一个参数,例如MAX_SIZE ='M'。
谢谢
答案 0 :(得分:4)
假定有一个角色(例如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;
$$;
答案 1 :(得分:1)
简短的回答是“不,您不能为仓库的大小设置上限。
一个更长的答案是建立一个过程,以在给定的时间间隔内将仓库大小重置为您认为是“默认”大小的任何大小。
答案 2 :(得分:0)
虽然不是完美的解决方案,但您可以要求SE设置参数WAREHOUSE_MAX_SIZE来限制您帐户中用户可以设置的仓库的大小。