Resource Optimization: Usage Monitoring
๊ฐ์
์ด ๋ฆฌ์์ค ์ต์ ํ ๊ฐ์ด๋๋ ํด๋น ์๋ฆฌ์ฆ์ ํฌํจ๋์ด ์๋ 4๊ฐ์ ๋ชจ๋ ์ค ํ๋๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ฌํ ๊ฐ์ด๋๋ ๊ณ ๊ฐ์ด ์์ ์ ํฌ๋ ๋ง ์๋น๋ฅผ ๋ ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํฉ๋๋ค. ๊ณ ๊ฐ์ด ์์ ์ ํฌ๋ ๋ง์ด ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค๋ ๊ฒ์ ์์ ํ ์ ์๋๋ก ๋๋ ๊ฒ์ ์ง์์ ์ด๋ฉฐ ์ฑ๊ณต์ ์ธ ํํธ๋์ญ์ ์ค์ํฉ๋๋ค. ์ด ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ Snowflake ๋น ๋ฅธ ์์ ์ธํธ์ ๋๋ถ์ด Snowflake๋ ์ปค๋ฎค๋ํฐ ์ง์, ๊ต์ก ๋ฐ ํ๋กํ์ ๋ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ๋ฃ ์๋น์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค๊ฐ์ค๋ ํ๋ จ ๋ฐ ๊ต์ก์์ ํ์ธํ์ญ์์ค.
์ด ๋ธ๋ก๊ทธ ํฌ์คํธ๋ ์ฌ๋ฌ๋ถ์ด Snowflake์ ๋ฆฌ์์ค ์ต์ ํ ๊ธฐ๋ฅ์ ๋ ์ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค.
marketing@snowflake.com์ผ๋ก Snowflake ํ์ ๋ฌธ์ํ์ญ์์ค. Snowflake๋ ์ฌ๋ฌ๋ถ์ ํผ๋๋ฐฑ์ ์์คํ๊ฒ ์ฌ๊น๋๋ค.
์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง ์ฟผ๋ฆฌ๋ ์ง์ ๋ ๊ธฐ๊ฐ ๋์ ๊ฐ์ฅ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ์จ์ดํ์ฐ์ค, ์ฟผ๋ฆฌ, ๋๊ตฌ ๋ฐ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฌํ ์ฟผ๋ฆฌ๋ ์์ธกํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ๋ฆฌ์์ค๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๊ฒฐ์ ํ๊ณ ์๋น๋ฅผ ์ค์ด๋ ๋ฐ ํ์ํ ์กฐ์น๋ฅผ ์ทจํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ตํ ๋ด์ฉ
- ์๋น ๋ํฅ ๋ฐ ํจํด ๋ถ์ ๋ฐฉ๋ฒ
- ์๋น ๋ณ์น ํ์ธ ๋ฐฉ๋ฒ
- ํํธ๋ ๋๊ตฌ ์๋น ๋ฉํธ๋ฆญ ๋ถ์ ๋ฐฉ๋ฒ
ํ์ํ ๊ฒ
- Snowflake ๊ณ์
- ๊ณ์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ๋ณด๊ธฐ ์ํ ์ก์ธ์ค
๊ด๋ จ ์๋ฃ
- ๋ฆฌ์์ค ์ต์ ํ: ์ค์ ๋ฐ ๊ตฌ์ฑ
- ๋ฆฌ์์ค ์ต์ ํ: ์ฒญ๊ตฌ ๋ฉํธ๋ฆญ
- ๋ฆฌ์์ค ์ต์ ํ: ์ฑ๋ฅ
์ฟผ๋ฆฌ Tier
๋ฆฌ์์ค ์ต์ ํ Snowflake ๋น ๋ฅธ ์์ ๋ด์ ์๋ ๊ฐ ์ฟผ๋ฆฌ ์ด๋ฆ์ ์ค๋ฅธ์ชฝ์๋ โ(T*)โ๋ก Tier ์ง์ ์ด ์์ต๋๋ค. ๋ค์ Tier ์ค๋ช ์ ์ด๋ฌํ ์ง์ ์ ๋ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Tier 1 ์ฟผ๋ฆฌ
๋ณธ์ง์ ์ผ๋ก Tier 1 ์ฟผ๋ฆฌ๋ Snowflake์ ๋ฆฌ์์ค ์ต์ ํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ํ ๊ฐ ๊ณ ๊ฐ์ด ๊ท๋ชจ, ์ ๊ณ, ์์น ๋ฑ์ ๊ด๊ณ์์ด ์์ ์ ์๋น ๋ชจ๋ํฐ๋ง์ ๋ํด ๋์์ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Tier 2 ์ฟผ๋ฆฌ
Tier 2 ์ฟผ๋ฆฌ๋ ๋ฆฌ์์ค ์ต์ ํ์ ๋ํ ์ถ๊ฐ์ ์ธ ๊น์ด๋ฅผ ์ ๊ณตํ๋ ๋์์ ํ๋ก์ธ์ค์์ ์ค์ํ ์ญํ ์ ์ํํฉ๋๋ค. ๋ํ ๋ชจ๋ ๊ณ ๊ฐ๊ณผ ๊ณ ๊ฐ์ ์ํฌ๋ก๋์ ํ์์ ์ด์ง๋ ์์์ง๋ผ๋ ๊ณผ๋ํ ์๋น๊ฐ ํ์ธ๋์์ ์ ์๋ ๋ชจ๋ ์ถ๊ฐ ์์ญ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Tier 3 ์ฟผ๋ฆฌ
๋ง์ง๋ง์ผ๋ก Tier 3 ์ฟผ๋ฆฌ๋ Snowflake ์๋น๋ฅผ ์ต์ ํํ๋ ๋ฐ ์์ด์ ๋ชจ๋ ๋ถ๋ถ์ ํ์ธํ๊ณ ์ ํ๋ ๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด๋ฌํ ์ฟผ๋ฆฌ๋ ์ด ํ๋ก์ธ์ค์์ ์ฌ์ ํ ๋งค์ฐ ์ ์ฉํ์ง๋ง Tier 1 ๋ฐ 2์ ์ฟผ๋ฆฌ๋งํผ ์ค์ํ์ง๋ ์์ต๋๋ค.
Credit Consumption by Warehouse (T1)
Tier 1
์ค๋ช :
์ง์ ๋ ๊ธฐ๊ฐ ๋์ ๊ฐ ์จ์ดํ์ฐ์ค์ ์ด ํฌ๋ ๋ง ์๋น๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
๋ค๋ฅธ ์จ์ดํ์ฐ์ค๋ณด๋ค ๋ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ํน์ ์จ์ดํ์ฐ์ค๊ฐ ์๋์? ์์ด์ผ ํ๋์? ํด๋น ์จ์ดํ์ฐ์ค๋ฅผ ๋์์ผ๋ก ์์ธกํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ํน์ ์จ์ดํ์ฐ์ค๊ฐ ์๋์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
// Credits used (all time = past year) SELECT WAREHOUSE_NAME ,SUM(CREDITS_USED_COMPUTE) AS CREDITS_USED_COMPUTE_SUM FROM ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY GROUP BY 1 ORDER BY 2 DESC ; // Credits used (past N days/weeks/months) SELECT WAREHOUSE_NAME ,SUM(CREDITS_USED_COMPUTE) AS CREDITS_USED_COMPUTE_SUM FROM ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= DATEADD(DAY, -7, CURRENT_TIMESTAMP()) // Past 7 days GROUP BY 1 ORDER BY 2 DESC ;
์คํฌ๋ฆฐ์ท

