in ,

Visualisierung von Daten mit Superset

Was können wir jetzt noch mit unseren Hygrometerdaten machen?

Unsere eigenen Wetterdaten (siehe auch DIY (mini) BigData Hygrometer) lassen wir mittlerweile regelmäßig in unsere MariaDB schreiben, ergänzt wurde noch ein zweiter Raspberry Pi der die Daten auf der Terrasse verarbeitet. Nun wollen wir die Visualisierung – die bisher im Excel geschieht – etwas moderner gestalten und ein Dashboard mittels Superset anlegen. Als Bonus können wir mit einem guest Account auch vom Handy/Tablet (sofern in unserem WLAN) die aktuellen Daten aufrufen.

Schritt 1 – Apache Superset installieren

Als Basis dient eine Ubuntu 20.04 LTS Installation, in dieser werden wir Superset installieren und einrichten.

Benötigte Ubuntu Packages installieren

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip libsasl2-dev libldap2-dev
sudo apt-get install python3-venv

MariaDB installieren (für Superset Metastore) und einrichten

sudo apt-get install mariadb-server
sudo mysql_secure_installation
sudo mysql -uroot -p
mysql> GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY 'superset';
mysql> FLUSH PRIVILEGES;
mysql> exit;
mysql_tzinfo_to_sql /usr/share/zoneinfo | sudo mysql -uroot -psupserset mysql

sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf 
    [mysqld]
    default_time_zone = Europe/Vienna

sudo systemctl restart mysql

Superset Python Environment anlegen

cd
python3 -m venv superset
. superset/bin/activate
pip install --upgrade setuptools pip

 

Superset & zusätzliche Pakete mit pip installieren

pip install cryptography==38.0.4
pip install WTForms==2.3.3
pip install Pillow
pip install gevent
pip install apache-superset
deactivate

 

Superset MariaDB User anlegen und Berechtigungen vergeben

mysql -uroot -psuperset
    CREATE DATABASE superset DEFAULT CHARACTER SET utf8;
    CREATE USER 'superset'@localhost IDENTIFIED BY 'superset';
    GRANT all on superset.* to 'superset'@localhost identified by 'superset';
    flush privileges;

 

Superset Configuration anlegen

cd
mkdir -p .superset

vi .superset/superset_config.py
    # Superset specific config
    #-------------------------------------------------------
    ROW_LIMIT = 100000
    SUPERSET_WEBSERVER_PORT = 8088
    #-------------------------------------------------------

    #-------------------------------------------------------
    # Flask App Builder configuration
    #-------------------------------------------------------
    # Your App secret key
    SECRET_KEY = 'supersupersetsecret'
    
    # The SQLAlchemy connection string to your database backend
    # This connection defines the path to the database that stores your
    # superset metadata (slices, connections, tables, dashboards, ...).
    # Note that the connection information to connect to the datasources
    # you want to explore are managed directly in the web UI
    #SQLALCHEMY_DATABASE_URI = 'sqlite:////path/to/superset.db'
    SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset@localhost:3306/superset'
    
    #SQLLAB Timout auf 1h
    SQLLAB_TIMEOUT = 36000

    # Flask-WTF flag for CSRF
    WTF_CSRF_ENABLED = True
    # Add endpoints that need to be exempt from CSRF protection
    WTF_CSRF_EXEMPT_LIST = []
    # A CSRF token that expires in 1 year
    WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365
    
    # Set this API key to enable Mapbox visualizations
    MAPBOX_API_KEY = ''

Superset mit MariaDB Metastore einrichten
. superset/bin/activate
sudo apt-get install libmariadb-dev
pip install mysqlclient
export FLASK_APP=superset
export SUPERSET_CONFIG_PATH=/home/superset/.superset/superset_config.py
superset fab create-admin  #hier sind die Admin Daten und Passwort einzugeben
superset db upgrade
superset init
deactivate

Kontrollieren ob Tabellen angelegt wurden:

mysql -usuperset -psuperset -Dsuperset -e "show tables;"

Systemd Service für Superset anlegen und starten

sudo vi /etc/systemd/system/superset.service
[Unit]
Description=Superset
After=multi-user.target

