Apache Superset¶
Business intelligence, tableaux de bord et exploration SQL.
| URL | https://bi.akko.local |
| Authentification | Keycloak SSO (realm akko) |
| Service Docker | superset |
Aperçu¶
Apache Superset est la couche BI de la plateforme AKKO. Il se connecte à Trino pour interroger les tables Iceberg et les données PostgreSQL, offrant :
- Une construction de graphiques interactive avec une interface glisser-déposer
- SQL Lab pour les requêtes ad-hoc
- Des tableaux de bord pré-construits auto-provisionnés au démarrage
- Le support de la fédération de requêtes (Iceberg + PostgreSQL dans un seul graphique)
Contenu auto-provisionné¶
AKKO inclut un sidecar superset-init qui provisionne automatiquement un environnement de démonstration complet au premier démarrage. Aucune configuration manuelle n'est requise.
Ce qui est créé¶
| Catégorie | Nombre | Détails |
|---|---|---|
| Connexion base de données | 1 | Trino (AKKO) -- URI SQLAlchemy : trino://trino@trino:8080/iceberg |
| Jeux de données physiques | 4 | customers, accounts, transactions, advisors (depuis iceberg.analytics.*) |
| Jeux de données virtuels | 4 | balance_by_account_type, monthly_volume_by_operation, spending_by_category, revenue_by_branch |
| Graphiques | 8 | KPIs, graphiques en barres, graphiques en lignes, camembert, tableaux |
| Tableau de bord | 1 | AKKO Banking Overview |
Détail des graphiques¶
| Graphique | Type | Jeu de données |
|---|---|---|
| Total Customers | Big Number | customers |
| Active Balance | Big Number | accounts |
| Balance by Account Type | Bar | balance_by_account_type (virtuel) |
| Monthly Transaction Volume | Line | monthly_volume_by_operation (virtuel) |
| Spending by Category | Donut Pie | spending_by_category (virtuel) |
| Revenue by Branch (Federation) | Bar | revenue_by_branch (virtuel -- joint Iceberg + PostgreSQL) |
| Top 10 Customers by Volume | Table | customers |
| Advisor Performance | Table | advisors |
Les données doivent exister au préalable
Le script d'auto-provisionnement crée des jeux de données qui référencent des tables Iceberg. Si les tables n'existent pas encore (le notebook de démonstration bancaire n'a pas été exécuté), les jeux de données sont ignorés avec un avertissement. Exécutez d'abord le notebook akko-banking-demo.ipynb, puis redémarrez Superset pour compléter le provisionnement.
Exemple de fédération¶
Le graphique Revenue by Branch démontre la fédération de requêtes de Trino -- il joint des données du catalogue Iceberg (iceberg.analytics.customers, iceberg.analytics.accounts, iceberg.analytics.transactions) avec des données PostGIS de PostgreSQL (postgresql.geospatial.branches) dans une seule requête SQL.
Connexion Trino¶
Superset se connecte à Trino avec la configuration suivante :
Cette connexion donne accès à tous les catalogues Trino :
| Catalogue | Backend | Contenu |
|---|---|---|
iceberg |
Apache Polaris (Iceberg REST) | Tables analytiques (customers, accounts, transactions, advisors) |
postgresql |
PostgreSQL | Données géospatiales (branches avec PostGIS), pgvector |
system |
Trino interne | Métadonnées d'exécution, historique des requêtes |
SQL Lab¶
SQL Lab est l'éditeur SQL interactif de Superset. Accédez-y depuis le menu supérieur : SQL > SQL Lab.
Fonctionnalités :
- Éditeur SQL multi-onglets avec coloration syntaxique
- Historique des requêtes et requêtes sauvegardées
- Explorateur de schémas de tables (barre latérale gauche)
- Export des résultats en CSV
Exemple de requête¶
-- Revenu par région depuis les tables Iceberg
SELECT c.segment,
COUNT(DISTINCT c.customer_id) AS customers,
ROUND(SUM(ABS(t.amount)), 2) AS total_volume
FROM iceberg.analytics.customers c
JOIN iceberg.analytics.accounts a ON a.customer_id = c.customer_id
JOIN iceberg.analytics.transactions t ON t.account_id = a.account_id
WHERE a.status = 'active'
GROUP BY c.segment
ORDER BY total_volume DESC;
Requêtes SQL pré-construites
Le fichier superset/assets/akko-banking-queries.sql contient des requêtes SQL prêtes à l'emploi pour l'exploration dans SQL Lab.
Créer des graphiques personnalisés¶
- Naviguez vers Charts > + Chart
- Sélectionnez un jeu de données (ou créez-en un nouveau depuis SQL Lab)
- Choisissez un type de visualisation (barre, ligne, camembert, tableau, etc.)
- Configurez les métriques et dimensions
- Cliquez sur Save et ajoutez optionnellement à un tableau de bord
Créer un jeu de données personnalisé¶
Un jeu de données physique correspond directement à une table :
- Allez dans Datasets > + Dataset
- Sélectionnez la base de données Trino (AKKO)
- Sélectionnez le schéma (par ex.
analytics) - Sélectionnez la table
- Cliquez sur Add
Un jeu de données virtuel est défini par une requête SQL :
- Écrivez une requête dans SQL Lab
- Cliquez sur Save > Save as Dataset
- Les résultats de la requête deviennent un jeu de données réutilisable pour les graphiques
Authentification¶
Superset utilise Keycloak SSO pour l'authentification. Les utilisateurs se connectent via le realm AKKO et sont associés aux rôles Superset en fonction de leur appartenance aux groupes Keycloak.
Problèmes connus¶
Les métriques sur les jeux de données virtuels doivent utiliser des fonctions d'agrégation
Lors de la création de graphiques sur des jeux de données virtuels (définis par SQL), les métriques doivent utiliser des fonctions d'agrégation comme SUM(col), COUNT(*) ou AVG(col). L'utilisation d'un nom de colonne brut (par ex. total_balance au lieu de SUM(total_balance)) échouera avec une erreur Trino EXPRESSION_NOT_AGGREGATE.
Association graphique-tableau de bord
Le point d'accès POST de l'API REST de Superset pour les tableaux de bord ne crée pas la relation many-to-many entre tableaux de bord et graphiques. Le script d'auto-provisionnement contourne ce problème en utilisant directement l'ORM Superset (dash.slices = slices). Si vous créez des tableaux de bord via l'API REST, les graphiques peuvent apparaître non liés -- re-sauvegardez le tableau de bord dans l'interface pour corriger.
superset-init s'exécute à chaque démarrage
Le script de provisionnement est idempotent. Il vérifie l'existence des bases de données, jeux de données, graphiques et tableaux de bord avant d'en créer de nouveaux. Redémarrer Superset ne dupliquera pas le contenu.