Average Hour-by-Hour Consumption Over the Past 7 Days (T1)
Tier 1
์ค๋ช :
์ง๋ 7์ผ๊ฐ์ ์๋น ๋ํฅ(๊ฐ์ฅ ๋ง์ ๋, ๊ฐ์ฅ ๋ฎ์ ๋)์ ๋ ์ ์ดํดํ ์ ์๋๋ก ์๊ฐ๋ณ๋ก ์ด ํฌ๋ ๋ง ์๋น๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
ํ๋ฃจ ์ค ์ด๋ค ์๊ฐ์ ์๋น๊ฐ ๊ธ์ฆํ๋์? ์์ธกํ ๋๋ก์ธ๊ฐ์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL(์๊ฐ, ์จ์ดํ์ฐ์ค๋ณ)
// Credits used by [hour, warehouse] (past 7 days) SELECT START_TIME ,WAREHOUSE_NAME ,CREDITS_USED_COMPUTE FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= DATEADD(DAY, -7, CURRENT_TIMESTAMP()) AND WAREHOUSE_ID > 0 // Skip pseudo-VWs such as "CLOUD_SERVICES_ONLY" ORDER BY 1 DESC,2 ;
์คํฌ๋ฆฐ์ท

SELECT DATE_PART('HOUR', START_TIME) AS START_HOUR ,WAREHOUSE_NAME ,AVG(CREDITS_USED_COMPUTE) AS CREDITS_USED_COMPUTE_AVG FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME >= DATEADD(DAY, -7, CURRENT_TIMESTAMP()) AND WAREHOUSE_ID > 0 // Skip pseudo-VWs such as "CLOUD_SERVICES_ONLY" GROUP BY 1, 2 ORDER BY 1, 2 ;
์คํฌ๋ฆฐ์ท

Average Query Volume by Hour (Past 7 Days) (T1)
Tier 1
์ค๋ช :
์ผ๋ฐ์ ์ธ ์ฟผ๋ฆฌ ํ๋์ ๋ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์๊ฐ๋ณ๋ก ์คํ๋๋ ํ๊ท ์ฟผ๋ฆฌ ์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์๊ฐ๋ณ๋ก ๋ช ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋์? ์์ธกํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง๊ฑฐ๋ ์ ์๊ฐ์? ์ด๋ฌํ ํ์์ ์ด์ ๋ ๋ฌด์์ผ๊น์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
SELECT DATE_TRUNC('HOUR', START_TIME) AS QUERY_START_HOUR ,WAREHOUSE_NAME ,COUNT(*) AS NUM_QUERIES FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME >= DATEADD(DAY, -7, CURRENT_TIMESTAMP()) // Past 7 days GROUP BY 1, 2 ORDER BY 1 DESC, 2 ;
์คํฌ๋ฆฐ์ท

