Partitionering och fönsterfunktioner

Tidsserieanalys i PostgreSQL

Jasmin Ludolf

Content Developer, DataCamp

Partitionering

  • Dela upp en stor tabell i mindre delar, eller partitioner
  • Användbart vid stora datamängder
  • Tidsseriedata:
    • ny data varje dag
    • partitionera efter datumintervall

Illustration av en större tabell som delas upp i två delmängder

Tidsserieanalys i PostgreSQL

Ett intervall

  • Intervallgränser:

    • inklusiv i den nedre änden
    • exklusiv i den övre änden
  • Alternativ till intervall: partitionera efter händelse eller kategori

Intervall 1 : 2000–2010

2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009

Intervall 2 : 2010–2020

2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020

Tidsserieanalys i PostgreSQL

Partition by

  • PARTITION BY RANGE
CREATE TABLE timetable (
    date_info DATE,
    train_id INTEGER,
    departure_time TIMESTAMP,
    arrival_time TIMESTAMP,
    delay INTEGER
) PARTITION BY RANGE (date_info);
Tidsserieanalys i PostgreSQL

Partition of

  • PARITION OF FOR VALUES FROM
  • timetable är en partitionerad tabell, partitionerad på date_info med metoden RANGE

 

CREATE TABLE timetable_y2020 PARTITION OF timetable
    FOR VALUES FROM ('2020-01-01') to ('2020-12-31');
Tidsserieanalys i PostgreSQL

Fönsterfunktioner

  • Förenklar vanliga SQL-frågor
  • Returnerar ett värde för varje rad i en tabell (kan bero på andra rader)

 

  • Fönster : den mängd rader som funktionen opererar på
  • Fönsterfunktion : funktionen som används på dessa rader, eller fönstret
  • Aggregatfunktioner är jämförande, men resultatet grupperas inte till ett enda värde
Tidsserieanalys i PostgreSQL

Over-satsen

  • Satsen OVER indikerar en fönsterfunktion
  • Exempel: regional_timetable med datum, tider, id, förseningar och region
  • Utan PARTITION BY behandlar fönsterfunktionen hela tabellen som en partition
SELECT region, train_id, delay, AVG(delay) OVER (PARTITION BY region)
FROM regional_timetable;
|region|train_id|   delay|     avg|
|------|--------|--------|--------|
| north|       6|00:00:05|00:00:05|
| north|       2|00:00:03|00:00:05|
| north|       5|00:00:07|00:00:05|
|  east|       1|00:00:10|00:00:21|
|  east|       3|00:00:32|00:00:21|
| south|       8|00:01:00|00:01:00|
Tidsserieanalys i PostgreSQL

Nu kör vi en övning!

Tidsserieanalys i PostgreSQL

Preparing Video For Download...