[Service]
Type=simple
User=superset
Environment=SUPERSET_CONFIG_PATH=/home/superset/.superset/superset_config.py
Environment=PYTHONPATH=/home/superset/superset
Environment=FLASK_APP=superset
WorkingDirectory = /home/superset/superset
ExecStart=/home/superset/superset/bin/gunicorn -w 5 -k gevent --worker-connections 100 --timeout 120 -b 0.0.0.0:8088 --limit-request-line 0 --limit-request-field_size 0 "superset.app:create_app()"

[Install]
WantedBy=default.target
sudo systemctl daemon-reload
sudo systemctl start superset.service

Schritt 2 – Dashboard zur Visualisierung in Superset anlegen

Bevor wir unser Dashboard für die Visualisierung der Daten erstellen können, müssen wir noch einige andere Sachen anlegen.

Datenbankverbindung einrichen

Unter Data → Databases können wir mit „+ DATABASE“ eine neue Verbindung anlegen.

In unsrem Fall eine Verbindung zur lokalen MariaDB mit dem user bme280

Nach dem Speichern wird uns die DB angezeigt

Chart anlegen

Unter SQL Lab → SQL Editor wählen wir die angelegte DB aus, das Schema bme280 und schreiben einfach das SQL:

Select * from terrasse;

Nachdem wir RUN gedrückt haben, sehen wir das Ergebnis und können mit „CREATE CHART“ unsere Abfrage als Dataset „BME280_Terrasse_20230316“ abspeichern:

Mit „SAVE & EXPLORE“ speichern wir das Dataset und in einem neuen Tab sehen wir den Chart Editor

Als Charttypen wählen wir Evolution → Dual Line Chart

„Time Column“ ist bereits richtig mit der Messzeit ausgewählt, als „Time Grain“ stellen wir „Minute“ ein

„Time Range“ setzen wir auf „Custom“ und nehmen „7 Days Before“ bis „Now“, damit wir immer nur die letzten 7 Tage angezeigt bekommen

Als Y Axis 1 bzw. 2 wählen wir Temperatur und Luftfeuchtigkeit aus

Mit „UPDATE CHART“ können wir unser Zwischenergebnis anzeigen lassen

Im Reiter „CUSTOMIZE“ können wir noch ein anderes „COLOR SCHEME“ auswählen, und die X Axis Beschriftung nach unseren Wünschen mit „%d.%m.%y %H:%M“ anpassen

Mit „SAVE“ speichern wir unser Chart ab

Angezeigt und editiert werden kann es jetzt unter „Charts“

Dashboard anlegen

Unter Dashboards → „+ DASHBOARD“ können wir jetzt unser Dashboard anlegen

Als Namen nehmen wir „BME280_Terrasse_20230316“ und ziehen unser erstelltes Chart ins Dashboard

Sollten wir mit dem Ergebnis zufrieden sein, speichern wir das Dashboard mit „SAVE“ und stellen es von Status Draft auf Published, damit es alle anderen mit Lese-Berechtigungen sehen können.

Das Dashboard wird jetzt unter „Dashboards“ angezeigt

So sieht unser fertiges Dashboard nun aus

Guest User anlegen

Um einen read-only User zu haben, werden wir unter Settings → List Roles → +
eine neue Rolle guest mit den folgenden Berechtigungen anlegen:

Wichtig ist hier das datasource access für unsere Datasource BME280_Terrasse_20230316

Zusätzlich legen wir den User guest an und weisen ihm die Rolle guest zu unter
Settings → List Users → +

Mit dem Guest-User eingeloggt, sehen wir somit nur noch die berechtigten Dashboards

Fazit

Die Installation und Einrichtung von Superset benötigt etwas Zeit, allerdings erhalten wir dafür ein kostenloses Opensource Tool, mit dessen Hilfe wir uns relativ einfach Dashboards zur Visualisierung erstellen können.

Durch die Weboberfläche und Userverwaltung können wir von unterschiedlichen Clients auf die Dashboards zugreifen.

Die Vielzahl an vorhandenen Charts lässt kaum Wünsche offen, mit dem SQL Editor können wir auch unsere eigenen SQL’s schreiben und daraus Charts basteln.

 

Functions, Stored Procedures und Triggers im Microsoft SQL Server

Partitionierung vs Columnstore-Index beim MS SQL Server