Warehouse Utilization Over 7 Day Average (T1)
Tier 1
์ค๋ช :
์ด ์ฟผ๋ฆฌ๋ ์ฃผ ๋ฐ ์จ์ดํ์ฐ์ค๋ณ๋ก ๊ทธ๋ฃนํ๋ ์ผ๋ณ ํ๊ท ํฌ๋ ๋ง ์๋น๋ฅผ ๋ฐํํฉ๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์ด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์ฃผ์ ๊ฑธ์ณ ์จ์ดํ์ฐ์ค์ ํฌ๋ ๋ง ์๋น ๋ณ์น์ ํ์ธํฉ๋๋ค.
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
WITH CTE_DATE_WH AS( SELECT TO_DATE(START_TIME) AS START_DATE ,WAREHOUSE_NAME ,SUM(CREDITS_USED) AS CREDITS_USED_DATE_WH FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY GROUP BY START_DATE ,WAREHOUSE_NAME ) SELECT START_DATE ,WAREHOUSE_NAME ,CREDITS_USED_DATE_WH ,AVG(CREDITS_USED_DATE_WH) OVER (PARTITION BY WAREHOUSE_NAME ORDER BY START_DATE ROWS 7 PRECEDING) AS CREDITS_USED_7_DAY_AVG ,100.0*((CREDITS_USED_DATE_WH / CREDITS_USED_7_DAY_AVG) - 1) AS PCT_OVER_TO_7_DAY_AVERAGE FROM CTE_DATE_WH QUALIFY CREDITS_USED_DATE_WH > 100 // Minimum N=100 credits AND PCT_OVER_TO_7_DAY_AVERAGE >= 0.5 // Minimum 50% increase over past 7 day average ORDER BY PCT_OVER_TO_7_DAY_AVERAGE DESC ;
์คํฌ๋ฆฐ์ท

