雪花查询功劳计算

时间:2020-05-20 19:55:21

标签: snowflake-cloud-data-platform

我的一位用户询问是否可以计算雪花中执行特定查询所消耗的信用。根据我的理解,我认为这是不可能的,因为信贷消耗是在仓库级别而不是查询级别。但我仍然认为,是否有人可以计算每个查询的功劳。

谢谢

3 个答案:

答案 0 :(得分:1)

我最终编写了如下查询

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)));

答案 1 :(得分:0)

如果您正在运行顺序查询(例如使用“全部运行”从Web UI运行),并且没有其他人共享仓库,则execution_time * warehouse_credits_per_time = cost

如果您的仓库总是排队等候/运行,则成本应为total_warehouse_cost * sum(query_execution_time) / total_execution_time的比例。

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

因此,第一个to方法实际上是同一件事,您必须按比例分配时间。

对于我们的大多数循环处理,因此我们希望减少/管理延迟,因此我们观察管道中各个部分的“长时间运行”或“总时间”,以寻求改进的地方。就像SQL本身在运行一样,时间就是成本,并且如果仓库正在运行许多并发请求,那么它们会被N并发“放慢”速度,或者不是(免费午餐),我们可以打折最后一个水桶..

答案 2 :(得分:0)

特定查询所消耗的实际信用会由于各种因素而难以计算,您可以通过计算时间来达到某种结清程度

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

经过这段时间并基于一些假设

  1. 各种执行期间仓库的大小都是一致的
  2. 还会根据自动暂停设置来消耗仓库信用(如果执行时间为30秒,则必须将5分钟的时间支付,如果自动暂停设置为300秒)
  3. 如前所述,如果多个用户同时共享仓库以执行不同的查询,它也会共享信用使用情况
  4. 在执行查询期间,是从捕获还是从远程存储中获取结果

如果您知道上述指标,则可以计算出特定于仓库大小的总贷方金额,总计

谢谢 -帕特(Palash Chatterjee)