‘Multiple tables’ opslag: een afslankkuur voor data extracten in Tableau

In Tableau heb je de mogelijkheid om een live connectie op te zetten naar je data of een extract te maken van je data. Een extract is in feite een kopie van de data die geoptimaliseerd is voor gebruik in Tableau. Sinds Tableau het hyper extract-formaat heeft geïntroduceerd, hebben we allemaal ervaren dat zowel het maken van een extract sneller gaat als het bevragen ervan. Dit in vergelijking met het vorige type extract (tde). Het was al zo dat wanneer meerdere databronnen worden samengevoegd (joinen), Tableau er één extract-bestand van maakt. Dit kan voor problemen zorgen wanneer er grote tabellen met elkaar worden gejoind. Er ontstaan dan zoveel rijen data dat het aanmaken van het extract te lang duurt en het extract te groot wordt. Daarom heeft Tableau onlangs een nieuwe oplossing geïntroduceerd om deze problemen te verhelpen. In deze blog wordt hier verder op ingegaan.

Hoe werkt het?

Op het moment dat het extract uit meerdere databronnen bestaat en één of meerdere joins zijn gelegd tussen deze databronnen, is dit bij bepaalde type joins van invloed op de grootte van dit extract. Het kan gebeuren dat deze grootte behoorlijk toeneemt. Denk bijvoorbeeld aan Row-level security situaties, waarbij één rij voor elke gebruiker(sgroep) in het extract wordt opgenomen. Daardoor duurt het aanmaken van het extract langer. Tableau heeft daarom sinds versie 2018.3 de optie ‘Multiple tables’ toegevoegd als opslagmethode voor extracten. Dit zorgt ervoor dat de zojuist genoemde nadelen worden aangepakt.

Voorheen kon er in Tableau geen keuze gemaakt worden voor het type dataopslag in het extract, standaard was dit een ‘Single table’ extract. Dit zorgt ervoor dat Tableau achter de schermen de verschillende tabellen combineert tot één groot databestand (‘extract’), ongeacht het aantal tabellen die worden gejoined. Als dit grote tabellen zijn, kan het joinen leiden tot grote extracten door het hoge aantal rijen en kolommen. Door deze nieuwe opslagfunctie te gebruiken, kan dit voorkomen worden. De tabellen worden dan afzonderlijk opgeslagen, maar net als voorheen nog steeds in één extractbestand. Op deze manier wordt de genormaliseerde datastructuur behouden en wordt er niks van tevoren gejoined. Kortom, dit zorgt voor kleinere extractgroottes en het sneller aanmaken en verversen van extracten.

Waar vind ik deze optie in Tableau?

