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