Funcții WINDOW

Introducere în BigQuery

Matthew Forrest

Field CTO

Ce sunt funcțiile WINDOW

Ilustrație a unei ferestre WINDOW cu un SUM rulant

Introducere în BigQuery

Când se utilizează funcțiile WINDOW

Funcții WINDOW grupate după tip

1 https://towardsdatascience.com/a-guide-to-advanced-sql-window-functions-f63f2642cbf9
Introducere în BigQuery

Structura WINDOW, PARTITION și ORDER BY

SELECT
  customer_id,
  order_date,
  order_total,
  ROW_NUMBER() OVER(

PARTITION BY customer_id
ORDER BY order_date
) AS order_sequence FROM orders;
  • ROW_NUMBER(): Funcția WINDOW care returnează numărul rândului
  • OVER(): Definește cadrul ferestrei
  • PARTITION BY customer_id: Grupează datele după client
  • ORDER BY order_date: Ordonează datele în cadrul fiecărei partiții
  • order_sequence: Rezultatul operației funcției WINDOW
Introducere în BigQuery

RANK și PERCENT_RANK

SELECT
  product_id,
  product_photos_qty,
  -- Ordinal rank for each row
  RANK() OVER(
    ORDER BY product_photos_qty DESC
  ) as rank,
  -- Percentile rank for each row
  PERCENT_RANK() OVER(
    ORDER BY product_photos_qty
  ) as percent
FROM ecommerce.ecomm_products 
ORDER BY product_photos_qty DESC;

Rezultatele interogării RANK și PERCENT_RANK

Introducere în BigQuery

LAG și LEAD

SELECT
  product_id,
  -- Returns value from previous row
  LAG(product_photos_qty) OVER(
    ORDER BY product_photos_qty
  ) as lag,
  product_photos_qty,
  -- Returns value from next row
  LEAD(product_photos_qty) OVER(
    ORDER BY product_photos_qty
  ) as lead
FROM ecommerce.ecomm_products 
ORDER BY product_photos_qty DESC;

Imagine care arată LAG și LEAD în rezultatele interogării

Introducere în BigQuery

RANGE BETWEEN și CURRENT ROW

SELECT
  order_id,
  order_timestamp,
  SUM(cost) OVER(
    ORDER BY order_timestamp 
    ROWS BETWEEN 2 PRECEDING 
    AND CURRENT ROW) as rolling_avg
FROM sales_data
ORDER BY order_timestamp

Opțiuni de delimitare bazate pe rânduri:

  • UNBOUNDED PRECEDING: Toate rândurile anterioare
  • UNBOUNDED FOLLOWING: Toate rândurile următoare
  • [INT] ROWS PRECEDING: Număr specific de rânduri înainte
  • [INT] ROWS FOLLOWING: Număr specific de rânduri după
Introducere în BigQuery

QUALIFY

SELECT
  product_id,
  product_photos_qty,
  RANK() OVER(
    ORDER BY product_photos_qty DESC
  ) as rank
FROM ecommerce.ecomm_products 
-- Filter using QUALIFY
QUALIFY rank < 4
ORDER BY product_photos_qty DESC;

Rezultatele interogării care utilizează QUALIFY pentru a găsi valori cu rang 3 sau mai mare

  • HAVING nu poate fi utilizat deoarece nu se realizează agregare
Introducere în BigQuery

Să exersăm!

Introducere în BigQuery

Preparing Video For Download...