Проміжні агрегатні функції

Автоматизація конвеєрів даних у Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Порядок виконання операцій

Порядок виконання операцій.png

SQL виконується не в тому порядку, як ви його пишете

  1. Рядки: сформуйте набір даних
  2. Групи: підсумуйте його
  3. Результат: сформуйте вихід
1 * Матеріали Snowflake
Автоматизація конвеєрів даних у Snowflake

Поширені агрегатні функції

  • COUNT(*) / COUNT(DISTINCT col) — кількість рядків; унікальні значення
  • SUM — сумарне значення стовпця
  • AVG — середнє
  • MIN / MAX — діапазон
SELECT COUNT(*) AS total_shipments,
       COUNT(DISTINCT carrier_id) AS unique_carriers,
       SUM(delivery_days) AS total_days,
       AVG(delivery_days) AS avg_days
FROM shipments;
Автоматизація конвеєрів даних у Snowflake

Проблема з кількома запитами

Повернути використання за регіоном і складом

SELECT 
region
, warehouse_name
, SUM(credits_used) 
FROM usage 
GROUP BY region, warehouse_name; 

Повернути підсумки за регіоном

SELECT region
, SUM(credits_used) 
FROM usage GROUP BY region; 

Повернути загальний підсумок

SELECT 
SUM(credits_used) 
FROM usage;
Автоматизація конвеєрів даних у Snowflake

GROUPING SETS

Вхідні дані

SELECT region
, warehouse_name
, SUM(credits_used) AS total 
FROM usage 
GROUP BY GROUPING SETS ( 
  (region, warehouse_name)
  , (region)
  , () 
);

Вихідні дані

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25
NULL NULL 2510.75
  • Примітка: Надайте значення NULL через CASE
Автоматизація конвеєрів даних у Snowflake

ROLLUP

Вхідні дані

SELECT 
region
, warehouse_name
, SUM(credits_used) AS total 
FROM usage 
GROUP BY ROLLUP (region, warehouse_name);

Вихідні дані

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25
NULL NULL 2510.75
Автоматизація конвеєрів даних у Snowflake

CUBE

Вхідні дані

SELECT 
region
, warehouse_name
, SUM(credits_used) AS total
FROM usage 
GROUP BY CUBE (region, warehouse_name);

Вихідні дані

REGION WAREHOUSE_NAME TOTAL
EMEA harbr_wh_prod 1240.50
EMEA harbr_wh_dev 380.00
EMEA NULL 1620.50
APAC harbr_wh_prod 890.25
APAC NULL 890.25 }
NULL harbr_wh_prod 2130.75
NULL harbr_wh_dev 380.00
NULL NULL 2510.75
Автоматизація конвеєрів даних у Snowflake

GROUPING() та GROUPING_ID()

SELECT region, warehouse_name, SUM(credits_used) AS total_credits, GROUPING(region) AS is_region_agg, GROUPING(warehouse_name) AS is_wh_agg , 
GROUPING_ID(region, warehouse_name) AS grouping_level 
FROM usage 
GROUP BY ROLLUP (region, warehouse_name);

Знімок екрана з вихідною таблицею Markdown

Автоматизація конвеєрів даних у Snowflake

Перейдемо до практики!

Автоматизація конвеєрів даних у Snowflake

Preparing Video For Download...