Forecasting Usage/Billing (T1)
Tier 1
์ค๋ช :
์ด ์ฟผ๋ฆฌ๋ ๊ณ์ฝ ๊ธฐ๊ฐ ๋์ ์ผ๋ณ๋ก 3๊ฐ์ ๋ค๋ฅธ ์๋น ๋ฉํธ๋ฆญ์ ์ ๊ณตํฉ๋๋ค. (1) ๊ณ์ฝ๋ ์๋น๋ ์ ์ฒด ๊ธฐ๊ฐ ๋์ ์ฌ์ฉ๋์ด ์ผ์ ํ ๊ฒฝ์ฐ ์๋น๋๋ ๊ธ์ก์ ๋๋ค. (2) ์ค์ ์๋น๋ ์ฌ๋ฌ ์ฌ์ฉ๋ ๋ทฐ์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ฉฐ ์ผ๋ณ ์์ค์ผ๋ก ๊ธ์ก์ ์ง๊ณํฉ๋๋ค. (3) ์์ธก๋ ์๋น๋ ์์ผ๋ก์ ์๋น๋ฅผ ์์ธกํ๊ธฐ ์ํด ์ค์ ๋ฐ์ดํฐ์์ ์ง์ ํ๊ท๋ฅผ ์์ฑํฉ๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์ด ๋ฐ์ดํฐ๋ ๊ณ์ฝ ๊ธ์ก๊ณผ ๋น๊ตํ์ฌ ๋ฏธ๋ ์์ธก์ ์ถ์ ํ๊ธฐ ์ํด ์ง์์ ์ธ ์ด๊ณ์ฐ์ ํตํด ์ ๊ทธ๋ํ๋ก ๋งคํ๋์ด์ผ ํฉ๋๋ค.
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
SET CREDIT_PRICE = 4.00; --edit this number to reflect credit price SET TERM_LENGTH = 12; --integer value in months SET TERM_START_DATE = '2020-01-01'; SET TERM_AMOUNT = 100000.00; --number(10,2) value in dollars WITH CONTRACT_VALUES AS ( SELECT $CREDIT_PRICE::decimal(10,2) as CREDIT_PRICE ,$TERM_AMOUNT::decimal(38,0) as TOTAL_CONTRACT_VALUE ,$TERM_START_DATE::timestamp as CONTRACT_START_DATE ,DATEADD(day,-1,DATEADD(month,$TERM_LENGTH,$TERM_START_DATE))::timestamp as CONTRACT_END_DATE ), PROJECTED_USAGE AS ( SELECT CREDIT_PRICE ,TOTAL_CONTRACT_VALUE ,CONTRACT_START_DATE ,CONTRACT_END_DATE ,(TOTAL_CONTRACT_VALUE) / DATEDIFF(day,CONTRACT_START_DATE,CONTRACT_END_DATE) AS DOLLARS_PER_DAY , (TOTAL_CONTRACT_VALUE/CREDIT_PRICE) / DATEDIFF(day,CONTRACT_START_DATE,CONTRACT_END_DATE) AS CREDITS_PER_DAY FROM CONTRACT_VALUES ), ACTUAL_USAGE AS ( SELECT TO_DATE(START_TIME) AS CONSUMPTION_DATE ,SUM(DOLLARS_USED) as ACTUAL_DOLLARS_USED FROM ( --COMPUTE FROM WAREHOUSES SELECT 'WH Compute' as WAREHOUSE_GROUP_NAME ,WMH.WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,WMH.START_TIME ,WMH.END_TIME ,WMH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*WMH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH UNION ALL --COMPUTE FROM SNOWPIPE SELECT 'Snowpipe' AS WAREHOUSE_GROUP_NAME ,PUH.PIPE_NAME AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,PUH.START_TIME ,PUH.END_TIME ,PUH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*PUH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.PIPE_USAGE_HISTORY PUH UNION ALL --COMPUTE FROM CLUSTERING SELECT 'Auto Clustering' AS WAREHOUSE_GROUP_NAME ,DATABASE_NAME || '.' || SCHEMA_NAME || '.' || TABLE_NAME AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,ACH.START_TIME ,ACH.END_TIME ,ACH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*ACH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.AUTOMATIC_CLUSTERING_HISTORY ACH UNION ALL --COMPUTE FROM MATERIALIZED VIEWS SELECT 'Materialized Views' AS WAREHOUSE_GROUP_NAME ,DATABASE_NAME || '.' || SCHEMA_NAME || '.' || TABLE_NAME AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,MVH.START_TIME ,MVH.END_TIME ,MVH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*MVH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.MATERIALIZED_VIEW_REFRESH_HISTORY MVH UNION ALL --COMPUTE FROM SEARCH OPTIMIZATION SELECT 'Search Optimization' AS WAREHOUSE_GROUP_NAME ,DATABASE_NAME || '.' || SCHEMA_NAME || '.' || TABLE_NAME AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,SOH.START_TIME ,SOH.END_TIME ,SOH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*SOH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.SEARCH_OPTIMIZATION_HISTORY SOH UNION ALL --COMPUTE FROM REPLICATION SELECT 'Replication' AS WAREHOUSE_GROUP_NAME ,DATABASE_NAME AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,RUH.START_TIME ,RUH.END_TIME ,RUH.CREDITS_USED ,$CREDIT_PRICE ,($CREDIT_PRICE*RUH.CREDITS_USED) AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.REPLICATION_USAGE_HISTORY RUH UNION ALL --STORAGE COSTS SELECT 'Storage' AS WAREHOUSE_GROUP_NAME ,'Storage' AS WAREHOUSE_NAME ,NULL AS GROUP_CONTACT ,NULL AS GROUP_COST_CENTER ,NULL AS GROUP_COMMENT ,SU.USAGE_DATE ,SU.USAGE_DATE ,NULL AS CREDITS_USED ,$CREDIT_PRICE ,((STORAGE_BYTES + STAGE_BYTES + FAILSAFE_BYTES)/(1024*1024*1024*1024)*23)/DA.DAYS_IN_MONTH AS DOLLARS_USED ,'ACTUAL COMPUTE' AS MEASURE_TYPE from SNOWFLAKE.ACCOUNT_USAGE.STORAGE_USAGE SU JOIN (SELECT COUNT(*) AS DAYS_IN_MONTH,TO_DATE(DATE_PART('year',D_DATE)||'-'||DATE_PART('month',D_DATE)||'-01') as DATE_MONTH FROM SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.DATE_DIM GROUP BY TO_DATE(DATE_PART('year',D_DATE)||'-'||DATE_PART('month',D_DATE)||'-01')) DA ON DA.DATE_MONTH = TO_DATE(DATE_PART('year',USAGE_DATE)||'-'||DATE_PART('month',USAGE_DATE)||'-01') ) A group by 1 ), FORECASTED_USAGE_SLOPE_INTERCEPT as ( SELECT REGR_SLOPE(AU.ACTUAL_DOLLARS_USED,DATEDIFF(day,CONTRACT_START_DATE,AU.CONSUMPTION_DATE)) as SLOPE ,REGR_INTERCEPT(AU.ACTUAL_DOLLARS_USED,DATEDIFF(day,CONTRACT_START_DATE,AU.CONSUMPTION_DATE)) as INTERCEPT FROM PROJECTED_USAGE PU JOIN SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.DATE_DIM DA ON DA.D_DATE BETWEEN PU.CONTRACT_START_DATE AND PU.CONTRACT_END_DATE LEFT JOIN ACTUAL_USAGE AU ON AU.CONSUMPTION_DATE = TO_DATE(DA.D_DATE) ) SELECT DA.D_DATE::date as CONSUMPTION_DATE ,PU.DOLLARS_PER_DAY AS CONTRACTED_DOLLARS_USED ,AU.ACTUAL_DOLLARS_USED --the below is the mx+b equation to get the forecasted linear slope ,DATEDIFF(day,CONTRACT_START_DATE,DA.D_DATE)*FU.SLOPE + FU.INTERCEPT AS FORECASTED_DOLLARS_USED FROM PROJECTED_USAGE PU JOIN SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.DATE_DIM DA ON DA.D_DATE BETWEEN PU.CONTRACT_START_DATE AND PU.CONTRACT_END_DATE LEFT JOIN ACTUAL_USAGE AU ON AU.CONSUMPTION_DATE = TO_DATE(DA.D_DATE) JOIN FORECASTED_USAGE_SLOPE_INTERCEPT FU ON 1 = 1 ;
์คํฌ๋ฆฐ์ท

