Intermediaire aggregatiefuncties

Automatisering van datapijplijnen in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Volgorde van bewerkingen

Volgorde van bewerkingen.png

SQL draait niet in de volgorde waarin je het schrijft

  1. Rijen: stel de dataset samen
  2. Groepen: vat samen
  3. Resultaat: vorm de output
1 * Snowflake Learning Material
Automatisering van datapijplijnen in Snowflake

Veelgebruikte aggregaatfuncties

  • COUNT(*) / COUNT(DISTINCT col) — totaal rijen; unieke waarden
  • SUM — kolomsom
  • AVG — gemiddelde
  • MIN / MAX — bereik
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;
Automatisering van datapijplijnen in Snowflake

Het probleem met meerdere queries

Gebruik per regio en warehouse

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

Subtotaal per regio

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

Totaal gebruik

SELECT 
SUM(credits_used) 
FROM usage;
Automatisering van datapijplijnen in Snowflake

GROUPING SETS

Input

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

Output

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
  • Opmerking: Geef betekenis aan NULLs via een CASE-statement
Automatisering van datapijplijnen in Snowflake

ROLLUP

Input

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

Output

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
Automatisering van datapijplijnen in Snowflake

CUBE

Input

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

Output

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
Automatisering van datapijplijnen in Snowflake

GROUPING() en 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);

Schermafbeelding van markdown-tabeloutput

Automatisering van datapijplijnen in Snowflake

Laten we oefenen!

Automatisering van datapijplijnen in Snowflake

Preparing Video For Download...