Ü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?