De-Normalisierte Extrakte – endlich praktikable Row-Level-Security
- Die Extrakt-Größe kann teilweise drastisch reduziert werden
- Die Extrakt-Ladezeit kann möglicherweise stark verkürzt werden
- Die Performance kann verbessert werden
Der konzeptionelle Aufbau
Die Vorgehensweise für Row-Level-Security in Extrakten sieht folgendermaßen aus:
Üblicherweise ist es so, dass die gleiche Datenzeile von mehreren Personen gesehen werden darf, daher gibt es zwischen den Daten und der Personen-Tabelle eine 1-zu-N-Beziehung. Da Extrakte mit einer einzigen Resultat-Tabelle den Join schon ausmultiplizieren, ist die schlussendliche Tabelle deutlich „länger“ als die eigentlichen Daten, da diese mehrfach vorkommen. Das hat Auswirkungen auf die Größe des Extraktes und besonders auch die Zeit, die dieser zum Aufbau benötigt.
Die neue Funktionalität sorgt nun dafür, dass die Tabellen einzeln in der Hyper-Datenbank abgespeichert werden und dass der Join jeweils während der Abfrage ausgeführt ist. Das führt zu einer deutlich kleineren Extrakt-Datei und einer schnelleren Ladezeit.
Ein Beispiel mit Row-Level-Security
In einem durchgeführten Test hatte die Daten-Tabelle 100 Mio. Zeilen, die im .csv-Format 1,59 GB groß war. Multipliziert mit einer Personen-Tabelle von 4 Personen ergibt sich eine Zeilenanzahl von 180 Mio. Zeilen (1-zu-N).
Beim Import nach Hyper über Tableau Desktop wurde beim Einzeltabellen-Extrakt der Join ausgeführt, damit wurden alle 180 Mio. Zeilen importiert. Bei der Einstellung mit mehreren Tabellen wurden lediglich die 100 Mio. Datensätze importiert und dazu die wenigen Datensätze aus der Personentabelle. Letzteres ging deutlich schneller. Auch die fertigen Hyper-Files hatten sehr unterschiedliche Größen, die erste hat eine Größe von 429 MB, die zweite eine Größe von 297 MB.
Die Umsetzung in Tableau
Die Auswahl des Features in Tableau ist ein einfacher Klick während der Extrakterstellung. So kann in dem Pop-Up-Fenster einfach die Auswahl „Mehrere Tabellen“ gemacht werden.