Om gebruik te maken van deze ‘Multiple tables’ optie, dien je het volgende uit te voeren: maak een connectie naar je data en zorg ervoor dat je twee of meerdere tabellen joint. Vervolgens maak je het extract aan (op de tab ‘Data Source’ klik je rechtsboven Extract aan. Klik vervolgens op ‘Edit’ om het optievenster te zien en hier vervolgens te kiezen voor ‘Multiple tables’. In de screenshots zie je hoe dit optievenster is veranderd sinds versie 2018.3.

Controleer of het is gelukt: klik met rechts op de ge-extracte databron links bovenin (nadat het extract is opgeslagen). Navigeer in dit uitgeklapte menu naar Extract -> Properties. In dit geopende ‘Extract Properties’ venster zie je achter ‘Data Storage’ de volgende waarde staan: ‘Multiple tables’.

Wanneer toe te passen?

Tableau zet de opslagmethode standaard op ‘Single table’, maar als gebruiker ben je uiteraard vrij om te kiezen. Het verschilt per scenario wanneer welke methode de beste uitkomsten geeft in termen van bestandsgrootte en snelheid. Het is doorgaans aan te raden om te kiezen voor de ‘Multiple tables’ opslagmethode, wanneer het aantal datarijen na de join hoger is dan de som van het aantal datarijen van de oorspronkelijke tabellen. Een goed voorbeeld is een Row-level security scenario waarbij er joins plaatsvinden tussen feitentabellen en entitlement tabellen. Dit zijn vaak one-to-many joins, wat inhoudt dat één regel uit een feitentabel door meerdere personen gezien mag worden. Wanneer een join vooraf plaatsvindt, dan blaast het aantal rijen in je eindtabel erg op. Dit zorgt vervolgens voor een toegenomen extractgrootte. Daarom is een extract met ‘Multiple tables’ als opslagmethode waardevol in combinatie met Row-level security: het aantal rijen explodeert niet.

Bij de ‘Single table’ opslagmethode vindt de join al plaats tijdens het aanmaken van het extractbestand, dit duurt daarom ook langer. Bij de ‘Multiple tables’ opslagmethode gebeurt dit proces niet bij het aanmaken van het extract, zodat het extractbestand een stuk sneller is gemaakt. In feite worden de tabellen alleen nog maar gekopieerd en niet gecombineerd. Wel is het zo dat de join nog uitgevoerd moet worden door de data engine van Tableau op het moment dat een gebruiker om een visualisatie vraagt. Dit kan weer trager zijn dan de situatie van een ‘Single table’ opslagmethode. Des te meer data, des te meer deze snelheidsverschillen zullen opvallen. Het is dus aan te bevelen om beide methoden te testen om te ontdekken wat het beste werkt in jouw situatie wat betreft snelheid en bestandsgrootte. Helaas zijn er ook nog een aantal beperkingen aanwezig bij de ‘Multiple tables’ opslagmethode. Deze zal ik nu opsommen.

Beperkingen

De grootste beperkingen op dit moment zijn het niet kunnen uitvoeren van een incrementele refresh en de toepassing van extractfilters. Deze beperkingen zijn zichtbaar op het moment dat je kiest voor ‘Multiple tables’; een aantal opties worden dan grijs en zijn niet selecteerbaar in het menu. Tableau geeft aan dat ze deze beperkingen in de toekomst nog willen aanpakken. Verder zijn de volgende opties ook niet selecteerbaar die wel mogelijk zijn bij de ‘Single table’ opslag: top-N, sampling en aggregatie. Doorgaans zullen de meeste van deze opties in de praktijk niet vaak toegepast worden, zodat we het als kleine beperkingen kunnen zien. Mocht je toch de data willen verkleinen, dan zal je de data moeten filteren voordat het in Tableau gaat. Dit kan door in plaats van te verbinden met een database tabel, te verbinden met de data middels custom SQL waarbij gefilterd kan worden. Een tweede mogelijkheid is om een database view te definiëren die de noodzakelijke data bevat voor het extract en vervolgens hiermee te verbinden vanuit Tableau (hiervoor heb je wel schrijf-toegang nodig op de database).

De praktijk

Test 1: In Tableau heb ik een connectie gemaakt met de meegeleverde Superstore dataset. Deze bestaat uit een aantal tabellen, waaronder Orders en People. De Orders tabel bevat 9.994 datarijen en de People tabel bevat standaard 4 datarijen. Ik heb dit aangepast voor dit voorbeeld naar 16 datarijen (4 personen behorend tot één van de 4 regio’s). Wanneer ik deze tabellen met elkaar join d.m.v. een inner join op het veld ‘Region’, krijgen we een nieuwe tabel met 39.976 datarijen. Dit komt doordat het aantal rijen uit de orders tabel (9.994) wordt vermenigvuldigd met 4 verschillende mensen uit de People tabel. Vervolgens sla ik dit 2x op als een extract. Hierbij test ik beide opslagvarianten, de ‘Single table’ en ‘Multiple tables’ variant, om te kijken of de extracten daadwerkelijk verschillen in grootte. De ‘Single table’ variant geeft een bestandsgrootte van 1.152 kb en de ‘Multi tables’ variant een grootte van 960 kb: dit is inderdaad kleiner (-16,7%).

Test 2: Echter duurde het aanmaken van beide type extracten ongeveer even lang, beide waren namelijk al binnen een seconde klaar. Daarom test ik het nog een keer, maar dan met een grotere dataset. Ik gebruik hiervoor een dataset met parkeerboetes in New York uit 2016. Deze dataset (csv) bevat 10.626.899 datarijen. Uit de dataset blijkt dat er 17 verschillende instanties parkeerboetes geven. Ik heb vervolgens een tabel (Excel) gemaakt met 4 verschillende personen per instantie (totaal dus 17×4=68 dataregels). Deze twee tabellen zijn daarna gejoined middels een inner join. Dit resulteert in maar liefst 42.507.596 datarijen. Eerst heb ik weer een ‘Single table’ extract aangemaakt, dit duurde op mijn computer (win10/i7-8550U/16gb) een ruime 14 minuten. De bestandsgrootte van het extract is 629mb geworden. Wanneer ik het extract aanmaak via de ‘Multiple tables’ opslagmethode, duurt het nog geen 3 minuten. Dat is al een verschil van ruim 11 minuten. De bestandsgrootte is uiteindelijk 557mb geworden; 11,4% kleiner.

Test 3: Om nog een beter beeld te krijgen, moeten we testen met nog meer data. Infotopics heeft het ‘Multiple tables’ principe al bij een klant getest en toegepast. De aanleiding hiervoor was dat het aanmaken van een ‘Single table’ extract bij deze klant langer duurt dan de tijd die in de nacht beschikbaar is. Door te kiezen voor een ‘Multiple tables’ extract, kan het dashboard toch dagelijks ververst worden. Anders had er gekozen moeten worden voor een wekelijkse verversing. De cijfers tonen aan in dit specifieke geval dat de winst in zowel doorlooptijd als bestandsgrootte enorm is:

Oplossing Aantal rijen Aantal minuten Grootte extract
Single table 308M 120 8,1GB
Multiple tables 308M 30 3,0GB

Het is echter wel opletten: wat je wint aan extract generatietijd kan je gedeeltelijk verliezen aan performance binnen Tableau. Zoals eerder aangegeven, in een ‘Single table’ extract hoeft Tableau geen join meer uit te voeren, bij een ‘Multiple tables’ extract wel, hetgeen tijd kost. Hier spelen ook zaken mee als hoe interactief je eindvisualisaties zijn en de snelheid van bijvoorbeeld hardware.

Conclusie

Samenvattend zijn dit de voor en nadelen van het gebruik van de ‘Multiple tables’ opslag:

Voordelen:

  • Kleinere extract grootte
  • Aanmaken en verversen van het extract verloopt sneller

Nadelen:

  • Opties als incrementele extract refresh en extractfilters zijn (nog) niet mogelijk
  • Mogelijk verlies van performance in Tableau

Het advies is om beide mogelijkheden te testen en als je niet weet wat de beste oplossing is voor jouw situatie, ga dan voor de standaard ‘Single table’ opslagmethode. Op deze manier heb je in elk geval niet met de eerder genoemde beperkingen te maken die (vooralsnog) aanwezig zijn. Nu is het wachten op nieuwe versies van deze functie waarbij bepaalde beperkingen worden aangepakt.

Klaar voor je volgende stap in Tableau?

Geef je dan nu op voor één van onze gratis Alteryx en Tableau introductieworkshops of meld je aan voor de Tableau Roadshow: Tableau for Enterprises.