Übung: Data Warehousing und Data Mining

Werbung
Übung:
Data Warehousing und Data Mining
Sebastian Wandelt
20. Oktober 2011
[email protected]
Überblick
• Organisatorisches
• Kurze Einführung
– JDBC
– PL/SQL
• 1. Aufgabenblatt
Ablauf des Semesters
• 7 Pflichttermine (neue Aufgabe/Lösung)
– Heute
– 44./45. KW: 03./10.11.2011
– 46./47. KW: 17./24.11.2011
– 49. KW: 08.12.2011
– 01. KW: 05.01.2012
– 04. KW: 26.01.2012
– 07. KW: 16.02.2012 (Siegerehrung)
• Alle anderen Termine sind fakultativ
Ablauf eines Pflichttermins
• Vorstellung der Lösungen durch jede Gruppe
(eine Präsentation 5-10 Minuten)
– Im Laufe des Semesters muss jeder Student
mindestens einmal vortragen!
– Wer: vorher überlegen!
• Neues Aufgabenblatt plus eventuelle
Lösungshinweise
Gruppenbildung
• Eine Gruppe mit 2-3 Personen
• Per Mail schicken
– Matrikelnummer und Namen der Studenten
– Alle Mailadressen
– Ansprechpartner
• Jede Gruppe bekommt einen Account für die
Oracle-Instanz auf
– delphi.informatik.hu-berlin.de
– Passwort bekommt die Gruppe per Mail (testen!)
– VPN benutzen
Die Aufgaben / Wettbewerb
• Insgesamt gibt es 6 Aufgaben zu lösen
– 4 der Aufgaben sind als Wettbewerb konzipiert
(Aufgaben 2, 4, 5 und 6)
– Es gibt (parallel zu den Scheinpunkten) Punkte für
die schnellste und effizienteste Lösung
• Die beste Gruppe bekommt am Ende ein
kleines Präsent
Kriterien für die Prüfung
• Alle Aufgaben (durch die Gruppe) bearbeitet
• Für jede Aufgabe mindestens 50% der Punkte
• (Mindestens) eine Lösung vorgetragen
=> Anmeldung zur mündlichen Prüfung
Terminfindung…
• Alternativer Übungstermin
– (Vermutlich) an Stelle von Donnerstag 13 bis 15
Uhr
• Constraints
– Montag - Donnerstag
– 7 bis 13 Uhr
– Raum muss verfügbar sein(!)
Datenbankzugriff
• Alternativen
– Alles in Java machen
• JDBC Treiber von Oracle herunterladen
• Java programmieren
– Java-basierte GUI verwenden (z.B. Aquafold)
• JDBC Treiber von Oracle herunterladen
• Anwendung installieren
– Tool benutzen, die den Oracle Client verwenden (z.B.
SQL*PLUS, Toad, TORA, …)
• Oracle Client herunterladen (Oracle Technology Network)
– Ca. 650 MB
• Installieren
• Dann Tool installieren
Verbindungsdaten
•
•
•
•
Server: delphi.informatik.hu-berlin.de
Port 1522
Instanz: orcl10
Typischer Connect-String
– delphi.informatik.hu-berlin.de:1522: orcl10
• Für lokalen Oracle-Client
– Tnsnames.ora abändern
– Eintrag:
DWH =
(DESCRIPTION =
( ADDRESS = (PROTOCOL = TCP)(HOST =
delphi.informatik.hu-berlin.de)(PORT= 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl10)
)
)
Zum Entwicklen / Testen
• Lokale Installation von
– Oracle 10g / 11g Express Edition
JDBC - kompakt
JDBC - Idee
JDBC - Konzepte
• DB-spezifischer JDBC-Treiber: DriverManager
– Verbindung zur DB: Interface Connection
– Anfragen formulieren: Statement
– Ergebnisse auswerten: ResultSet
– Metadaten über die DB
JDBC – Verbindung zu Oracle
//classpath um JDBC-Bibliotheken ergänzen
DriverManager.registerDriver(oracle.jdbc.OracleDriver());
server= „delphi.informatik.hu-berlin.de:1522:orcl10“;
Connection con = DriverManager.getConnection(
„jdbc:oracle:thin:@“+server, "gruppename", "kennwort");
JDBC – Statements
• Sind gewöhnliche SQL-Statements, die JDBC an die DB
weiterleitet
– erzeugt wird ein Statement über das Interface Connection
– Statement stmt=con.createStatement();
JDBC – Statements – Beispiele
stmt.execute(
"CREATE TABLE coworkers(c_idint, namevarchar(25))"
);
stmt.execute(
"INSERT INTO coworkers VALUES (1, 'Herbert')“
);
stmt.close(); //nicht vergessen!
JDBC – Anfragen
• Ausführung von Statement.executeQuery();
– Erzeugt einObjekt mit Interface ResultSet
ResultSetresult=stmt.executeQuery(
"SELECT c_id, name FROM coworkersORDER BY c_id)“
);
• ResultSet speichert einen internen „aktuellen“ Pointer auf die
Ergebnisliste
– Buffergöße!
– Ergebnisse werden tupelweise durchlaufen über
result.next();
• Bereits das erste Tupel bedarf des vorherigen Aufrufs von result.next();
• Aufruf liefert true, wenn weitere Tupel vorhanden; sonst false
JDBC – ResultSet
• Über die Methoden
– ResultSet.getXXX("<attrib>")
– also getString(), getInt(), …
stmt.executeQuery("SELECTc_id,name..
while(result.next())
{
intc_id= result.getInt("c_id");
String name= result.getString("name");
…
}
• Man muss also den Datentypen der Spalte kennen
– Zugriff möglich über Metadaten (über ResultSet erhältlich)
JDBC – PreparedStatements
•
Normale SELECT Statements werden in der DB jedes Mal neu geparst, optimiert und
kompliert
–
–
Bei mehrfacher Ausführung eines Statements mit nur geänderten Parametern ist das ineffektiv
Besser: Anstelle von Statement …
PreparedStatement pstmt=con.prepareStatement(
"INSERT INTO coworkers (c_id, name) VALUES (?, ?)“);
{LOOP}
// preparetuples:
pstmt.setInt(1, anInt);
string as 2nd attribute:
pstmt.setString(2, aString);
// executepreparedstatement
pstmt.execute();
{POOL}
pstmt.close();
JDBC –Exceptions
• JDBC Methoden können SQLExceptionwerfen
– Abfangen!
• Beispiele
– "Geschlossene Anweisung”
• Wo? Statement.execute()
• Was? Es wird auf ein Instanz von Statement zugegriffen, die zuvor
mit Statement.close() geschlossen wurde
– "ORA-00001: Verstoß gegen Eindeutigkeit"
• Wo? Statement.execute("INSERT..");
• Was? Einfügen bereits vorhandener Werte in eine Spalte (unique)
JDBC - Quellen
• Google
• http://www.jdbc-tutorial.com/
• http://www.oracle.com/technetwork/databas
e/enterprise-edition/jdbc-112010090769.html
PL/SQL - kompakt
• Oracle-eigeneProgrammiersprache mit enger Integration in SQL
• Sämtliche prozeduralen Konzepte sind verfügbar: Funktionen/ Prozeduren,
Abfragen/bedingte Ausführung, Schleifen, etc.
• Wird verwendet für SQL Funktionen, Trigger, Stored-Procedures, etc.
• Code wird in der Datenbank, uUwährend der Ausführung einer SQLAnfrage ausgeführt
– Keine Benutzerschnittstellen
– Keine Ausgabe auf Bildschirm etc.
– Logging ist gar nicht so einfach (Transaktionen)
• Alternative: Java in der Datenbank
– Oder SQLJ
PL/SQL - Programme
DECLARE
.. /* Variablen-&Typdeklarationen */
BEGIN
.. /* Programmcode, Funktionen .. */
EXCEPTION
.. /* Exception-Handling*/
END;
PL/SQL - Beispiel
DECLARE
cntnumber;
BEGIN
SELECT count(*) INTO cntFROM USER_TABLES;
cnt:= cnt*10;
INSERT INTO mytabelleVALUES (cnt,‘constant‘);
END;
PL/SQL - Variablen
• Alle von Oracle unterstützen Typen + NUMBER, BOOLEAN
• Ermittlung zur Compilezeitmöglich
DECLARE
name VARCHAR(20);
gruppe NUMBER;
…
PL/SQL - Sonstiges
• Kontrollflüsse
– Bedingungen, Schleifen, Ausnahmen, ….
• Kompilieren von Programmen
– CREATE OR REPLACE PROCEDURE myproc IS …
– EXEC myproc;
PL/SQL – EXPLAIN PLAN
EXPLAIN PLAN (FOR)
SELECT * FROM user_tables;
• Parst und optimiert die Query, ohne sie auszuführen
• Speichert die Abfolge sämtlicher gewählter Operationen in
einer Tabelle ab
–
–
–
–
–
Referenzierte Tabellen
Verwendete Zugriffsmethoden
Join-Methode
Geschätzte Kosten
…
• Pläne können durch externe Tools angezeigt werden
Zusammenfassung
• Bis nächsten Montag:
– Feste Übungstermine
– Übungsgruppenfestlegung (per Mail)
• Dienstag:
– Zusenden der Zugangsdaten
Fragen, Anregungen?
Herunterladen