Snowflake cloud data platform 雪花仓库:最大WH尺寸是否可以限制?

Snowflake cloud data platform 雪花仓库:最大WH尺寸是否可以限制?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,是否可以指定仓库的最大大小 我们希望能够让用户在一定范围内灵活地调整他们的仓库大小。在我们的环境中,从中型仓库到XX大型仓库,查询性能不太可能有很大提高。然而,我们的用户倾向于偏高,而不是偏低,这导致了高计算成本 我知道我们可以限制仓库中集群的数量,我们可以使用资源监视器对仓库(或帐户)实施基于信用的配额,但我真的想首先限制WH可以设置的最大大小 我想它可能是WH的另一个参数,比如MAX_SIZE='m' 谢谢,简单的回答是不,你不能给仓库的大小设置上限 一个较长的答案是建立一个流程,在给定的时

是否可以指定仓库的最大大小

我们希望能够让用户在一定范围内灵活地调整他们的仓库大小。在我们的环境中,从中型仓库到XX大型仓库,查询性能不太可能有很大提高。然而,我们的用户倾向于偏高,而不是偏低,这导致了高计算成本

我知道我们可以限制仓库中集群的数量,我们可以使用资源监视器对仓库(或帐户)实施基于信用的配额,但我真的想首先限制WH可以设置的最大大小

我想它可能是WH的另一个参数,比如MAX_SIZE='m'


谢谢,

简单的回答是不,你不能给仓库的大小设置上限


一个较长的答案是建立一个流程,在给定的时间间隔内将仓库大小重置为您认为的“默认”大小。

简短的答案是否定的,您不能对仓库大小设置上限

一个较长的答案是构建一个流程,将仓库大小重置为给定时间间隔内的“默认”大小。

假设存在一个创建所有仓库或具有修改权限的角色(如SYSADMIN)。使用该角色创建此过程,然后任何用户都可以通过仓库名称和所需大小调用此SP。由于SP以所有者(与调用方)的身份执行,因此调用SP的用户不需要对仓库具有修改权限,只需他们的角色对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;
$$;
假设存在一个创建所有仓库或具有修改权限的角色(如SYSADMIN)。使用该角色创建此过程,然后任何用户都可以通过仓库名称和所需大小调用此SP。由于SP以所有者(与调用方)的身份执行,因此调用SP的用户不需要对仓库具有修改权限,只需他们的角色对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;
$$;

虽然不是一个完美的解决方案,但您可以要求SE设置参数WAREHOUSE_MAX_SIZE,以限制您帐户中的用户可以设置的仓库大小


根据要求,我已使用此方法为至少一个客户设置了仓库大小上限,效果很好。

虽然不是一个完美的解决方案,但您可以要求您的SE设置参数WAREHOUSE\u MAX\u size,以限制您帐户中的用户可以设置的仓库大小


应要求,我已使用此方法为至少一位客户设置了仓库大小上限,效果很好。

我通过创建不同大小的仓库,并允许用户访问这些仓库,解决了这一问题。因此,我将允许某人访问XS、S、M仓库。我通过创建不同大小的仓库,并允许用户访问这些仓库来解决这个问题。所以我会让某人访问XS,S,M仓库。谢谢。清晰是件好事。这似乎是一个合理的功能要求。有人已经请求了多点功能。。。所以我又投了一张赞成票。如果你认为这个功能有优点,请投赞成票。谢谢清晰是件好事。这似乎是一个合理的功能要求。有人已经请求了多点功能。。。所以我又投了一张赞成票。如果你认为这个功能有优点,请投赞成票。谢谢你,埃里克。我喜欢你的风格。。。如果我最终“借用”了你的内容,我会让你知道的。真的很感激。谢谢你,埃里克。我喜欢你的风格。。。如果我最终“借用”了你的内容,我会让你知道的。非常感谢。我没有看到关于此选项的任何文档-搜索仓库最大尺寸时运气不佳。是的,有些参数是Snowflake内部的,但您的SE可以设置它们。我没有看到关于此选项的任何文档-搜索仓库最大尺寸时运气不佳。是的,有些参数是Snowflake内部的,但是你的SE可以设置它们。