Partner Tools Consuming Credits (T1)
Tier 1
์ค๋ช :
์ด๋ค Snowflake ํํธ๋ ๋๊ตฌ/์๋ฃจ์ (BI, ETL ๋ฑ)์ด ๊ฐ์ฅ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋์ง ์๋ณํฉ๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์์ธกํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ํน์ ํํธ๋ ์๋ฃจ์ ์ด ์๋์? ์ด๋ฌํ ํ์์ ์์ธ์ ๋ฌด์์ธ๊ฐ์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
--THIS IS APPROXIMATE CREDIT CONSUMPTION BY CLIENT APPLICATION WITH CLIENT_HOUR_EXECUTION_CTE AS ( SELECT CASE WHEN CLIENT_APPLICATION_ID LIKE 'Go %' THEN 'Go' WHEN CLIENT_APPLICATION_ID LIKE 'Snowflake UI %' THEN 'Snowflake UI' WHEN CLIENT_APPLICATION_ID LIKE 'SnowSQL %' THEN 'SnowSQL' WHEN CLIENT_APPLICATION_ID LIKE 'JDBC %' THEN 'JDBC' WHEN CLIENT_APPLICATION_ID LIKE 'PythonConnector %' THEN 'Python' WHEN CLIENT_APPLICATION_ID LIKE 'ODBC %' THEN 'ODBC' ELSE 'NOT YET MAPPED: ' || CLIENT_APPLICATION_ID END AS CLIENT_APPLICATION_NAME ,WAREHOUSE_NAME ,DATE_TRUNC('hour',START_TIME) as START_TIME_HOUR ,SUM(EXECUTION_TIME) as CLIENT_HOUR_EXECUTION_TIME FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" QH JOIN "SNOWFLAKE"."ACCOUNT_USAGE"."SESSIONS" SE ON SE.SESSION_ID = QH.SESSION_ID WHERE WAREHOUSE_NAME IS NOT NULL AND EXECUTION_TIME > 0 --Change the below filter if you want to look at a longer range than the last 1 month AND START_TIME > DATEADD(Month,-1,CURRENT_TIMESTAMP()) group by 1,2,3 ) , HOUR_EXECUTION_CTE AS ( SELECT START_TIME_HOUR ,WAREHOUSE_NAME ,SUM(CLIENT_HOUR_EXECUTION_TIME) AS HOUR_EXECUTION_TIME FROM CLIENT_HOUR_EXECUTION_CTE group by 1,2 ) , APPROXIMATE_CREDITS AS ( SELECT A.CLIENT_APPLICATION_NAME ,C.WAREHOUSE_NAME ,(A.CLIENT_HOUR_EXECUTION_TIME/B.HOUR_EXECUTION_TIME)*C.CREDITS_USED AS APPROXIMATE_CREDITS_USED FROM CLIENT_HOUR_EXECUTION_CTE A JOIN HOUR_EXECUTION_CTE B ON A.START_TIME_HOUR = B.START_TIME_HOUR and B.WAREHOUSE_NAME = A.WAREHOUSE_NAME JOIN "SNOWFLAKE"."ACCOUNT_USAGE"."WAREHOUSE_METERING_HISTORY" C ON C.WAREHOUSE_NAME = A.WAREHOUSE_NAME AND C.START_TIME = A.START_TIME_HOUR ) SELECT CLIENT_APPLICATION_NAME ,WAREHOUSE_NAME ,SUM(APPROXIMATE_CREDITS_USED) AS APPROXIMATE_CREDITS_USED FROM APPROXIMATE_CREDITS GROUP BY 1,2 ORDER BY 3 DESC ;
์คํฌ๋ฆฐ์ท

Credit Consumption by User (T1)
Tier 1
์ค๋ช :
์ด๋ค ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ๋ถ์ Snowflake ํ๊ฒฝ ๋ด์์ ๊ฐ์ฅ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋์ง ์๋ณํฉ๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์ง์ ๋ ์๋ณด๋ค ๋ ๋ง์ ํฌ๋ ๋ง์ ์๋นํ๋ ํน์ ์ฌ์ฉ์๊ฐ ์๋์? ์ด๋ฌํ ์ถ๊ฐ ์ฌ์ฉ๋์ ๋ชฉ์ ์ ๋ฌด์์ธ๊ฐ์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
--THIS IS APPROXIMATE CREDIT CONSUMPTION BY USER WITH USER_HOUR_EXECUTION_CTE AS ( SELECT USER_NAME ,WAREHOUSE_NAME ,DATE_TRUNC('hour',START_TIME) as START_TIME_HOUR ,SUM(EXECUTION_TIME) as USER_HOUR_EXECUTION_TIME FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" WHERE WAREHOUSE_NAME IS NOT NULL AND EXECUTION_TIME > 0 --Change the below filter if you want to look at a longer range than the last 1 month AND START_TIME > DATEADD(Month,-1,CURRENT_TIMESTAMP()) group by 1,2,3 ) , HOUR_EXECUTION_CTE AS ( SELECT START_TIME_HOUR ,WAREHOUSE_NAME ,SUM(USER_HOUR_EXECUTION_TIME) AS HOUR_EXECUTION_TIME FROM USER_HOUR_EXECUTION_CTE group by 1,2 ) , APPROXIMATE_CREDITS AS ( SELECT A.USER_NAME ,C.WAREHOUSE_NAME ,(A.USER_HOUR_EXECUTION_TIME/B.HOUR_EXECUTION_TIME)*C.CREDITS_USED AS APPROXIMATE_CREDITS_USED FROM USER_HOUR_EXECUTION_CTE A JOIN HOUR_EXECUTION_CTE B ON A.START_TIME_HOUR = B.START_TIME_HOUR and B.WAREHOUSE_NAME = A.WAREHOUSE_NAME JOIN "SNOWFLAKE"."ACCOUNT_USAGE"."WAREHOUSE_METERING_HISTORY" C ON C.WAREHOUSE_NAME = A.WAREHOUSE_NAME AND C.START_TIME = A.START_TIME_HOUR ) SELECT USER_NAME ,WAREHOUSE_NAME ,SUM(APPROXIMATE_CREDITS_USED) AS APPROXIMATE_CREDITS_USED FROM APPROXIMATE_CREDITS GROUP BY 1,2 ORDER BY 3 DESC ;
์คํฌ๋ฆฐ์ท

Queries by # of Times Executed and Execution Time (T2)
Tier 2
์ค๋ช :
๋งค์ฐ ์์ฃผ ์คํ๋๋ ์ฟผ๋ฆฌ๊ฐ ์๋์?? ์คํ ์๊ฐ์ ์ผ๋ง๋ ์ฐจ์งํ๋์?
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
ํ ์ด๋ธ๋ก ๊ฒฐ๊ณผ ์ธํธ๋ฅผ ๊ตฌ์ฒดํํ ๊ธฐํ์ผ๊น์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
SELECT QUERY_TEXT ,count(*) as number_of_queries ,sum(TOTAL_ELAPSED_TIME)/1000 as execution_seconds ,sum(TOTAL_ELAPSED_TIME)/(1000*60) as execution_minutes ,sum(TOTAL_ELAPSED_TIME)/(1000*60*60) as execution_hours from SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY Q where 1=1 and TO_DATE(Q.START_TIME) > DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP())) and TOTAL_ELAPSED_TIME > 0 --only get queries that actually used compute group by 1 having count(*) >= 10 --configurable/minimal threshold order by 2 desc limit 100 --configurable upper bound threshold ;
Top 50 Longest Running Queries (T2)
Tier 2
์ค๋ช :
ํจํด์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ฐ์ฅ ์ค๋ ์คํ๋ ์ฟผ๋ฆฌ 50๊ฐ๋ฅผ ํ์ธํฉ๋๋ค
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์จ์ดํ์ฐ์ค ํด๋ฌ์คํฐ๋ง ๋๋ ํ์ฅ์ผ๋ก ์ต์ ํํ ๊ธฐํ๊ฐ ์๋์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
select QUERY_ID --reconfigure the url if your account is not in AWS US-West ,'https://'||CURRENT_ACCOUNT()||'.snowflakecomputing.com/console#/monitoring/queries/detail?queryId='||Q.QUERY_ID as QUERY_PROFILE_URL ,ROW_NUMBER() OVER(ORDER BY PARTITIONS_SCANNED DESC) as QUERY_ID_INT ,QUERY_TEXT ,TOTAL_ELAPSED_TIME/1000 AS QUERY_EXECUTION_TIME_SECONDS ,PARTITIONS_SCANNED ,PARTITIONS_TOTAL from SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY Q where 1=1 and TO_DATE(Q.START_TIME) > DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP())) and TOTAL_ELAPSED_TIME > 0 --only get queries that actually used compute and ERROR_CODE iS NULL and PARTITIONS_SCANNED is not null order by TOTAL_ELAPSED_TIME desc LIMIT 50 ;
Top 50 Queries that Scanned the Most Data (T2)
Tier 2
์ค๋ช :
๊ฐ์ฅ ๋ง์ ๋ง์ดํฌ๋ก ํํฐ์ ์ ์ค์บํ ์์ ์ฟผ๋ฆฌ 50๊ฐ๋ฅผ ํ์ธํฉ๋๋ค
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์จ์ดํ์ฐ์ค ํด๋ฌ์คํฐ๋ง ๋๋ ํ์ฅ์ผ๋ก ์ต์ ํํ ๊ธฐํ๊ฐ ์๋์?
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
select QUERY_ID --reconfigure the url if your account is not in AWS US-West ,'https://'||CURRENT_ACCOUNT()||'.snowflakecomputing.com/console#/monitoring/queries/detail?queryId='||Q.QUERY_ID as QUERY_PROFILE_URL ,ROW_NUMBER() OVER(ORDER BY PARTITIONS_SCANNED DESC) as QUERY_ID_INT ,QUERY_TEXT ,TOTAL_ELAPSED_TIME/1000 AS QUERY_EXECUTION_TIME_SECONDS ,PARTITIONS_SCANNED ,PARTITIONS_TOTAL from SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY Q where 1=1 and TO_DATE(Q.START_TIME) > DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP())) and TOTAL_ELAPSED_TIME > 0 --only get queries that actually used compute and ERROR_CODE iS NULL and PARTITIONS_SCANNED is not null order by PARTITIONS_SCANNED desc LIMIT 50 ;
Queries by Execution Buckets over the Past 7 Days (T2)
Tier 2
์ค๋ช :
์คํ ์๊ฐ ๋ฒํท๋ณ๋ก ์ฃผ์ด์ง ์จ์ดํ์ฐ์ค๋ฅผ ์ํด ์ฟผ๋ฆฌ๋ฅผ ๊ทธ๋ฃนํํฉ๋๋ค
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์ฟผ๋ฆฌ SLA ๋ํฅ์ ํ์ธํ๊ณ ์จ์ดํ์ฐ์ค ์ถ์, ํ์ฅ ๋๋ ๋ ๋ค๋ฅธ ์จ์ดํ์ฐ์ค๋ก ์ผ๋ถ ์ฟผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ ์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๋ ๊ธฐํ์ ๋๋ค
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
WITH BUCKETS AS ( SELECT 'Less than 1 second' as execution_time_bucket, 0 as execution_time_lower_bound, 1000 as execution_time_upper_bound UNION ALL SELECT '1-5 seconds' as execution_time_bucket, 1000 as execution_time_lower_bound, 5000 as execution_time_upper_bound UNION ALL SELECT '5-10 seconds' as execution_time_bucket, 5000 as execution_time_lower_bound, 10000 as execution_time_upper_bound UNION ALL SELECT '10-20 seconds' as execution_time_bucket, 10000 as execution_time_lower_bound, 20000 as execution_time_upper_bound UNION ALL SELECT '20-30 seconds' as execution_time_bucket, 20000 as execution_time_lower_bound, 30000 as execution_time_upper_bound UNION ALL SELECT '30-60 seconds' as execution_time_bucket, 30000 as execution_time_lower_bound, 60000 as execution_time_upper_bound UNION ALL SELECT '1-2 minutes' as execution_time_bucket, 60000 as execution_time_lower_bound, 120000 as execution_time_upper_bound UNION ALL SELECT 'more than 2 minutes' as execution_time_bucket, 120000 as execution_time_lower_bound, NULL as execution_time_upper_bound ) SELECT COALESCE(execution_time_bucket,'more than 2 minutes') ,count(Query_ID) as number_of_queries from SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY Q FULL OUTER JOIN BUCKETS B ON (Q.TOTAL_ELAPSED_TIME) >= B.execution_time_lower_bound and (Q.TOTAL_ELAPSED_TIME) < B.execution_time_upper_bound where Q.Query_ID is null OR ( TO_DATE(Q.START_TIME) >= DATEADD(week,-1,TO_DATE(CURRENT_TIMESTAMP())) and warehouse_name = <WAREHOUSE_NAME> and TOTAL_ELAPSED_TIME > 0 ) group by 1,COALESCE(b.execution_time_lower_bound,120000) order by COALESCE(b.execution_time_lower_bound,120000) ;
์คํฌ๋ฆฐ์ท

