Apache Superset

Nachdem der Lockdown leider auch mit sich bringt, dass unsere Fussballjungs aktuell nicht trainieren dürfen, haben wir kurzerhand eine kleine Challenge ins Leben gerufen, mit dem die Kinder Geld für die Mannschaftskasse und für einen wohltätigen Zweck 'erarbeiten'.

Mittels Joggen, Sprungübungen und Ball hochhalten sammelt das Team Punkte. Um ihnen zu zeigen was sie bereits erreicht haben aber auch um ein wenig den Ehrgeiz zu schüren, wollten wir die gesammelten Daten visualisieren und jedem zur Verfügung stellen.

Wenn es um das Thema Visualisierung geht, gibt es ja etliche Optionen. Dieses mal fiel meine Wahl auf  Apache Superset. Zum einen hatte ich letztlich darüber gelesen und war ein bisserl neugierig, zum anderen war es mal wieder an der Zeit etwas ganz neues auszuprobieren.

Nachdem ich einen Grossteil meines IT Stacks inzwischen auf Docker umgestellt habe, war dies in diesem Fall ebenfalls der Ansatz.

Das aktuelle Image bedarf ein wenig Nacharbeit falls man eine relationale DB als Analytics-Backend nutzen möchte, da die entsprechenden DB-Konnektoren nicht von Haus aus eingebunden sind.

Um selbigen Makel zu beseitigen, baut man sich mittels folgendem Dockerfile

FROM apache/superset
USER root
RUN pip install mysqlclient
USER superset

und dem docker build Aufruf

docker build -t sfg-superset -f Dockerfile .

ein neues Image, welches direkt im docker-compose File Verwendung findet.

version: '3'
services:
  superset-mysql:
    restart: on-failure
    image: mysql:5.7
    volumes:
      - ./mysql/:/var/lib/mysql/
    environment:
      - MYSQL_ROOT_PASSWORD=<ROOTPASSWORD>
      - MYSQL_DATABASE=<SUPERSETDB>
      - MYSQL_USER=<SUPERSETDBUSER>
      - MYSQL_PASSWORD=<SUPERSETDBPASSWORD>
    container_name: superset-mysql
    ports:
      - "127.0.0.1:3309:3306"
    networks:
      - superset

  superset:
    image: sfg-superset
    ports:
      - "8080:8088"
    networks:
      - superset

networks:
  superset:

Nachdem superset mittels docker-compose up bzw. docker compose up gestartet wurde, sind noch ein paar finale Schritte nötig

  1. Anlegen des Admin Kontos
docker exec -it sfg_superset_1 superset fab create-admin \
            --username <ADMINUSERNAME> \
            --firstname <ADMINFIRSTNAME> \
            --lastname <ADMINLASTNAME> \
            --email <ADMINEMAIL> \
            --password <ADMINPASSWORD>

2. Initialisieren der lokalen DB (und Aktualisieren auf den letzten Stand)

docker exec -it sfg_superset_1 superset db upgrade

3. Hinzufügen der Rollen und Berechtigungen

docker exec -it sfg_superset_1 superset init

Et voila. Mit den spezifizierten Credentials kann man sich nun am System anmelden und die Konfiguration der Analytics DB abschliessen.

Unter dem Menüpunkt Databases wählt man das Icon um eine neue DB hinzuzufügen und gibt die Konfigurationsdetails an. Im Screenshot beispielhaft für eine MySQL DB.

Wichtig ist im Advanced Tab, die Option Allow data upload zu aktivieren, da ansonsten  der Datenimport fehlschlägt.

z

Um das Setup zu testen, habe ich abschliessend Daten per CSV Import eingelesen.

Neben des Namens der Zieltabelle muss man die zu importierende Datei, den Delimiter sowie das Verhalten im Falle dass die Tabelle bereits existiert, angeben. Sollte man Datum- bzw. Zeitangaben mit importieren, so muss man die Spalte unter Parse Dates angeben (wichtig ist hierbei den Spaltennamen zu spezifizieren)

Nach Abschluss des Import kann man sich dann an die Visualisierungen und Dashboards machen

Details zu superset findet man unter ...

https://superset.apache.org/

https://github.com/apache/superset