In der Vergangenheit hatte ich immer wieder Bedarf an großen Datensätzen, um Datenlogistikprozesse oder eine Datenbanktechnologie für Data Vault zu testen.
Aber nicht nur bei Kunden, sondern auch um einen Blogpost vorzubereiten und zu schreiben, eine Demo oder ein Webinar durchzuführen.
Aufgrund meiner Zusammenarbeit mit EXASOL habe ich mich auf das TPC-H Tool dbgen konzentriert, um Gigabytes an Daten zu generieren und die Lese- und Schreibperformance mit Data Vault auf EXASOL zu testen.
Um meine Erfahrungen mit dem TPC-H Benchmark und dbgen bei der Generierung großer Datensätze zu teilen, habe ich diesen Blogbeitrag als Schritt-für-Schritt-Anleitung geschrieben.
Vorbereitung
Für die Erzeugung großer Datensätze wird das TPC-H Benchmark-Tool dbgen benötigt. Dieses wird auf der der TPC-Webseite zur Verfügung gestellt. Dazu muss über das Menü Downloads -> Download Programs and Specifications der Quellcode für den TPC-H Benchmark heruntergeladen werden (zur Zeit ist das die Version 3.0.1 - ein Link zum Download wird per E-Mail verschickt).
Unter Windows kann man sich die Visual Studio Community Edition herunterladen, um den Quellcode zu kompilieren und das ausführbare Programm dbgen zu erstellen.
Unter MacOS kann der mitgelieferte Kompiler clang/clang++ verwendet werden.
Die heruntergeladene Zip-Datei muss noch entpackt werden. Ich habe z.B. alle Dateien in den Ordner ./TPC-H V3.0.1/ entpackt.
Kompilierung unter Windows
Unter Windows mit Visual Studio die Projektdatei tpch.sln im Verzeichnis /TPC-H V3.0.1/dbgen/ öffnen.
Mit Build dbgen (Strg-B), siehe folgendes Bild, kann dbgen kompiliert werden.
Es wird einige Warnungen geben, aber soweit scheint alles in Ordnung zu sein. dbgen wurde erstellt und befindet sich nun im Verzeichnis ./TPC-H V3.0.1/dbgen/Debug/.
Die Datei dbgen.exe sollte aus dem Verzeichnis ./TPC-H V3.0.1/dbgen/Debug/ eine Ebene nach oben in das Verzeichnis ./TPC-H V3.0.1/dbgen/ kopiert oder verschoben werden, um Fehler beim Ausführen von dbgen zu vermeiden.
Kompilierung unter MacOS
Um dbgen unter MacOS zu kompilieren, muss die Datei makefile.suite angepasst werden. Diese befindet sich im Verzeichnis /TPC-H V3.0.1/dbgen/.
Für den Compiler clang und die Datenbank MS SQLServer habe ich die Datei wie folgt angepasst:
################
## CHANGE NAME OF ANSI COMPILER HERE
################
CC = clang
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
# SQLSERVER, SYBASE, ORACLE, VECTORWISE
# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
# SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are: TPCH
DATABASE= SQLSERVER
MACHINE = LINUX
WORKLOAD = TPCH
Um die Fehlermeldung 'malloc.h' file not found zu vermeiden, müssen noch zwei Dateien angepasst werden:
- bm_utils.c
- varsub.c
In beiden Dateien muss #include <malloc.h> in #include <sys/malloc.h> geändert werden, damit die Fehlermeldung verschwindet.
dbgen wird danach mit make -f makefile.suite kompiliert. Es gibt ein paar Warnungen, aber soweit scheint alles in Ordnung zu sein. Das Programm dbgen wurde erstellt und befindet sich nun im Verzeichnis ./TPC-H V3.0.1/dbgen/.
Test von dbgen
Zum Testen kann dbgen mit der Option -h im Terminal oder in der PowerShell im Verzeichnis ./TPC-H V3.0.1/dbgen/ ausgeführt und die dbgen-Hilfe angezeigt werden:
% ./dbgen -h
TPC-H Population Generator (Version 3.0.0 build 0) Copyright Transaction Processing Performance Council 1994 - 2010 USAGE: dbgen [-{vf}][-T {pcsoPSOL}] [-s <scale>][-C <procs>][-S <step>] dbgen [-v] [-O m] [-s <scale>] [-U <updates>] Basic Options =========================== -C <n> -- separate data set into <n> chunks (requires -S, default: 1) -f -- force. Overwrite existing files -h -- display this message -q -- enable QUIET mode -s <n> -- set Scale Factor (SF) to <n> (default: 1) -S <n> -- build the <n>th step of the data/update set (used with -C or -U) -U <n> -- generate <n> update sets -v -- enable VERBOSE mode Advanced Options =========================== -b <s> -- load distributions for <s> (default: dists.dss) -d <n> -- split deletes between <n> files (requires -U) -i <n> -- split inserts between <n> files (requires -U) -T c -- generate cutomers ONLY -T l -- generate nation/region ONLY -T L -- generate lineitem ONLY -T n -- generate nation ONLY -T o -- generate orders/lineitem ONLY -T O -- generate orders ONLY -T p -- generate parts/partsupp ONLY -T P -- generate parts ONLY -T r -- generate region ONLY -T s -- generate suppliers ONLY -T S -- generate partsupp ONLY To generate the SF=1 (1GB), validation database population, use: dbgen -vf -s 1 To generate updates for a SF=1 (1GB), use: dbgen -v -U 1 -s 1
Generierung von Beispieldaten mit dbgen
Wenn dbgen ohne weitere Optionen ausgeführt wird, wird ein GB an Daten erzeugt, die auf acht verschiedene Dateien mit der Endung *.tbl (Tabellen) verteilt werden:
- Customers (Kunden)
- Land (Nation)
- Lineitem (Einzelposten)
- Orders (Bestellungen)
- Part (Teile)
- Partsupp (Teileangebot)
- Region (Weltregion)
- Supplier (Lieferant)
# Dateien für 1GB Daten
24346144 25 Apr 18:10 customer.tbl
759863287 25 Apr 18:10 lineitem.tbl
2224 25 Apr 18:10 nation.tbl
171952161 25 Apr 18:10 orders.tbl
24135125 25 Apr 18:10 part.tbl
118984616 25 Apr 18:10 partsupp.tbl
389 25 Apr 18:10 region.tbl
1409184 25 Apr 18:10 supplier.tbl
Um Informationen während der Datengenerierung zu erhalten, empfiehlt es sich, den Verbose-Modus zu aktivieren. Dies gilt insbesondere, wenn große Beispieldatensätze mit mehreren 100 GB erstellt werden sollen. Dies kann einige Zeit dauern.
Sollen mehr Daten als die standardmäßig eingestellten 1 GB erzeugt werden, ist die Option -s <n> (Skalierungsfaktor (SF)) zu benutzen. Standardmäßig ist <n> auf 1 gesetzt und erzeugt 1 GB Daten. Daher würde ein Skalierungsfaktor -s 10 10 GB und ein Skalierungsfaktor -s 100 100 GB Daten generieren.
Um 500 GB an Daten zu erzeugen, könnte der folgende Aufruf von dbgen verwendet werden:
% ./dbgen -vf -s 500
TPC-H Population Generator (Version 3.0.0)
Copyright Transaction Processing Performance Council 1994 - 2010
Generating data for suppliers table/
Preloading text ... 100%
done.
Generating data for customers tabledone.
Generating data for orders/lineitem tablesdone.
Generating data for part/partsupplier tablesdone.
Generating data for nation tabledone.
Generating data for region tabledone.
Datenmodell für die TPC-H Beispieldaten
Die Datendefinitionsdatei (dss.ddl) und die referentielle Integritätsdatei (dss.ri) um die Tabellen für den TPC-H zu erstellen befinden sich im Verzeichnis ./TPC-H V3.0.1/dbgen/.
Um die Arbeit zu erleichtern, habe ich ein Datenmodell (siehe Bild unten) und DDLs für verschiedene Datenbanken erstellt, die gerne heruntergeladen und verwendet werden können:
Laden der TPC-H Beispieldaten
Jetzt einfach die Daten in das Datenmodell laden und Tests oder Experimente mit damit durchführen. Viel Spaß dabei!
Auch hierfür habe ich, um die Arbeit zu erleichtern, Skripte erstellt, die gerne heruntergeladen und verwendet werden können:
Und das war's, Leute. Es gibt einige kommende Blogposts zu Data Vault mit EXASOL und andere interessante Performance-Themen. Bleibt dran.
Bitte hinterlasst Kommentare, wenn ihr weitere Informationen oder Beispiele für andere Datenbanken benötigt.
Bis bald,
Dirk