雪花仓库:MAX WH 尺寸可以封顶吗?

Posted

技术标签:

【中文标题】雪花仓库:MAX WH 尺寸可以封顶吗?【英文标题】:Snowflake Warehouse: Can the MAX WH size be capped? 【发布时间】:2019-12-23 18:44:47 【问题描述】:

是否可以指定仓库的最大尺寸?

我们希望能够让用户在限制范围内灵活地调整他们的仓库。对于我们的环境,从 MEDIUM 到 XX-Large 仓库时,查询性能不太可能有很大提高。然而,我们的用户倾向于偏高而不是偏低的错误,从而导致高计算成本。

我知道我们可以限制仓库中的集群数量,并且我们可以使用资源监视器在仓库(或帐户)上实施基于信用的配额,但我真的很想从限制 WH 的最大大小开始可以先设置为。

我认为它可能是 WH 的另一个参数,例如 MAX_SIZE = 'M'。

谢谢,

【问题讨论】:

我通过创建不同大小的仓库并允许用户访问这些仓库来解决这个问题。所以我会给某人访问 XS、S、M 仓库的权限。 【参考方案1】:

假设有一个角色(例如,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;
$$;

【讨论】:

谢谢埃里克。我喜欢你的风格......如果我最终“借用”你的内容,我会告诉你的。真的很感激。【参考方案2】:

简短的回答是不,你不能限制仓库的大小。

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

【讨论】:

谢谢。清晰是一件好事。这似乎是一个合理的功能要求。有人已经提出了多点功能请求......所以我只是为它添加了另一个投票。如果您认为此功能有可取之处,请为它投票。 support.snowflake.net/s/ideas?t=1531953141811【参考方案3】:

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

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

【讨论】:

我没有看到有关此选项的任何文档 - 搜索了 WAREHOUSE_MAX_SIZE,但没有成功。 是的,一些参数是 Snowflake 内部的,但您的 SE 可以设置它们。

以上是关于雪花仓库:MAX WH 尺寸可以封顶吗?的主要内容,如果未能解决你的问题,请参考以下文章

仓库 - 雪花

“雪花数据云”是云原生事务应用程序数据存储的好选择吗?

如何自动向上/向下调整雪花仓库的大小?

在雪花中放置多个仓库的最佳方法?

如何将排队的查询移动到单独的雪花仓库?

雪花窗函数 last_value 和 max