SQL Spreadsheet. Jakub Čermák jakub@jcermak.cz

Podobné dokumenty
Advanced SQL Modeling in RDBMS - SQL Spreadsheet part1. Your Organization (Line #1)

Kukhar Maria. Dotazovací jazyky I MFF UK 2012

Operátory ROLLUP a CUBE

Databázové systémy. Cvičení 6: SQL

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

PG 9.5 novinky ve vývoji aplikací

Databáze SQL SELECT. David Hoksza

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

8.2 Používání a tvorba databází

TimescaleDB. Pavel Stěhule 2018

Dotazovací jazyky I. Datová krychle. Soběslav Benda

Multi-dimensional expressions

Optimalizace plnění a aktualizace velkých tabulek. Milan Rafaj, IBM

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

On line analytical processing (OLAP) databáze v praxi

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Návrh a tvorba WWW stránek 1/14. PHP a databáze

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Paralelní dotazy v PostgreSQL 9.6 (a 10.0)

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Analýza a modelování dat. Přednáška 9

Architektury databázových

DATA CUBE. Mgr. Jiří Helmich

KIV/ZIS cvičení 5. Tomáš Potužák

Optimalizace dotazů a databázové transakce v Oracle

PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

Analýza a modelování dat. Přednáška 8

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Úvod do databázových systémů

Databázové systémy Cvičení 5.2

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Databáze I. Přednáška 4

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Úvod do databázových systémů

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Dotazovací jazyk pro řazená data

RELAČNÍ DATABÁZOVÉ SYSTÉMY

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Databázové systémy I

Michal Krátký, Miroslav Beneš

IDS optimalizátor. Ing. Jan Musil, IBM ČR Community of Practice for

Úvod do databázových systémů

KIV/ZIS cvičení 6. Tomáš Potužák

Dotazování v relačním modelu a SQL

Použití databází na Webu

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Databáze I. 1. přednáška. Helena Palovská

Virtual Private Database (VPD) Jaroslav Kotrč

Tabulka fotbalové ligy

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Jazyk SQL databáze SQLite. připravil ing. petr polách

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Temporální databáze. Jan Kolárik Miroslav Macík

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK3PH (vm3bph)

Základy business intelligence. Jaroslav Šmarda

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Databáze I. Přednáška 7

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Databázové a informační systémy

INDEXY JSOU GRUNT. Pavel Stěhule

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Kapitola 6: Omezení integrity. Omezení domény

O Apache Derby detailněji. Hynek Mlnařík

6. blok část C Množinové operátory

Data Cube. Luboš Kulič Tomáš Kuthan

Databáze Bc. Veronika Tomsová

Kapitola 4: SQL. Základní struktura

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Popis souboru pro generování reportů *.report

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

VISUAL BASIC. Přehled témat

Informační systémy ve zdravotnictví. 6. cvičení

Verzování a publikace dat na webu za pomoci PostgreSQL

Business Intelligence. Adam Trčka

Databázové systémy Cvičení 5.3

Stručný obsah. K2118.indd :15:27

Stromy, haldy, prioritní fronty

Sada 1 - PHP. 14. Úvod do jazyka SQL

METODY DOLOVÁNÍ V DATECH DATOVÉ SKLADY TEREZA HYNČICOVÁ H2IGE1

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Systémy řízení proudů dat

Vkládání, aktualizace, mazání

LabView jako programovací jazyk II

1. Relační databázový model

Virtual private database. Antonín Steinhauser

Optimalizace SQL dotazů

Transkript:

SQL Spreadsheet Jakub Čermák jakub@jcermak.cz

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

OLTP, OLAP Online transaction processing např. relační databáze zaměřena na snadnou modifikaci ve víceuživatelském prostředí uchovává jednotlivé relace Online Analytical Processing analýza (obchodních trendů) velkých objemů dat mnohem (1000x) rychlejší než OLTP uchovávání agregací namísto jednotlivých záznamů, přímý přístup přes indexy

OLAP kostka Tabulka faktů (fact table) vícedimenzionální tabulka s daty buňky (cell) jsou adresovatelné (očíslované), na rozdíl od relací Measures jednotlivé hodnoty (označené dimenzemi) Dimenze (dimension) Popisky measures Příklad: f(t, r, p,s,c) time, region, product sales, cost

Spreadsheet př. Microsoft Excel pro analýzu obchodních dat vhodnější než SQL databáze přímé adresování prvků, podpora formulí, dobré UI Ale pouze 2D (řádek, sloupec) málo škálovatelné

SQL Spreadsheet rozšíření standardu SQL pro práci s ochodními daty a provádění analýz Oproti SQL adresování dimenzemi, relace jsou n- dimenzionální pole podpora formulí, dopočítávání hodnot snazší zápis, vyšší efektivita OLAP analýz rekurzivní a cyklické formule Oproti Spreasheetu n-dimenzionální lépe škálovatelný, mnohem výkonnější, větší podpora funkcí

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

Definice PARTITION column (PBY) rozdělení dat do disjunktních podmnožin (partitions) podmnožiny uplně nezávislé, prostor pro optimalizace DIMENSION column (DBY) popisky dat, unikátní identifikace buňky v dané partition MEASURES column (MEA) vlasní data Příklad: f(t, r, p,s,c) time, region, product; sales, cost

Syntaxe spreadsheet clause <existing parts of a query block> SPREADSHEET PBY(cols) DBY(cols) MEA(cols) <processing options> (<formula>,<formula>,..,<formula>)

Příklad SELECT r,p,t,s FROM f SPREADSHEET PBY(r) DBY(p,t) MEA(s) ( s[p= dvd,t=2002]=s[p= dvd,t=2001]*1.6, s[p= vcr,t=2002]= s[p= vcr,t=2000]+s[p= vcr,t=2001], s[p= tv,t=2002]=avg(s)[p= tv,1992<t<2002] ) SPREADSHEET PBY(r) DBY(p,t) MEA(s) ( s[ vcr,t<2002] = avg(s)[ vcr, cv(t)-2<=t<cv(t)] ) current value

UPDATE / UPSERT Mějme s[ vcr,t=2002] = Co když daná buňka neexistuje? UPSERT mode (výchozí) UPSERT s[ vcr,t=2002] = vytvoří buňku pokud neexistuje, jinak update UPDATE mode UPDATE s[ vcr,t=2002] = ignoruje neexistující buňky Ale co udělá UPSERT s[ tv, *]?

Calculated member Nová dimenze, která není ve fact table; hodnoty se vypočítávají formulí Příklad SPREADSHEET PBY(r) DBY(p,t) MEA(s) (UPSERT s[ tv,*]=s[ black-tv, cv()] + s[ white-tv,cv()]) Je zkratkou za Konstanta UPSERT s[ tv,for t IN (SELECT DISTINCT t FROM input set)] = NULL, UPDATE s[ tv,*]=s[ black-tv,cv()] + s[ white-tv,cv()]

Referenční spreadsheety Mám tabulku s jinou dimensionalitou př. budget allocation (region, prediction) Readonly přístup k jiným tabulkám během počítání Obdoba relačního JOINu rychlejší, optimalizovanější

Referenční spreadsheety př. SELECT r,t,s FROM f GROUP BY r,t SPREADSHEET REFERENCE budget ON (SELECT r,p FROM budget) DBY(r) MEA(p) DBY(r,t) MEA(s) ( s[ west,2002]=p[ west ]*s[ west,2001], s[ east,2002]= s[ east,2001]+s[ east,2000] )

Řazení Řazení vyhodnocování jednotlivých buňek Pokud je výpočet závislý na minulých hodnotách s[ vcr,t<2002] = avg(s)[ vcr, cv(t)-2<=t<cv(t)] ORDER BY s[ vcr,t<2002] ORDER BY t ASC= avg(s)[ vcr, cv(t)-2<=t<cv(t)] Řazení vyhodnocování formulí Při závislostech jednotlivých formulí na sobě (např. součet prodejů typů TV a pak součet všech TV + DVD) Pro acyklické smečky formulá Automatické v lexikografickém pořadí SEQUENTIAL ORDER podle pořadí uvedení

Cykly a rekurze Formule jsou na sobě cyklicky závislé Nelze vyhodnocovat napoprvé př. s[1] = s[1] / 2 Omezení (výpočet běží jedna nenastane) na počet iterací na bool podmínku Funkce PREVIOUS minulá hodnota SPREADSHEET DBY(x) MEA(s) ITERATE(10) UNTIL (PREVIOUS(s[1])-s[1] <= 1) (s[1]=s[1]/2)

Cyklus př. SELECT account,b FROM SPREADSHEET DBY(account) MEA(balanceb) RULES IGNORE NAV ITERATE(100) UNTIL(ABS(b[ net ]-PREVIOUS(b[ net ]))<0.01) ( F1:b[ interest ]=b[ net ]*0.30, F2:b[ net ]=b[ salary ]+b[ capitalgains ] - b[ interest ]-b[ tax ], F3:b[ tax ]=(b[ salary ]-b[ interest ])*0.38 + b[ capitalgains ]*0.28 )

Další instrukce ITERATE, AUTOMATIC SEQUENTIAL ORDER nastavení UPSERT/UPDATE mode jako default IGNORE NAV považuj NULL za 0 pro aritmetické operace

Změny tabulky faktů Ve výchozím použití NEUPRAVUJE původní relaci (ani UPSERT) MERGE propagace vypočítaných buňek zpět do relace

Změny tabulky faktů př. MERGE INTO f USING ( SELECT r,p,t,s FROM f SPREADSHEET PBY(r) DBY(p,t) MEA(s) ( UPSERT s[ tv,*]=s[ black-tv,cv()] + s[ white-tv,cv()] ) ) v ON f.r = v.r AND f.p = v.p AND f.t = v.t WHEN MATCHED THEN UPDATE SET f.s=v.s WHEN NOT MATCHED THEN INSERT VALUES(v.r, v.p, v.t, v.s)

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

Parametrizace SQL bloků Vytváření uložených funkcí pouze deklarativní (SQL) příkazy (narozdíl od Oracle, MSSQL) Silně typové funkce X slabě typové fce kontrola typů při vytváření X spuštění slabě typové: ANYTYPE jako typ Při vykonávání se dosadí do vnějšího dotazu možnost optimalizace mezi dotazy

Příklad CREATE FUNCTION region_sales_2002 (f TABLE OF ROW(r VARCHAR,p VARCHAR,t INT,s NUMBER), region VARCHAR) RETURN MULTISET LANGUAGE SQL AS SELECT r,p,t,s FROM f_param f WHERE r = region SPREADSHEET PBY(r) DBY(p,t) MEA(s) ( s[ vcr,2002]=s[ vcr,1998]+s[ vcr,1999], s[ dvd,2002]=avg(s)[ dvd,1990<t< 2001], s[*,2003]=s[cv(p),2002]*1.2 ) SELECT r,p,t,s FROM region_sales_2002 ((SELECT reg,prod,time,sale FROM t), west ) WHERE p= tv ;

Param. SQL Spreadsheet clause Vytváření uložených procedur přijímající už spreadsheet (rozdělený na PBY, DBY, MEA) neboli vícedimenzionální pole srovnej: předchozí přijímá relace obsahující pouze spreadsheet klauzuli srovnej: předchozí obsahuje SQL příkazy

Příklad CREATE PROCEDURE net_present_value (ARRAY DBY(i IN INTEGER) MEA(amount IN NUMBER,npv OUT NUMBER), rate NUMBER) LANGUAGE SQLSPREADSHEET AS RULES IGNORE NAV ( npv[1]=amount[1], npv[i>1] ORDER BY i = amount[cv(i)/power(1+rate,cv(i)]+ npv[cv(i)-1] )

Volání Přetypování 2D pole s jednou dimenzí konstantní ([ vcr, *]) pokud tvar pole je kompatibilní s tvarem spreadsheetu implicitní (defaultní) přetypování znovupoužití datových struktur => levné Volání ze spreadsheet bloku vyber MEA amount a npv a vytvoř 2D pole (pořád adresované všemi DBY sloupci) SELECT year,i,prod,amount,npv FROM cash_flow SPREADSHEET DBY(prod,i) MEA(year,s,NULL npv) ( net_present_value((amount,npv)[ vcr,*],0.14), net_present_value((amount,npv)[ dvd,*],0.14) )

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

Evaluation overview 3 fáze analýza a optimalizace graf závislostí formulí definice oboru (scope) dotazu transformace formulí, přesuny a optimalizace predikátů... tvorba datové struktury random access struktura (hash tabulka, ale možné i jiné implementace) vyhodnocení formulí 3 různé algoritmy

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

1. Graf závislostí orientovaný graf, vrcholy jsou formule, hrany jsou závislosti formulí R(F) buňky referencované na pravé straně L(F) buňky modifikované na levé straně Formule F1 závisí na F2 (F2 -> F1) právě tehdy když R(F1) má neprázdný průnik s L(F2) Složité formule: předpoklad, že referencují vše sestavení částečného uspořádání formulí rozdělení formulí do úrovní formule závisí pouze na těch z nižší úrovně

1. Graf závislostí (2) Zjištění cykličnosti grafu (výběr algoritmů) Nezávislé formule lze vyhodnocovat současně Závislé se musí vyhodnocovat popořadě Počet úrovní = minimální počet scanů lze dosáhnout pro acyklický graf Izolování acyklických částí grafu optimalizace (acykl. alg. jsou rychlejší) Pro sekvenční vyhodnocování pořadí je pevně dané, ale graf se generuje pro minimalizaci počtu scanů

2. Prořezání (pruning) formulí Vyhození formulí, které nakonec nebudou potřeba Definice: hodnota není využitá žádné další formuli změněné buňky jsou vyfiltrovány vnějším dotazovacím blokem nebo nejsou referencovány ve vnějším bloku Algoritmus sink node takový, ze kterého nevedou hrany FS <- množina všech sink nodes WHILE (FS is not empty), vyber Fi IF (Fi splňuje definici): vyhoď Fi z množiny formulí vyhození může generovat nové sink nodes, ty je třeba přidat do FS

Příklad SELECT * FROM ( SELECT r, p, t, s FROM f SPREADSHEET PBY(r) DBY(p,t) MEA(s) UPDATE ( F1:s[ dvd,2000]=s[ dvd,1999]*1.2, F2:s[ vcr,2000]=s[ vcr,1998]+s[ vcr,1999], F3:s[ tv,2000]=avg(s)[ tv,1990<t<2000] ) ) WHERE pin( dvd, vcr, video )

3. Přepis formulí Snížení počtu přepisů omezením podmínek SELECT * FROM ( SELECT r,p,t,s FROM f SPREADSHEET PBY(r) DBY(p,t) MEA(s,c) UPDATE ( F1:s[*,2002]=c[cv(p),2002]*2, ) ) WHERE pin( dvd, vcr ) and t 2000; F1 může být vyhodnocena jen pro F1 :s[pin( dvd, vcr ),2002]=c[cv(p),2002]*2 Výhodné spojit s předchozím krokem (generuje nové sink nodes)

4. Predicate pushing posun PBY predikátů mezi vnitřním a vnějším blokem vždy správné, filtrujeme celé partitiony posun mezi nezávislými dimenzemi nezávislá dimenze d na levé i pravé straně formule má vždy stejnou hodnotu na d lze nahlížet jako na PBY ohraničující obdélník (bounding rectangle) rozsah dimenzí v dané formuli, zarovnaný na čtverec pro dotaz: sjednocení ohraničujících obdélníků všech formulí tyto spojené predikáty lze také posouvat

5. optimalizace agregací SELECT r,p,t,s,ps FROM t SPREADSHEET PBY(r) DBY(p,t) MEA(s,t,0 ps) UPDATE ( ps[*,*]=s[cv(p),cv(t)-1]* (1+slope(s,t)[cv(p),cv(t)-5<=t<=cv(t)-1]) ) naivní implementace: moc scanů díky agregaci nalevo lze nahradit klouzavou funkcí operuje nad klouzavým (sliding) oknem nativní implementace v Oracle: slope(s,t) OVER (PARTITION BY p ORDER BY t RANGE BETWEEN 5 PRECEDING AND 1 PRECEDING)

5. optimalizace agregací fce slope je tvořena fcemi count() a sum() a tedy spadá do kategorie algebraických agregací, které lze takto přepsat obecně lze použít pokud: formula není samo cyklická 1 dim. agr. fce definuje okno relativní k cv() a ostatní dim. jsou kvalifikovány hodnotami z cv()

6. Opt. kvalifikovaných agregací agregace adresovaná přes diskrétní dimenzi (1<i<6) lze nahradit přímým přístupem ({2,3,4,5}) 1. přístup vyžaduje plný scan existenční agregace 2. přístup vyžaduje málo náhodných přístupů kvalifikovaná agregace struktury jsou optimalizované pro náhodný přístup Efektivita:

Příklad SPREADSHEET DBY(p,t) MEA(s,0 mavg) ( mavg[ dvd,for t FROM 2000 TO 2001]= 1.05*AVG(s)[cv(),cv()-3<=t<=cv()-1] ) mavg[ dvd,for t FROM 2000 TO 2001]= 1.05*AVG(s)[cv(),FOR t FROM cv()-3 TO cv()-1 INCREMENT 1]

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

Tvorba datové struktury mapování řádků do vícedimenzionální struktury podpora: náhodný přístup, efektivní přidávání 2úrovňová hashovací struktura hash partition na základě PBY sloupců 2. úroveň na základě PBY&DBY sloupců efektivní vyhodnocení, minimalizace paměti velikost podle ohraničujícího obdélníku a dostupné paměti (dvojnásobek) kolize vytváření řetězců

Datová struktura (2) disková hash cache při nedostatku paměti minimalizace počtu zápisů na disk (LRU, dirty flagy,...) podporované operace probe, update, upsert, insert, scans (podle DBY)

Vykonávání 3 algoritmy

Auto-acyklický alg. Pro acyklické dotazy (nebo jejich části) Procházení podle úrovní (dependency graph) pro každou partition (PBY) a úroveň pro každý záznam: spočítej agregaci (1 scan) vyhodnoť jednoduché (bez existenčních podm. vlevo) formule (žádný scan) pro každý záznam (scan) najdi existeční formule (EF) pro daný záznam pro každý záznam (scan) a spočítej každou agregaci z EF vyhodnoť EF

Auto-cyklický alg. pro formule s cykly nebo mají příliš komplexní predikáty 1. vytvoření silně souvislých komponent podle grafu závislostí 2. nessc formule vyhodnoť jako acyklické 3. formule v SSC vyhodnoť max. Nkrát při konvergenci se zastaví N = počet buňek upserted nebo updated v 1. iteraci acykl. graf zkonverguje po max. N iteracích nejhorší případ: formule jsou v opačném pořadí jinak cykl. graf ohlásí chybu

Sekvenční alg. Formule jsou vyhodnovány podle daného pořadí Obdoba auto-acyclic alg. Paralelizace Možnost paralelizace dotazů podle PBY

Agenda Úvod, OLAP, Spreadsheet Rozšíření jazyka SQL pro spreadsheety Parametrizace Implementace Analýza a optimalizace dotazu Datová struktura, vyhodnocení Výkonnost

hash-join vs.sql spreadsheet Data: 4 dimenzionální kostka, přes 22M řádků

Závěr, dotazy