Zum Inhalt springen

Aufgabe 06 - IMDB Import

Zu Zen-Modus wechseln

In dieser Übung werden die echten, großen IMDB-Rohdaten analysiert, in ein PostgreSQL-Schema überführt und mit COPY importiert (siehe Kapitel 3 - Performance). An echten Datenmengen wird spürbar, warum Struktur und später Indizes zählen. Im Expertenteil kommen anspruchsvolle Analyseabfragen dazu.

  • Ein lauffähiger PostgreSQL-Server (aus der 3. Klasse).
  • Die IMDB-Datensätze von imdb.com/interfaces (TSV, tab-separiert, fehlende Werte als \N).
  • psql mit aktivierbarer Laufzeitmessung (\timing).
  • Sie analysieren die Struktur unbekannter Rohdaten.
  • Sie entwerfen ein Schema mit passenden Datentypen und Schlüsseln.
  • Sie importieren große TSV-Dateien mit COPY und kontrollieren die Vollständigkeit.
  • Sie formulieren Analyseabfragen und messen ihre Laufzeit.
  • Reproduktion: Daten herunterladen und sichten (Teil A).
  • Reorganisation und Transfer: ein Schema entwerfen und befüllen (Teile B und C).
  • Reflexion, Problemlösung und Urteilsbildung: anspruchsvolle Auswertungen entwickeln und messen (Teil D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.

  1. Die IMDB-Dateien herunterladen und entpacken.
  2. Von jeder Datei (z. B. name.basics.tsv, title.basics.tsv, title.ratings.tsv, title.principals.tsv) die ersten 10 Zeilen betrachten und Struktur, Format und Besonderheiten (Trennzeichen, \N für fehlende Werte, Mehrfachwerte in einer Spalte) beschreiben.
  1. Eine Datenbank imdb anlegen und Tabellen entwerfen, die die Dateien widerspiegeln, mit passenden Datentypen (INTEGER, BOOLEAN, TEXT, REAL) und sinnvollen Primär- und Fremdschlüsseln (z. B. tconst, nconst).
  1. Die TSV-Dateien mit COPY bzw. \copy importieren (DELIMITER E'\t', NULL '\N'). Die Anzahl importierter Zeilen mit der Zeilenzahl der Quelldateien vergleichen, damit keine Datensätze fehlen.
  2. \timing on aktivieren und die Laufzeit dieser Abfragen messen: Wie viele Produktionen gibt es? Wie viele Personen? Welche Tätigkeitskategorien gibt es in title_principals? Wie viele Filme haben mehr als 100.000 Wertungen?

Teil D - Expertenteil: Anspruchsvolle Analysen und die Kostenfrage

Abschnitt betitelt „Teil D - Expertenteil: Anspruchsvolle Analysen und die Kostenfrage“
  1. Bestenlisten: Die 10 besten Produktionen aller Zeiten (mit mehr als 100.000 Wertungen) samt Produktionsjahr; danach die 10 besten Filme (titleType = 'movie') mit mehr als 100.000 Wertungen, und wie viele davon nach dem Jahr 2000 entstanden sind.
  2. Person über den Namen finden: Eine Lieblingsschauspielerin oder einen Lieblingsschauspieler über den Namen (nicht über die ID) suchen und die Laufzeit messen. Dann alle Produktionen dieser Person über title_principals samt Kategorie ermitteln, ebenfalls mit Laufzeitmessung.
  3. Tätigkeit über die Zeit: Eine Liste erstellen, die je Jahr die Anzahl der Titel und die Summe der Minuten zeigt, in denen diese Person als Schauspieler mitgewirkt hat (wann war sie am fleißigsten?). Zusätzlich die verschiedenen Tätigkeiten dieser Person zählen (Schauspieler, Regie, Produktion …).
  4. Kostenfrage: Notieren Sie, welche dieser Abfragen spürbar langsam sind. Begründen Sie in vier bis fünf Sätzen, warum (etwa: Suche über den Namen ohne Index, Joins über Millionen Zeilen), und nennen Sie für mindestens drei Abfragen die Spalten, die man indizieren müsste. Diese Analyse ist die Vorbereitung für Aufgabe 07.
  1. Wie liest COPY eine tab-separierte Datei mit \N für fehlende Werte ein?
  2. Woran erkennt man nach dem Import, dass keine Zeilen verloren gingen?
  3. Warum ist die Suche einer Person über den Namen ohne Index langsam?
  4. Welche Spalten sind typische Kandidaten für einen Index in den IMDB-Daten?
  5. Wozu dient \timing in psql?
  • Eine Dokumentation mit der Datenanalyse, dem SQL-Schema, allen Abfragen, den Import-Ausgaben (Zeilenzahlen) und den gemessenen Laufzeiten samt der Kostenanalyse aus Teil D.

HTL Villach, 2025-2026,
https://www.htl-villach.at