Warehouses with High Cloud Services Usage (T2)
Tier 2
์ค๋ช :
ํด๋ผ์ฐ๋ ์๋น์ค์ ์ด ์ปดํจํ ์ ๋น์จ๋ก ์ ๋ ฌ๋ ์ปดํจํ ์ ํด๋ผ์ฐ๋ ์๋น์ค ๋ถ๋ถ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ถฉ๋ถํ ์ปดํจํ ์ ์ฌ์ฉํ๊ณ ์์ง ์์ ์จ์ดํ์ฐ์ค๋ฅผ ๋ณด์ฌ์ค๋๋ค
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
ํด๋ผ์ฐ๋ ์๋น์ค ์ปดํจํ ์ ๋์ ๋ณผ๋ฅจ๊ณผ ๋น์จ์ ์ฌ์ฉํ๋ ์จ์ดํ์ฐ์ค์ ์ง์คํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ๋ฐ์ ์ธ ๋น์ฉ(๋ณต์ , S3์ ์๋ ๋ชฉ๋ก ํ์ผ, ํํธ๋ ๋๊ตฌ ์ค์ ์ธ์ ๋งค๊ฐ ๋ณ์ ๋ฑ์ผ ์ ์์)์ด ์ค์ด๋๋ ์ด์ ๋ฅผ ์กฐ์ฌํฉ๋๋ค. ํด๋ผ์ฐ๋ ์๋น์ค ํฌ๋ ๋ง ์๋น๋ฅผ ์ค์ด๋ ค๋ ๋ชฉํ๋ ์ ๋ฐ์ ์ธ ํฌ๋ ๋ง์ ํด๋ผ์ฐ๋ ์๋น์ค ํฌ๋ ๋ง์ 10% ๋ฏธ๋ง์ผ๋ก ์ค์ด๋ ๊ฒ์ ๋๋ค. ####์ฃผ์ ์คํค๋ง: Account_Usage
SQL
select WAREHOUSE_NAME ,SUM(CREDITS_USED) as CREDITS_USED ,SUM(CREDITS_USED_CLOUD_SERVICES) as CREDITS_USED_CLOUD_SERVICES ,SUM(CREDITS_USED_CLOUD_SERVICES)/SUM(CREDITS_USED) as PERCENT_CLOUD_SERVICES from "SNOWFLAKE"."ACCOUNT_USAGE"."WAREHOUSE_METERING_HISTORY" where TO_DATE(START_TIME) >= DATEADD(month,-1,CURRENT_TIMESTAMP()) and CREDITS_USED_CLOUD_SERVICES > 0 group by 1 order by 4 desc ;
์คํฌ๋ฆฐ์ท

