我的一位用户询问是否可以计算雪花中执行特定查询所消耗的信用。根据我的理解,我认为这是不可能的,因为信贷消耗是在仓库级别而不是查询级别。但我仍然认为,是否有人可以计算每个查询的功劳。
谢谢
答案 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
经过这段时间并基于一些假设
如果您知道上述指标,则可以计算出特定于仓库大小的总贷方金额,总计
谢谢 -帕特(Palash Chatterjee)