Snowflake cloud data platform 雪花查询信用计算

Snowflake cloud data platform 雪花查询信用计算,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我的一个用户问我是否可以计算在snowflake中执行特定查询所消耗的积分。根据我的理解,我认为这是不可能的,因为信用卡是在仓库级别,而不是查询级别。但我仍然认为如果有人有办法计算每个查询的信用 谢谢如果您正在运行顺序查询,例如使用run all从web UI运行,并且没有其他人共享仓库,那么执行时间*仓库信用度每小时=成本 如果仓库总是排队/运行,那么成本是总仓库成本*sumquery执行时间/总执行时间的比例 如果处理处于循环中,那么任何一个查询都是免费的,因为没有它,其他代码将运行。但是,

我的一个用户问我是否可以计算在snowflake中执行特定查询所消耗的积分。根据我的理解,我认为这是不可能的,因为信用卡是在仓库级别,而不是查询级别。但我仍然认为如果有人有办法计算每个查询的信用


谢谢

如果您正在运行顺序查询,例如使用run all从web UI运行,并且没有其他人共享仓库,那么执行时间*仓库信用度每小时=成本

如果仓库总是排队/运行,那么成本是总仓库成本*sumquery执行时间/总执行时间的比例

如果处理处于循环中,那么任何一个查询都是免费的,因为没有它,其他代码将运行。但是,如果您有一个循环,那么您关心的是延迟,或者减少仓库大小、自动扩展。因此它不是真正免费的

所以这两种方法实际上是一样的,你必须按比例分配时间


对于我们在一个循环中处理大部分信息,因此我们希望减少/管理延迟,因此我们观察管道部分的“长时间运行”或“总时间”,以找到需要改进的地方。如果SQL本身在运行,那么时间就是成本,如果仓库正在运行许多并发请求,那么它们会因为N并发而变慢,或者它们不是免费的午餐,我们对最后一个桶进行折扣。

由于各种因素,特定查询的实际信用消耗量将有点难以计算,您可以通过计算所用时间得出一些什么结论

select sum(TOTAL_ELAPSED_TIME),WAREHOUSE_SIZE from query_history
where QUERY_TEXT='select * from query_history' -- Your Query
and WAREHOUSE_NAME='XXXXXX' -- replace Your WH name 
and USER_NAME='XXXXXX'-- Replace your User Name
group by WAREHOUSE_SIZE
根据经过的时间和一些假设

在各种执行过程中,仓库的大小是一致的 如果执行时间为30秒,则必须支付5分钟的费用,如果自动暂停设置为300秒,则仓库信用也会根据自动暂停设置进行燃烧 如上所述,如果多个用户同时共享仓库以执行不同的查询,它也将共享信用使用情况 在查询执行期间,结果是从catch还是从远程存储中获取 如果您知道上述指标,请计算特定于仓库规模的总信贷支出,将其相加

谢谢
-Palash Chatterjee

我最后写了一个查询,如下所示

SELECT query_id
     ,warehouse_name
     ,start_time
     ,end_time
     ,total_elapsed_sec
     ,case
            when total_elapsed_sec < 60 then 60 
            else total_elapsed_sec
      end as total_elapsed_sec_1
     ,ROUND(unit_of_credit*total_elapsed_sec_1 / 60/60,2)  total_credit
     ,total_credit*3.00 query_cost --change based on how much you are paying for a credit
FROM (
  select query_id
     ,warehouse_name
     ,start_time
     ,end_time
     ,total_elapsed_time/1000   total_elapsed_sec
     ,CASE WHEN warehouse_size = 'X-Small'    THEN 1
             WHEN warehouse_size = 'Small'      THEN 2
             WHEN warehouse_size = 'Medium'     THEN 4
             WHEN warehouse_size = 'Large'      THEN 8
             WHEN warehouse_size = 'X-Large'    THEN 16
             WHEN warehouse_size = '2X-Large'   THEN 32
             WHEN warehouse_size = '3X-Large'   THEN 64
             WHEN warehouse_size = '4X-Large'   THEN 128
       ELSE 1    
       END unit_of_credit
  from table(information_schema.QUERY_HISTORY_BY_USER
             (user_name => 'USERNAME', 
              END_TIME_RANGE_START => dateadd('hours',-1,current_timestamp()), --you can manipulate this based on your need
              END_TIME_RANGE_END => current_timestamp(),RESULT_LIMIT => 10000)));