Warehouse Utilization (T2)
Tier 2
์ค๋ช :
์ด ์ฟผ๋ฆฌ๋ ์๊ฐ๋น ํฌ๋ ๋ง ์๋น์ ๋น๊ตํ์ ๋ ์จ์ดํ์ฐ์ค๊ฐ ์ผ๋ง๋ ๋ฐ์์ง๋ฅผ ๋๋ต์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ต์ข ์ฌ์ฉ์์๊ฒ ์๋น๋ ํฌ๋ ๋ง ์, ์คํ๋ ์ฟผ๋ฆฌ ์ ๋ฐ ๊ฐ ์๊ฐ ์ฐฝ์์ ์ด๋ฌํ ์ฟผ๋ฆฌ์ ์ด ์คํ ์๊ฐ์ ๋ณด์ฌ์ค ๊ฒ์ ๋๋ค.
๊ฒฐ๊ณผ ํด์ ๋ฐฉ๋ฒ:
์ด ๋ฐ์ดํฐ๋ ํฌ๋ ๋ง ์๋น์ #/์ฟผ๋ฆฌ ์คํ ๊ธฐ๊ฐ ๊ฐ์ ์๊ด ๊ด๊ณ๋ฅผ ๋์ถํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ ์ ํฌ๋ ๋ง ์๋ฅผ ์ํ ๋ ๋ง์ ์ฟผ๋ฆฌ ๋๋ ๋ ๋์ ์ฟผ๋ฆฌ ๊ธฐ๊ฐ์ ํฌ๋ ๋ง๋ณ๋ก ๋ ๋ง์ ๊ฐ์น๋ฅผ ๋์ถํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ฃผ์ ์คํค๋ง:
Account_Usage
SQL
SELECT WMH.WAREHOUSE_NAME ,WMH.START_TIME ,WMH.CREDITS_USED ,SUM(COALESCE(B.EXECUTION_TIME_SECONDS,0)) as TOTAL_EXECUTION_TIME_SECONDS ,SUM(COALESCE(QUERY_COUNT,0)) AS QUERY_COUNT FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH LEFT JOIN ( --QUERIES FULLY EXECUTED WITHIN THE HOUR SELECT WMH.WAREHOUSE_NAME ,WMH.START_TIME ,SUM(COALESCE(QH.EXECUTION_TIME,0))/(1000) AS EXECUTION_TIME_SECONDS ,COUNT(DISTINCT QH.QUERY_ID) AS QUERY_COUNT FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY QH ON QH.WAREHOUSE_NAME = WMH.WAREHOUSE_NAME AND QH.START_TIME BETWEEN WMH.START_TIME AND WMH.END_TIME AND QH.END_TIME BETWEEN WMH.START_TIME AND WMH.END_TIME WHERE TO_DATE(WMH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) AND TO_DATE(QH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) GROUP BY WMH.WAREHOUSE_NAME ,WMH.START_TIME UNION ALL --FRONT part OF QUERIES Executed longer than 1 Hour SELECT WMH.WAREHOUSE_NAME ,WMH.START_TIME ,SUM(COALESCE(DATEDIFF(seconds,QH.START_TIME,WMH.END_TIME),0)) AS EXECUTION_TIME_SECONDS ,COUNT(DISTINCT QUERY_ID) AS QUERY_COUNT FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY QH ON QH.WAREHOUSE_NAME = WMH.WAREHOUSE_NAME AND QH.START_TIME BETWEEN WMH.START_TIME AND WMH.END_TIME AND QH.END_TIME > WMH.END_TIME WHERE TO_DATE(WMH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) AND TO_DATE(QH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) GROUP BY WMH.WAREHOUSE_NAME ,WMH.START_TIME UNION ALL --Back part OF QUERIES Executed longer than 1 Hour SELECT WMH.WAREHOUSE_NAME ,WMH.START_TIME ,SUM(COALESCE(DATEDIFF(seconds,WMH.START_TIME,QH.END_TIME),0)) AS EXECUTION_TIME_SECONDS ,COUNT(DISTINCT QUERY_ID) AS QUERY_COUNT FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY QH ON QH.WAREHOUSE_NAME = WMH.WAREHOUSE_NAME AND QH.END_TIME BETWEEN WMH.START_TIME AND WMH.END_TIME AND QH.START_TIME < WMH.START_TIME WHERE TO_DATE(WMH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) AND TO_DATE(QH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) GROUP BY WMH.WAREHOUSE_NAME ,WMH.START_TIME UNION ALL --Middle part OF QUERIES Executed longer than 1 Hour SELECT WMH.WAREHOUSE_NAME ,WMH.START_TIME ,SUM(COALESCE(DATEDIFF(seconds,WMH.START_TIME,WMH.END_TIME),0)) AS EXECUTION_TIME_SECONDS ,COUNT(DISTINCT QUERY_ID) AS QUERY_COUNT FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WMH JOIN SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY QH ON QH.WAREHOUSE_NAME = WMH.WAREHOUSE_NAME AND WMH.START_TIME > QH.START_TIME AND WMH.END_TIME < QH.END_TIME WHERE TO_DATE(WMH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) AND TO_DATE(QH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) GROUP BY WMH.WAREHOUSE_NAME ,WMH.START_TIME ) B ON B.WAREHOUSE_NAME = WMH.WAREHOUSE_NAME AND B.START_TIME = WMH.START_TIME WHERE TO_DATE(WMH.START_TIME) >= DATEADD(week,-1,CURRENT_TIMESTAMP()) GROUP BY WMH.WAREHOUSE_NAME ,WMH.START_TIME ,WMH.CREDITS_USED ;
์คํฌ๋ฆฐ์ท

This content is provided as is, and is not maintained on an ongoing basis. It may be out of date with current Snowflake instances