Datenstruktur#

Die gegebenen Daten enthalten zusammenhängende Einträge, wie sie in einer Schule oder Universität gefunden werden könnten. Wie in Abb. 2 gezeigt, sind Personen, Kurse und benötigte sowie bezahlte Materialien dargestellt.

Es ist ersichtlich, dass viele Fremdschlüssel genutzt werden, um Verknüpfungen zwischen den Einträgen herzustellen.

structure.png

Abb. 2 Datenstruktur#

Umwandlung der Daten#

Couchbase unterstützt pro Dokument nur einen Schlüssel. Hier war es also essenziell, die richtigen Spalten aus den Quelldaten zu einem Schlüssel zusammenzufassen. Gleichzeitig mussten die Daten aus der Form eines SQL-Dumps in eine Key-Value-Form gebracht werden, wobei der Wert in unserem Fall ausschließlich Dokumente waren. Wollen wir also den folgenden Text in eine passende Form bringen, müssen wir ein entsprechendes Regex erstellen:

insert into Angebot values(1, 'G08', '13.10.2023', 'Wedel');
insert into Angebot values(2, 'G08', '24.11.2023', 'Ulm');
insert into Angebot values(1, 'G10', '01.12.2023', 'Augsburg');
insert into Angebot values(2, 'G10', '15.02.2023', 'Muenchen');
insert into Angebot values(1, 'P13', '28.05.2023', 'Augsburg');
insert into Angebot values(2, 'P13', '01.07.2023', 'Augsburg');
insert into Angebot values(1, 'I09', '27.03.2023', 'Mindelheim');
insert into Angebot values(2, 'I09', '23.04.2023', 'Muenchen');
insert into Angebot values(3, 'I09', '29.05.2023', 'Ulm');

Mithilfe des Suchmusters

insert into Angebot values\((\d+), '([^']+)', '([^']+)', '([^']+)'\);

bekommen wir die Werte aus der Tabelle in Capture-Groups. Durch das Replace-Pattern

insert into offer (KEY, VALUE) VALUES ("$1-$2", {"date": "$3", "city": "$4"});

erzeugen wir folgenden SQL+±Code, der für Couchbase verständlich ist:

insert into offer (KEY, VALUE) VALUES ("1-G08", {"date": "13.10.2023", "city": "Wedel"});
insert into offer (KEY, VALUE) VALUES ("2-G08", {"date": "24.11.2023", "city": "Ulm"});
insert into offer (KEY, VALUE) VALUES ("1-G10", {"date": "01.12.2023", "city": "Augsburg"});
insert into offer (KEY, VALUE) VALUES ("2-G10", {"date": "15.02.2023", "city": "Muenchen"});
insert into offer (KEY, VALUE) VALUES ("1-P13", {"date": "28.05.2023", "city": "Augsburg"});
insert into offer (KEY, VALUE) VALUES ("2-P13", {"date": "01.07.2023", "city": "Augsburg"});
insert into offer (KEY, VALUE) VALUES ("1-I09", {"date": "27.03.2023", "city": "Mindelheim"});
insert into offer (KEY, VALUE) VALUES ("2-I09", {"date": "23.04.2023", "city": "Muenchen"});
insert into offer (KEY, VALUE) VALUES ("3-I09", {"date": "29.05.2023", "city": "Ulm"});

Hier sollte angemerkt werden, dass es bessere Ansätze zur Konvertierung gibt. Regex würde z. B. Schwierigkeiten bekommen, sobald die Daten Anführungszeichen enthalten.

Bei größeren oder komplexeren Datenmengen würde sich eher ein Programm anbieten, welches die Daten konvertiert und einspielt. Hier ein beispielhaftes Beispiel:

def transfer_table(table):
    entries = table.get_all()
    key = f'{entries["AngNr"]-{entries["KursNr"]}}'
    couchbase.create_document(table.name, key, entries)

Import der Daten#

Die im vorhergehenden Kapitel erzeugten SQL+±Befehle können nun über die Oberfläche von Couchbase ausgeführt und damit die Collections befüllt werden.