Im zweiten Teil der Artikelreihe zum Thema Filmdatenbank wollen wir einen genaueren Blick auf die zu importierenden Daten der Filmdatenbank IMDB werfen. Diese kann man als Archive aus dem Internet herunterladen und dann als Textdateien entpacken. In diesem Artikel schauen wir uns an, wie die Daten aus den Textdateien aufgebaut sind und wie wir diese in die Tabellen unseres Datenmodells importieren können.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 2005_Filmdatenbank.accdb.
Download der Beispieldaten
Die Beispieldaten finden Sie unter dem folgenden Link:
https://datasets.imdbws.com/
Die dort enthaltenen Dateien laden wir zunächst auf unseren lokalen Rechner herunter. Dann entpacken wir diese. Leider haben alle Dateien in den .gz-Archiven den Dateinamen data.tsv.
Daher müssen wir diese nach dem Entpacken Stück für Stück umbenennen. Wir wählen als Dateinamen den Namen der Archivdatei und ersetzen nur die Dateiendung .tsv.gz durch .txt.
Danach sieht unser Verzeichnis mit den zu importierenden Textdateien wie in Bild 1 aus. Hier ist unschwer zu erkennen, dass wir es mit enormen Datenmengen zu tun haben – die größte Datei ist 1,8 GB groß. Eine Access-Datenbank darf maximal 2 GB groß sein.
Bild 1: Textdateien mit den zu importierenden Daten
Wer nun denkt, dass wir diese Datenmengen unmöglich in eine Access-Datenbank importieren können, könnte Recht haben – aber die Dateien enthalten sehr viele redundante Daten, deren Platzbedarf wir gegebenenfalls durch Anlegen von Lookuptabellen und Fremdschlüsselfeldern verringern können.
Als Nächstes schauen wir uns den Inhalt der einzelnen Dateien an.
Basisdaten der Filme
Die in title.basics.tsv.gz enthaltene Datei, die wir in title.basics.txt umbenannt haben, liefert die Basisdaten zu den Filmen. Dazu gehören unter anderen der Filmtyp, der primäre Titel, der Originaltitel, das Startjahr, die Dauer und eine kommaseparierte Liste der Genres.
Die Daten sind als Liste mit je einem Eintrag pro Zeile und in Spalten, die durch das Tabulator-Zeichen getrennt sind, gespeichert (siehe Bild 2).
Bild 2: Basisdaten der Filme
Basisdaten in der Datenbank verfügbar machen
Das heißt, dass wir diese Dateien in der Datenbank als verknüpfte Tabelle verfügbar machen können, was wir auch direkt erledigen. Dazu wählen Sie in Access den Ribbon-Befehl Externe Daten|Neue Datenquelle|Aus Datei|Textdatei aus.
Im nun erscheinenden Dialog Externe Daten – Textdatei wählen Sie den Dateinamen der zu verknüpfenden Textdatei aus. Dann selektieren Sie die Option Erstellen Sie eine Verknüpfung zur Datenquelle, in dem Sie eine verknüpfte Tabelle erstellen.
Nach einem Klick auf die Schaltfläche OK erscheint der Dialog Textverknüpfungs-Assistent. Hier klicken Sie auf der ersten Seite auf Weiter. Auf der zweiten Seite stellen Sie sicher, dass als Trennzeichen Tabulatorzeichen ausgewählt ist. Außerdem aktivieren Sie die Option Erste Zeile enthält Feldnamen (siehe Bild 3).
Bild 3: Textdatei verknüpfen
Im nächsten Schritt könnten wir noch die Feldnamen anpassen. Da wir die Daten nur temporär benötigen, wollen wir hier keine Änderungen vornehmen und klicken auf Weiter. Im letzten Schritt ist noch der Name der verknüpften Tabelle festzulegen. Hier legen wir entsprechend dem Dateinamen den Namen tblTitleBasics fest.
Danach wird die Verknüpfung hergestellt. Wenn Sie die Verknüpfung durch einen Doppelklick auf den Eintrag tblTitleBasics öffnen, erscheint die Tabelle aus Bild 4.
Bild 4: Basisdaten der Filme in einer verknüpften Tabelle
Darsteller und andere Personen
Die zweite Datei heißt nach dem Entpacken und Umbenennen name.basics.txt. Sie enthält die Daten wie in Bild 5. Dabei handelt es sich um die Personen des Filmbusiness, die verschiedene Aufgaben ausführen. Die Datei enthält einen eindeutigen Identifizierer, den Namen, Geburts- und Todesjahr sowie zwei kommaseparierte Listen. Die erste enthält die ausgeführten Aufgaben wie soundtrack, actor, actress, writer, director und so weiter. Die zweite enthält die eindeutigen Identifizierer der Filmtitel aus der Datei title.basics.txt, für welche die jeweilige Person bekannt ist.
Bild 5: Die Datei name.basics.txt mit den Darstellern
Diese Datei binden wir genau wie die erste als verknüpfte Tabelle ein und nennen diese tblTitleBasics.
Filmbezeichnungen in verschiedenen Ländern
Die Datei title.akas.txt enthält Informationen darüber, wie die Filme in anderen Ländern heißen (akas steht für as known as). Je nach Bekanntheit des Films gibt es einige wenige bis zu über 100 verschiedene Bezeichnungen in den verschiedenen Sprachen. Die Datei ist so aufgebaut, dass in der ersten Spalte der eindeutige Identifizierer des Films aus der Datei title.basics.txt genannt wird. Die zweite enthält die Nummer der Übersetzung, die dritte den Titel in der jeweiligen Sprache. Danach folgt das Kürzel für die Region, gefolgt von der Sprache. Diese Datei verknüpfen wir unter dem Namen tblTitleAkas.
Tipp: Wenn Sie die Datei als Verknüpfung in der Datenbank verfügbar gemacht haben, versuchen Sie nicht, darin zu suchen oder die Daten zu sortieren. Bei über 24 Millionen Datensätzen blockiert das die Anwendung für längere Zeit. Besser, Sie öffnen die Verknüpfungen mit den sehr großen Dateien erst gar nicht …
Regisseure und Autoren
Die Datei title.crew.txt enthält die Regisseure und Autoren eines Films. Die Datei enthält in der ersten Spalte wieder den eindeutigen Identifizierer für den Film. Die zweite Spalte enthält eine kommaseparierte Liste mit dem oder den Regisseuren.
Die dritte schließlich liefert die Autoren. Wenn kein Autor vorhanden ist, wird dies durch die Zeichenkette \N dargestellt (siehe Bild 6).
Bild 6: Regisseure und Autoren
Serienepisoden
Die Datei title.episode.txt enthält die Zuordnungen von Serienepisoden zu den jeweiligen Titeln. Titel und Episoden werden beide als Einträge der zuerst beschriebenen Datei title.basics.txt geführt.
Die Datei title.episode.txt enthält in der ersten Spalte den eindeutigen Identifizierer der Episode und in der zweiten den des übergeordneten Serienelements. Danach folgen die Nummern der Staffel sowie der Episode (siehe Bild 7).
Bild 7: Zuordnung von Episoden zu Serien
Zuteilung von Personen zu Filmen
Die Datei title.principals.txt enthält die Zuordnung der Personen aus der Datei title.crew.txt zu den Filmen aus title.basics.txt.
Dabei nimmt die erste Spalte den Film auf, die zweite die Reihenfolge, die dritte den Namen der Person und die vierte die Aufgabe, also beispielsweise director, composer oder actor (siehe Bild 8).
Bild 8: Zuordnung von Personen mit Aufgabe zu den Filmen
Bewertungen der Filme
Die letzte Datei heißt nach dem Entpacken und Umbenennen title.ratings.txt und enthält die durchschnittliche Bewertung inklusive der Anzahl der Benutzer, aufgrund derer die Bewertung zustande gekommen ist (siehe Bild 9).
Bild 9: Bewertungen der Filme
Grundlegendes zum Import der Daten
Der Datenexport der IMDB-Filmdatenbank bietet eine sehr praktische Eigenschaft: Die Verknüpfung zwischen den verschiedenen Daten ist bereits enthalten beziehungsweise die wichtigsten Elemente wie Filme, Personen et cetera weisen bereits eine Art Primärschlüssel auf. Dieser wird sogar von anderen Dateien als Fremdschlüssel verwendet. So finden wir in der Datei title.basics.txt eindeutige Werte wie tt000001.
In der Datei title.principals.txt finden wir diese Werte in der Spalte tconst wieder. Diese enthalten eindeutige Daten in der Spalte nconst, wie zum Beispiel nm1588970. Diese Werte können wir, wenn wir die führenden Buchstaben wie tt oder nm entfernen, direkt als Primärschlüsselwerte nutzen und per INSERT INTO-Abfrage in die Zieltabellen schreiben.
Filme importieren
Die Tabelle tblTitleBasics mit den Originalfilmen können wir fast 1:1 in die Zieltabelle tblFilme übernehmen. Die einzigen Daten, die wir aus tblTitleBasics benötigen und die nicht in der Tabelle tblFilme landen sollen, sind die Genres. Diese werden wir im Anschluss einzeln behandeln.
Die Daten aus der verknüpften Textdatei tblTitleBasics schreiben wir mit der INSERT INTO-Abfrage aus Bild 10 in die Tabelle tblFilme. Dazu erstellen Sie eine Auswahlabfrage auf Basis der Tabelle tblTitleBasics und ändern Sie danach den Typ zu Anfügeabfrage. Wählen Sie die Tabelle tblFilme als Ziel aus und bestimmen Sie die Zielfelder wie in der Zeile Anfügen an dargestellt. Für die Werte der ersten Spalte ersetzen wir die Buchstaben tt durch eine leere Zeichenkette, damit nur der reine ID-Wert im Primärschlüsselfeld landet. Die beiden Felder startYear und runtimeMinutes können in der Textdatei den Wert \N enthalten. Diesen ersetzen wir gegebenenfalls per Replace durch den Wert 0.
Bild 10: INSERT INTO-Abfrage zum Füllen der Tabelle tblFilme
Genres importieren und zuweisen
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: