4. Das Preference SQL - System file© Prof. Kießling 2016 4 - 7 Auswertungsreihenfolge 1. R := R1 x...
Transcript of 4. Das Preference SQL - System file© Prof. Kießling 2016 4 - 7 Auswertungsreihenfolge 1. R := R1 x...
© Prof. Kießling 2016 4 - 1
4. Das Preference SQL - System
4.1 Preference SQL Middleware
4.2 Preference SQL Syntax
4.2.1 Präferenz-Konstruktoren
4.2.2 Qualitätsfunktionen für Bewertung
4.2.3 Top-k Schnittstelle zum Auffüllen
4.2.4 BUT ONLY als Nachfilter
4.3 Anwendungsbeispiele
4.4 Erweiterung um GROUPING
© Prof. Kießling 2016 4 - 2
4.1 Preference SQL Middleware
SQL-DB:Oracle,
PostgreSQL,…
Preference SQL-Implementierung
Java-Applikationoder SQL-Client
Client
Pre
fere
nce
SQ
L-
JDB
C-T
reib
er
Server
Mitarbeit bei Preference SQL in jeder Form erwünscht!
JDB
C-T
reib
er
© Prof. Kießling 2016 4 - 3
Beispiel: DbVisualizer als (P)SQL-Client
© Prof. Kießling 2016 4 - 4
Benötigte Daten für Treiber-Konfiguration:
Preference SQL-JDBC-Treiber:
PreferenceSQLJDBCClient.jar (per Download von Homepage)Driver:
psql.connector.client.PSQLDriver
URL:
jdbc:psql://[email protected]::
jdbc:oracle:thin:@localhost:1521:db
Login: Näheres dazu auf Übungsblatt
© Prof. Kießling 2016 4 - 5
4.2 Preference SQL Syntax
Vorbemerkungen:
Preference SQL = Standard SQL + Präferenzen
Per Default verwendet Preference SQL reguläre SV-Semantik.
Bei jeder numerischer Präferenz ist der d-Parameter (im Folgenden d) optional.
Dokumentation findet sich unter www.trial.preferencesql.com.
© Prof. Kießling 2016 4 - 6
Preference SQL-Abfrageblock:
10. SELECT <projection_list>
1. FROM <table_references>
2. WHERE <hard_conditions>
3. - 5. PREFERRING <pref_constructor>
6. GROUP BY <attribute_list>
7. HAVING <hard_conditions>
8. ORDER BY <attribute_list>
9. LIMIT <number>;
© Prof. Kießling 2016 4 - 7
Auswertungsreihenfolge
1. R := R1 x … x Rn kartesisches Produkt
2. T1 := σH (R) H ist eine harte Bedingung auf dem kart. Produkt.
3. - 5. T4:= ...σ [P] (T1) Präferenzauswertung auf dem Ergebnis der harten
Selektion; Verfeinerung auf der nachfolgenden Folie;
6. T5 := ΓAGG (T4) Gruppierung nach Aggregationsattributen
7. T6 := σHAVING (T5) Selektion pro Gruppe durch Agg.attribut / Agg.funktion
8. T7 := SORTA (T6) Sortierung nach Attributen
9. T8 := LIMITn (T7) Begrenzung der Ergebnismenge
10. T9 := πA (T8) Projektion von Attributen, Präferenzauswertung stellt
weitere Funktionen für Projektion zur Verfügung!
© Prof. Kießling 2016 4 - 8
Bemerkungen:
In SQL gruppiert GROUP BY … HAVING die Ergebnismenge nach der harten Selektion in Partitionen, die durch die Gruppierungsattribute charakterisiert sind und den HAVING-Bedingungen genügen müssen.
In Preference SQL gruppiert GROUP BY … HAVING die BMO-Menge, die durch die Präferenzauswertung resultiert, nach den Gruppierungsattributen. Zudem gelten die HAVING-Bedingungen.
© Prof. Kießling 2016 4 - 94 - 9
Präferenz-Selektion:
3. PREFERRING <soft_conditions>
4. TOP <number>
5. BUT ONLY <but_only_conditions>
3. T2 := σ [P] (T1) Präferenzauswertung nach harter
Selektion
4. T3 := TOPk (T2) Top-k Schnittstelle, siehe später
5. T4 := σBO (T3) BO ist eine harte Bedingung (Nachfilter).
Beachte: Die gleichzeitige Verwendung von TOP K und BUT ONLY sollte semantisch durch Anwendung begründbar sein!
© Prof. Kießling 2016 4 - 10
Mit Hilfe von Basispräferenzen, die sich aufteilen in
Kategorielle Präferenzen und Numerische Präferenzen
werden induktiv komplexe Präferenzen aufgebaut.
4.2.1 Präferenz-Konstruktoren
© Prof. Kießling 2016 4 - 11
1.) LAYEREDm (A, L, SV)
Preference SQL-Syntax:
PREFERRING
<column> LAYERED ( ( (<string_literal> [, <string_literal>]* )
| OTHERS)
[, (<string_literal> [, <string_literal>]* )
|, OTHERS ]* ) [<SV-Relation>]
Zudem gilt: es darf nur ein OTHERS geben.
Beispiel:
farbe LAYERED ( ('blau', 'gelb'), ('weiß', 'schwarz'), OTHERS,
('lila', 'rosa') )
4.2.1.1 Kategorielle Basispräferenzen
© Prof. Kießling 2016 4 - 12
2.) POS/POS (A, POS1-set, POS2-set, SV)
Preference SQL-Syntax:
PREFERRING
<column> IN (<string_literal> [, <string_literal>]* )
ELSE (<string_literal> [, <string_literal>]* )
[<SV-Relation>]
Beispiele:
modell IN ('Kombi', 'Limousine') ELSE ('SUV', 'Van')
farbe IN ('blau', 'gelb') ELSE ('rot', 'grün')
© Prof. Kießling 2016 4 - 13
3.) POS (A, POS-set, SV)
Preference SQL-Syntax:PREFERRING <POS> [<SV-Relation>]<POS> ::= <column> = <string_literal> |
<column> IN (<string_literal> [, <string_literal>]* )
Beispiele:farbe IN ('gelb', 'grün', 'blau') amtsbezeichnung = 'Bundespräsident' modell = 'Kombi'
© Prof. Kießling 2016 4 - 14
4.) POS/NEG (A, POS-set, NEG-set, SV)
Preference SQL-Syntax:
PREFERRING
<column> IN (<string_literal> [, <string_literal>]* )
NOT IN (<string_literal> [, <string_literal>]* )
[<SV-Relation>]
Beispiele:
modell IN ('Kombi', 'Limousine') NOT IN ('SUV', 'Van')
farbe IN ('blau', 'gelb') NOT IN ('pink', 'rosa', 'lila')
© Prof. Kießling 2016 4 - 15
5.) NEG (A, NEG-set, SV)
Preference SQL-Syntax:PREFERRING <NEG> [<SV-Relation>]<NEG> ::=
<column> != <string_literal> <column> <> <string_literal> |
<column> NOT IN (<string_literal> [, <string_literal>]* )
Beispiele:farbe NOT IN ('gelb', 'grün', 'blau')
amtsbezeichnung <> 'Bundespräsident' modell != 'Kombi'
© Prof. Kießling 2016 4 - 16
6.) EXPLICIT (A, E-Graph)
Preference SQL-Syntax:PREFERRING <column> EXPLICIT ( <string_literal> < <string_literal> [, <string_literal> < <string_literal> ]* )
Die Implementierung sichert Zyklenfreiheit im E-Graph zu. Die Explicit-Präferenz hat keinen SV-Parameter. Es gilt triviale SV-Semantik.
Beispiel:
modell EXPLICIT ( 'LKW' < 'Van', 'Van' < 'Kombi',
'Van' < 'Limousine',
'Kombi' < 'Limousine' )
© Prof. Kießling 2016 4 - 17
Folgende Produktionen gelten für SV-Relation:<SV-Relation> ::=
∅ | // Default-SV-Relation, siehe unten
REGULAR | // Reguläre SV-Semantik
TRIVIAL | // Triviale SV-Semantik
// benutzerdefiniert
// Implementierung sichert disjunkte SV-// Mengen zu
SV ( (<string_literal> [, <string_literal>]*) [, (<string_literal> [, <string_literal> ]*) ]* )
Für SCORE und Subkonstruktoren ist reguläre SV-Semantik der Default.Für EXPLICIT (und später GROUPING) gilt triviale SV-Semantik als Default.
© Prof. Kießling 2016 4 - 18
Beispiel für benutzerdefinierte SV-Semantik:
SELECT id FROM carPREFERRING color
IN ('blue', 'yellow' , 'white') ELSE ('green', 'red' , 'pink') SV ( ('blue', 'yellow'), ('green', 'red') )AND price LOWEST;
© Prof. Kießling 2016 4 - 19
1.) SCOREd(A, f, SV)
Preference SQL-Syntax:<column> SCORE <string_literal>
[ , <number> ] [<SV-Relation>]
Beispiele:
alter SCORE 'sqrtScoreF'
preis SCORE 'preisFunktion' , 5
4.2.1.2 Numerische Basispräferenzen
© Prof. Kießling 2016 4 - 20
SCORE-Funktionen in Preference SQL:Die Definition einer SCORE-Präferenz erfolgt über CREATE [OR REPLACE] SCORE '<name>'
AS BEGIN <Java-Anweisungen> END;
Vordefinierte SCORE-Funktionen in Preference SQL:
- absScoreF : Betrag, z.B. … 'absScore'
- identityScoreF : Identität, z.B. … 'identityScoreF', 2
- negScoreF : Negation, z.B. … 'negScoreF'
- powTwoScoreF : Quadrat, z.B. … 'powTwoScoreF', 10
- powThreeScoreF : Kubik, z.B. … 'powThreeScoreF', 4
- sqrtScoreF : Quadratwurzel, z.B. … 'sqrtScoreF'Details zum Schreiben von eigenen SCORE- bzw. RANK-Funktionen
© Prof. Kießling 2016 4 - 21
2.) BETWEENd(A, [low, up], SV)
Preference SQL-Syntax:
PREFERRING <column>
BETWEEN <low>, <up> [, <number> ]
[<SV-Relation>]
Beispiele: alter BETWEEN 10, 16
preis BETWEEN 5000, 6000, 100
© Prof. Kießling 2016 4 - 22
3.) AROUNDd(A, z, SV)
Preference SQL-Syntax:
<column> AROUND <number> [, <number> ][<SV-Relation>]
Beispiele:
leistung AROUND 90
verbrauch AROUND 6.5 , 0.5
© Prof. Kießling 2016 4 - 23
4.) HIGHESTd(A, sup, SV)
Preference SQL-Syntax:
<column> HIGHEST [<number> , <number> ] [<SV-Relation>]
Das 1. <number>-Element ist das Supremum.
Das 2. <number>-Element ist der d-Parameter.
Beispiele:
leistung HIGHEST
jahresgehalt HIGHEST 100000 , 1000
© Prof. Kießling 2016 4 - 24
5.) LOWESTd(A, inf, SV)
Preference SQL-Syntax:
<column> LOWEST [<number> , <number> ] [<SV-Relation>]
Das 1. <number>-Element ist das Infimum.
Das 2. <number>-Element ist der d-Parameter.
Beispiele:
preis LOWEST
verbrauch LOWEST 2.0 , 0.5
© Prof. Kießling 2016 4 - 25
6.) MORE THANd(A, z, SV)
Preference SQL-Syntax:
<column> MORE THAN <number> [<number> ] [<SV-Relation>]
Das <number>-Element ist der d-Parameter.
Beispiele:
alter MORE THAN 18
preis MORE THAN 2000, 10
© Prof. Kießling 2016 4 - 26
7.) LESS THANd(A, z, SV)
Preference SQL-Syntax:
<column> LESS THAN <number> [<number> ] [<SV-Relation>]
Das <number>-Element ist der d-Parameter.
Beispiele:
id LESS THAN 8
preis LESS THAN 5000, 500
© Prof. Kießling 2016 4 - 27
4.2.1.3 Temporale Basispräferenzen
1.) LATESTd (A, sup, SV)
Preference SQL-Syntax:
<column> LATEST [DATE / TIME / TIMESTAMP <time>,
INTERVAL <time> ] [<SV-Relation>]
Das 1. <time>-Element ist das Supremum.
Das 2. <time>-Element ist der d-Parameter.
Beispiele:
production_date LATEST
issue_date LATEST DATE '2014-06-01', INTERVAL '1' YEAR
© Prof. Kießling 2016 4 - 28
2.) EARLIESTd (A, inf, SV)
Preference SQL-Syntax:
<column> EARLIEST [DATE / TIME / TIMESTAMP <time>,
INTERVAL <time> ] [<SV-Relation>]
Das 1. <time>-Element ist das Infimum.
Das 2. <time>-Element ist der d-Parameter.
Beispiele:
birth_date EARLIEST
issue_date EARLIEST DATE '2011-11-30', INTERVAL '0-1'
© Prof. Kießling 2016 4 - 29
3.) LATER THANd(A, z, SV)
Preference SQL-Syntax:
<column> LATER THAN DATE / TIME / TIMESTAMP <time> [INTERVAL <time> ] [<SV-Relation>]
Das <time>-Element ist der d-Parameter.
Beispiele:
production_date LATER THAN DATE '2014-03-01'
birth_date LATER THAN DATE '2000-01-01', INTERVAL '6' MONTH
© Prof. Kießling 2016 4 - 30
4.) EARLIER THANd(A, z, SV)
Preference SQL-Syntax:
<column> EARLIER THAN DATE / TIME / TIMESTAMP <time> [INTERVAL <time> ] [<SV-Relation>]
Das <time>-Element ist der d-Parameter.
Beispiele:
production_date EARLIER THAN DATE '2016-02-29'
birth_date EARLIER THAN DATE '2013-11-03', INTERVAL '0-0 30'
© Prof. Kießling 2016 4 - 31
Syntax des z-Wertes
Die unterstützten Datentypen sind:
DATE, TIME und TIMESTAMP
(TIME und TIMESTAMP ohne Zeitzone)
Syntax:
DATE 'YYYY-MM-DD'
TIME 'HH:MM[:SS[.MS]]'
TIMESTAMP 'YYYY-MM-DD HH:MM[:SS[.MS]]'
© Prof. Kießling 2016 4 - 32
Syntax des z-Wertes: Beispiele
DATE '2011-05-03'
DATE '2015-7-1'
TIME '9:30'
TIME '9:30:50'
TIME '9:30:50.942'
TIMESTAMP '2011-05-03 9:30'
© Prof. Kießling 2016 4 - 33
Syntax des d-Parameters
Vor der Eingabe des d-Parameters ist das Schlüsselwort INTERVAL erforderlich.
Syntax:
INTERVAL '[YY-MM] [DD] [HH:MM[:SS[.MS]]]'
oder
INTERVAL 'XX' QUALIFIER
(QUALIFIER ist eine der folgenden Optionen:
YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
© Prof. Kießling 2016 4 - 34
Syntax des d-Parameters: Beispiele
INTERVAL '0-1 1' für 1 Monat und 1 Tag
INTERVAL '1 0:0:0.001' für 1 Tag und 1 Millisekunde
INTERVAL '1' MONTH für 1 Monat
INTERVAL '10' SECOND für 10 Sekunden
INTERVAL '2-5 10' für 2 Jahre, 5 Monate und 10 Tage
© Prof. Kießling 2016 4 - 35
Auch alle numerischen Basispräferenzen unterstützen dieDatentypen DATE, TIME und TIMESTAMP.
Die Verwendung für temporale Attribute erfolgt durch die Eingabe eines der folgenden Schlüsselwörter: DATE, TIME oder TIMESTAMP
Beispiel:SELECT * FROM car PREFERRING production_date BETWEEN DATE '2000-07-11' , DATE '2010-08-11';
© Prof. Kießling 2016 4 - 36
4.2.1.4 Räumliche Basispräferenzen
1.) NEARBYd(A, lat, lon, SV)
Preference SQL-Syntax:
<column> NEARBY <number>,<number> [,<number> ] [<SV-Relation>]
Das 1. <number>-Element bestimmt den Längengrad, das 2. den Breitengrad.
Das 3. <number>-Element ist der d-Parameter.
Beispiele:
location NEARBY 40.123, 10.234
location NEARBY 42.246, 10.387, 1000
© Prof. Kießling 2016 4 - 37
2.) WITHINd(A, KML, SV)
Preference SQL-Syntax:
<column> WITHIN <string_literal> [,<number> ] [<SV-Relation>]
Das <string_literal> enthält eine Geometrie in KML-Darstellung.Das <number>-Element ist der d-Parameter.
Beispiele:
location WITHIN '<Polygon><outerBoundaryIs><LinearRing><coordinates>-77.0578,38.8725 -77.0546,38.8729 -77.0531,38.8705
-77.0578,38.8725</coordinates></LinearRing></outerBoundaryIs></Polygon>';
© Prof. Kießling 2016 4 - 38
3.) BUFFERd(A, KML, SV)
Preference SQL-Syntax:
<column> BUFFER <string_literal> [,<number> ] [<SV-Relation>]
Das <string_literal> enthält eine Geometrie in KML-Darstellung.Das <number>-Element ist der d-Parameter.
Beispiele:
location BUFFER '<Polygon><outerBoundaryIs><LinearRing><coordinates>-77.0578,38.8725 -77.0546,38.8729 -77.0531,38.8705
-77.0578,38.8725</coordinates></LinearRing></outerBoundaryIs></Polygon>';
© Prof. Kießling 2016 4 - 39
4.) ONROUTEd(A, KML, SV)
Preference SQL-Syntax:
<column> ONROUTE <string_literal> [,<number> ] [<SV-Relation>]
Das <string_literal> enthält eine Geometrie in KML-Darstellung.Das <number>-Element ist der d-Parameter.
Beispiele:
location ONROUTE '<LineString><coordinates> -112.2550,36.0795 -112.2549,36.0811-112.2552,36.0826
</coordinates></LineString>';
© Prof. Kießling 2016 4 - 40
Beispiele zu Preference SQL-Anfragen: (elementare Präferenzkonstruktoren)
SELECT * FROM trips
PREFERRING duration AROUND 14, 1;
SELECT * FROM apartmentsPREFERRING area HIGHEST 400, 10;
SELECT * FROM programmersPREFERRING experience IN ('java', 'C++');
SELECT * FROM hotelsPREFERRING location <> 'downtown';
© Prof. Kießling 2016 4 - 41
SELECT make, age FROM car
PREFERRING age AROUND 5, 2;
-- Gruppierung obiger BMO-Tupel nach Marke SELECT make, count(*) FROM carPREFERRING age AROUND 5, 2GROUP BY make;
-- zusätzliche Anforderung: Mindestanzahl pro GruppeSELECT make, count(*) FROM carPREFERRING age AROUND 5, 2GROUP BY makeHAVING count(*) > 2;