Dotazovací jazyk pro setříděná data Tereza Cihelková, Matěj Klonfar
Obsah prezentace První část: Motivace Úvod do AQuery Datový model a algebra Druhá část: Transformace Experimentální výsledky Příbuzné projekty
Zpracovala Tereza Cihelková
Motivace – úvod do problematiky Na pořadí závislý dotaz Výsledek záleží na pořadí vstupních dat Příklad nezávislého dotazu Prostředí: databáze akcií a jejich cen Dotaz na průměrnou cenu Příklad závislého dotazu Prostředí: databáze akcií a jejich cen Dotaz na klouzavý průměr ceny – délky například 5
Motivace – úvod do problematiky Dotazovací jazyky založené na relačních datových modelech zvládají na pořadí závislé dotazy jen přes rozšíření Důsledek: dotazy jsou složité jak na zápis, tak na optimalizaci SQL:1999 a okénkový mechanismus Umožňuje třídit data v omezených částech dotazu AQuery je přímo navržené pro na pořadí dat závislé dotazování
Motivace – příklady s OLAP Nákup a prodej akcií v ten samý den Schéma: Transakce(ID, datum, cena, ts) ID – identifikátor obchodované akcie ts – časové razítko Dotaz: Pro danou akcii a daný den zjistěte, kolik nejvíce bylo možné vydělat, pokud člověk zakoupil a následně prodal akcii v tom samém dni.
Motivace – příklady s OLAP [SQL:1999] SELECT max(klouzavy_roz) FROM (SELECT ID, datum, cena - min(cena) OVER (PARTITION BY ID, datum ORDER BY ts ROWS UNBOUNDED PRECEDING) AS klouzavy_roz, FROM Transakce ) AS t1 WHERE ID = 'ACME' AND datum = '05/11/03'
Motivace – příklady s OLAP Počet paketů a jejich průměrná délka v rámci toku Schéma: Pakety(pID, src, dest, delka, ts) pID – identifikátor paketu src – odesílatel dest – příjemce delka – velikost paketu ts – časové razítko Datový tok od odesílatele k příjemci považujeme za ukončený, pokud déle jak dvě minuty není žádný provoz Dotaz: Počet paketů a jejich průměrná délka v rámci každého toku
Motivace – příklady s OLAP [SQL:1999] WITH Prec (src, dest, delka, ts, ptime) AS (SELECT src, dest, delka, ts, min(ts) OVER (PARTITION BY src, dest ORDER BY ts ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM Pakety), Tok (src, dest, delka, ts, ag) AS (SELECT src, dest, delka, ts, CASE WHEN ts-ptime > 120 THEN 1 ELSE 0 END FROM Prec), [SQL:1999] WITH Prec (src, dest, delka, ts, ptime) AS (SELECT src, dest, delka, ts, min(ts) OVER (PARTITION BY src, dest ORDER BY ts ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) FROM Pakety), Tok (src, dest, delka, ts, ag) AS (SELECT src, dest, delka, ts, CASE WHEN ts-ptime > 120 THEN 1 ELSE 0 END FROM Prec), TokID (src, dest, delka, ts, fID) AS (SELECT src, dest, delka, ts, sum(ag) OVER (ORDER BY src, dest, ts ROWS UNBOUNDED PRECEDING) FROM Tok) SELECT src, dest, avg(delka), count(ts) FROM TokID GROUP BY src, dest, fID TokID (src, dest, delka, ts, fID) AS (SELECT src, dest, delka, ts, sum(ag) OVER (ORDER BY src, dest, ts ROWS UNBOUNDED PRECEDING) FROM Tok) SELECT src, dest, avg(delka), count(ts) FROM TokID GROUP BY src, dest, fID
Úvod do AQuery V relačních modelech se na tabulky díváme jako na mlutimnožiny(jeden prvek se může vyskytnout vícekrát) AQuery : dotazovací jazyk, který je sémantickým rozšířením multimnožinoviného relačního modelu Arrable – odlišný pohled na tabulky array-table uspořádané entity Řazení může být definováno již při vytváření arrable pomocí klauzule ORDER BY
Úvod do AQuery AQuery obsahuje klasické SELECT – FROM – WHERE – GROUP BY – AGGREGATE – HAVING klauzule Hlavní rozšíření jsou založená na nové klauzuli ASSUMING ORDER Definuje setřídění arrablů uvedených ve FROM klauzuli Predikáty a výrazy obsažené v kterékoliv klauzuli počítají s řazením uvedeným v ASSUMING ORDER Důsledek: to umožňuje psát dotazy mnohem přirozeněji, jak si později ukážeme Ověřit platnost předpokladu pak musí optimalizér Pořadí zachovávající, pořadí-cavalier varianty operátorů
Datový model a algebra Příklad dvou arrablů – v následujícím textu se k němu ještě budeme vracet
Datový model a algebra Definice 1: Arrables T – množina typů z nichž každý odpovídá nějakému základnímu typu(integer, boolean…) nebo jednorozměrnému poli tvořenému elementy základních typů A - konečné pole elementů typu kar(A) – kardinalita A je rovna počtu jeho elementů arrable r – kolekce pojmenovaných polí A₁,…,An, která mají stejnou kardinalitu a každé je z nich je typu z T
Datový model a algebra Definice 2: Idexování arrable k-tý záznam v arrable r je tvořen k-tým elementem každého z polí, kterými je arrable r tvořeno Definice 3: Třídění (Ordered by) – vzestupné, k₁<k₂ Arrable r může být (lexikograficky) setřízeno podle nějaké podmnožiny svých polí Buď (i) Nebo (ii) takové, že a když i>1 pak
Datový model a algebra Definice 4: Order-Ekvivalence r, s – arrable nad stejnou množinou atributů Předpokládejme, že r je ORDERED BY podle nějaké množiny atributů X1,…,Xp, s zase podle Y1,…,Yq Pak r a s jsou order-ekvivalentní s respektem k atributům B1,…,Bm (značeno ) pokud: (i) r a s jsou multimnožinově ekvivalentní (ii) B1,…,Bm je prefixem X1,…Xp i Y1,…,Yq Pokud jsou r a s čistě jen multimnožinově ekvivalentní píšeme
Datový model a algebra Sémantika orientovaná na sloupce U na pořadí závislých dotazů často výsledná řádka závisí na kombinaci hodnot z více jak jedné vstupní řádky Na řádky orientované jazyky jako SQL mají přístup jen k jedné řádce v čase V AQuery proměnné vždy odpovídají polím a proto výrazy vždy definují mapování ze seznamu polí do pole, počítáme tedy s vektory Rozdíl cen v po sobě jdoucích řádcích můžeme tedy jednoduše zapsat jako: cena-prev(cena)
Datový model a algebra Definice 5 : Závislost na pořadí Výraz v, který mapuje seznam polí na jedno pole je nezávislý na pořadí, pokud když zpermutujeme pořadí prvků ve vstupních polích(po řádcích), dostaneme stejný výsledek Například avg(cena) nezáleží na pořadí Výrazy, které nejsou nezávislé na pořadí jsou závislé na pořadí cena-prev(cena) je výraz závislý na pořadí
Datový model a algebra Další funkce patřící mezi na pořadí závislé a velikost zachovávající jsou klouzavé agregační funkce Např: klouzavé minimum přes pole A značíme jako mins(A), klouzavý součet sums(A). Vždy mají koncovku „s“ Některé klouzavé agregační funkce mohou být spočítány pomocí posuvného okénka – například avgs(w,A), kde w je velikost okénka
Datový model a algebra Další kategorií funkcí zobrazujících z vektoru na vektor jsou ty, které jsou závislé na pořadí, ale nezachovávají velikost Pokud zachovávají jen začátek nebo konec pole, nazýváme je okrajové funkce Například prvních nebo posledních n pozic pole first(n,A), last(n,A) Klasické SQL agregační fuknce (min, max, avg, count) mohou být brány jako na pořadí nezávislé, velikost nezachovávající, vektor na vektor zobrazující funkce
Datový model a algebra Algebra v AQuery Podporuje operátory relační algebry Každý operátor tu ovšem bere jako vstupní argumenty výrazy typu polí Pokud je výraz na pořadí závislý, potom operátor zachovává pořadí Jinak je jen pořadí-cavalier – což znamená, že výsledek je multimnožinově ekvivalentní ke své pořadí zachovávající variantě Ve zbytku této sekce definujeme pořadí zachovávající varianty operátorů relační algebry
Datový model a algebra Definice 6 : Projekce Mějme arrable r a seznam výrazů e=e1,…,em nad poli z arrable r takových, že |e1|=…=|em| Pořadí zachovávající projekce r nad e, značená, je definovaná jako : projection(e,r) 1. s:= prázdné arrable se stejným schema jako e 2. for i = 0 to |r|-1 3. append to s 4. end for 5. output s Pokud je některé ei na pořadí závislé, tak říkáme, že projekce je pořadí zachovávající. Jinak je jen pořadí-cavalier
Datový model a algebra Definice 7 : Selekce Mějme arrable r a predikát p, který mapuje seznam polí z r do pole hodnot boolean, takový, že |r|=|p| Pořadí zachovávající selekce z r nad p, značená, je definována jako: selection(p,r) 1. s:= prázdné arrable se stejným schema jako r 2. for i = 0 to |r|-1 3. if p[i] is true 4. append r[i] to s 5. end if 6. end for 7. output s Stejně jako projekce, může být selekce na pořadí závislá a buď pořadí zachovávající nebo k pořadí šetrná
Datový model a algebra Definice 8 : Třídění Mějme arrable r(A1,…,An) a B1,…,Bm buď podmnožinou A1,…,An. Tříděním r nad B1,..,Bm myslíme permutaci s arrable r, která je ORDERED BY B1,..,Bm. Nyní můžme ukázat, jak by vypadal první příklad na dotaz na nejvýhodnější obchod s akciemi v AQuery: SELECT max(price - mins(price)) FROM Trades ASSUMING ORDER ts WHERE ID = 'ACME' AND tradeDate = '05/11/03'
Datový model a algebra AQuery klauzule SELECT, FROM,.. jsou vykonávány stejně jako v SQL. Sémanticky je ASSUMING ORDER přeloženo jako třídění poté, co je vyhodnocena FROM klauzule Všechny následující klauzule (WHERE, GROUP BY, HAVING a SELECT) jsou nutně přeloženy do pořadí zachovávajících algebraických variací AQuery algebra : e = max(price-mins(price)) p=(ID=‘ACME’) AND (tradeDate = ’05/11/03’)
Datový model a algebra Definice 9 : Seskupování (Grouping) Mějme arrable r a g=G1,..,Gm buď seznam výrazů nad polemi z r, tak, že |G1|=…=|Gm|=|r|. Ke každému r[i] musí existovat skupina charakterizovaná g[i] Pořadí zachovávající seskupování r nad g je značeno jako: Kvůli krokům 8 a 13 v následujícím algoritmu se nám může stát, že po seskupení budeme mít v některých sloupcích místo skalárů vektory
Datový model a algebra group-by(g,r) 1. groups := prázdné arrable se stejným schema jako g 2. s:= prázdné arrable se stejným schema jako r 3. for i = 0 to |r|-1 4. if g[i] in groups 5. j:= index of g[i] in groups 6. for each column C in r 7. if C is not a grouped-by column 8. concat r[i].C to s[j].C 9. end if 10. end for 11. else 12. append g[i] to groups 13. append r[i] to s 14. end if 15.end for 16.output s
Datový model a algebra
Definice 10 : Each modifikátor Nechť je pole A parametrem funkce F. Provedení funkce F modifikované pomocí ‘each’ vypadá následovně: each(F, A) 1. B := prázdné pole stejného typu jako výstup F 2. for i = 0 to |A|-1 3. append F(A[i]) to B 4. end for 5. output B Pro případy, kdy chceme funkci aplikovat na sloupce jejichž položky jsou poli – typicky po seskupení ‘each’ je nutně pořadí zachovávající
Datový model a algebra
Jak by vypadal druhý příklad v AQuery? Chceme zjistit počet paketů a jejich průměrnou délku v rámci každého toku dat SELECT src, dest, avg(length), count(ts) FROM Packets ASSUMING ORDER src, dest, ts GROUP BY src, dest, sums(deltas(ts) > 120) Algebra: e = src, dest, each(avg(),length), each(count(),ts) g = src, dest, sums(deltas(timestamp)>120)
Datový model a algebra Definice 11 : Spojení (Join) Mějme arrable r(A1,..,An) a s(B1,..,Bm). Levo-pravé pořadí zachovávající spojení r a s nad predikátem p, značené : join(p, r, s) 1. o:= prázdné arrable se schema 2. for i = 0 to |r| for j = 0 to |s| if p(r[i],s[j]) is true 5. append to o 6. end if 7. end for 8. end for 9. output o
Datový model a algebra Poslední příklad: Mějme arrable Portfolio(ID, tradedSince) ORDERED BY ID Cheme zjistit posledních 10 cen každé akcie v portfoliu SELECT t.ID, last(10, price) FROM Trades t, Portfolio p ASSUMING ORDER ts WHERE t.ID= p.ID GROUP BY t.ID Algebra: e = ID, each(last(),10,price) p = Trades.ID = Portfolio.ID
Zpracoval Matěj Klonfar
Transformace Redukce / Eliminace Třídění Selekce Projekce Join a Semi-Join Group By
Transformace Redukce / Eliminace Třídění Je-li A předponou order(r)
Transformace Selekce Není-li p závislé na uspořádání Projekce Je-li e výraz nad poli z r
Transformace Spojení a Poloviční spojení Je-li A, B ze schématu r, s Je-li A, B ze schématu r
Transformace Spojení a Poloviční spojení Je-li A, B ze schématu r, s, p je buď ‘ pos()=FIRST ’ nebo ‘ pos()=LAST ’ a B je jedinečné
Transformace Group By
Optimalizace Implicitní selekce a okrajové třídění Dělené třídění Vnořené třídění Edgeby a brzká okrajová selekce
Implicitní selekce a okrajové třídění Schéma: Connections(host, port, client, timestamp) ORDERED BY timestamp Dotaz : SELECT last(1, client) FROM Connections ASSUMING ORDER timestamp WHERE host = ‘atlas’
Implicitní selekce a okrajové třídění
Dělené třídění Schéma: Connections(host, port, client, timestamp) ORDERED BY host Dotaz : SELECT client FROM Connections ASSUMING ORDER timestamp WHERE host = last(1, host)
Dělené třídění
Vnořené třídění Schéma: Trades(ID, tradeDate, price, timestamp) Dotaz : SELECT ID, last(10, price) FROM Trades ASSUMING ORDER ID, timestamp GROUP BY ID
Vnořené třídění
Edgeby a brzká okrajová selekce Schéma: Trades(ID, tradeDate, price, timestamp) ORDERED BY timestamp Portfolio(ID, name, tradedSince) ORDERED BY ID Dotaz : SELECT last(1, price) FROM Trades, Portfolio ASSUMING ORDER timestamp WHERE Trades.ID=Portfolio.ID AND name=“DataOrder”
Edgeby a brzká okrajová selekce
Výsledky Optimalizované vs. neoptimalizované plány Osa x – velikost dat, Osa y - čas
Výsledky Zrychlení oproti SQL:1999
Reference Lerner, A. and Shasha, D. AQuery: Query language for ordered data, optimization techniques, and experiments. In VLDB, , 2003.
Děkujeme za pozornost