Aller au contenu

Clients BI — Power BI, Tableau, SSRS, DBeaver

AKKO expose Trino comme point d'entrée SQL fédéré unique pour tout outil BI en aval. Pas d'adaptateur propriétaire, pas de relais Thrift — tous les clients parlent JDBC ou ODBC au même host trino.<domain>, s'authentifient via Keycloak OAuth2 / JWT (ou mot de passe pour les outils legacy), et héritent des row-filters et column-masks OPA qui s'appliquent déjà aux utilisateurs du cockpit.

Cette page est le guide copier-coller pour les 4 clients BI entreprise les plus courants.

Prérequis

Item Valeur Comment l'obtenir
Host Trino trino.<votre-domaine-akko> Depuis helm/examples/values-domain.yaml
Port Trino 443 (TLS) Entrypoint Traefik
Catalogue iceberg, postgresql, postgresql_akko, polaris kubectl -n akko get cm akko-trino-catalogs
Username User Keycloak (ex. alice) Console admin Keycloak
Password Password Keycloak de l'user Console admin Keycloak
Certificat CA optionnel — truster letsencrypt / CA corporate openssl s_client -connect trino.<domain>:443 -showcerts

Les utilisateurs s'authentifient avec leur identifiant Keycloak. Les groupes attachés (ex. projet-scoring, akko-analyst) pilotent les policies OPA appliquées à chaque requête — mêmes règles que le cockpit.


Power BI Desktop (Windows)

1. Installer le driver ODBC Trino

Téléchargez le driver ODBC Trino officiel (distribution Starburst, tier gratuit suffisant) :

2. Créer un DSN ODBC (optionnel mais recommandé)

Windows → ODBC Data Sources (64-bit)System DSNAdd…Starburst Trino ODBC Driver.

Champ Valeur
Data Source Name akko-trino
Host trino.<votre-domaine-akko>
Port 443
Catalog iceberg (ou vide pour choisir au moment de la requête)
SSL Enabled
Authentication Password (setup le plus simple)
Username votre user Keycloak

Cliquez Test — vous devriez voir Connection test successful.

3. Connecter depuis Power BI

Get DataODBC → choisir akko-trino (ou entrer une connection string directement) :

Driver={Starburst Trino ODBC Driver};Host=trino.<domain>;Port=443;SSL=1;AuthenticationType=Password;UID=alice;PWD=***

Power BI liste les catalogues → schémas → tables. Chargez celles qu'il vous faut et construisez votre rapport. Les column masks (SHA-256 sur les emails, etc.) s'appliquent de façon transparente : alice voit en clair, carol voit le hash — aucune config supplémentaire dans Power BI.

Gotcha — DirectQuery vs Import

  • Import mode : fonctionne sans config.
  • DirectQuery : nécessite un Power BI Gateway car le driver ODBC Trino n'est pas dans la liste des connecteurs cloud natifs. Installez la gateway sur une VM à l'intérieur du périmètre AKKO et configurez-la pour joindre trino.<domain>:443.

Tableau Desktop / Tableau Server

1. Installer le driver JDBC Trino

  1. Télécharger trino-jdbc-<version>.jar depuis https://trino.io/docs/current/client/jdbc.html.
  2. Le placer dans :
  3. macOS : ~/Library/Tableau/Drivers
  4. Windows : C:\Program Files\Tableau\Drivers

2. Connecter

Tableau → Connect to a ServerPresto / Trino (même driver JDBC).

Champ Valeur
Server trino.<votre-domaine-akko>
Port 443
Catalog iceberg
Schema vide
Authentication Username and password
Username / Password vos identifiants Keycloak
Require SSL Yes

Cliquez Sign In — le navigateur de catalogue apparaît.

Gouvernance OPA dans Tableau

Les row filters et column masks appliqués au coordinateur Trino sont opaques pour Tableau : une session carol voit moins de lignes qu'une session alice pour la même datasource publiée. Aucune duplication RBAC côté Tableau — Trino est l'autorité.


SQL Server Reporting Services (SSRS)

SSRS n'a pas de driver Trino natif. Utilisez le driver ODBC Trino comme documenté pour Power BI, puis sélectionnez ODBC comme type de source de données.

  1. Installer le driver ODBC Trino Starburst sur le serveur SSRS.
  2. Créer un System DSN akko-trino (mêmes champs que la section Power BI).
  3. Dans Report Builder / Visual Studio : Data SourcesAddODBC → choisir le DSN.
  4. Écrire du SQL standard — SSRS transmet la requête inchangée à Trino :
    SELECT region, SUM(amount) AS total
    FROM iceberg.analytics.transactions
    WHERE year = YEAR(CURRENT_DATE)
    GROUP BY region
    ORDER BY total DESC
    

Les paramètres SSRS se lient à la couche ODBC comme d'habitude. L'auth utilise les credentials du DSN ; pour des requêtes de compte de service préférez un user Keycloak dédié type svc-reporting avec un groupe projet-* scopé pour que OPA applique le bon filtre.


DBeaver (client SQL universel gratuit)

1. Ajouter le driver Trino

DBeaver embarque un driver Trino par défaut. DatabaseNew Database ConnectionTrino.

2. Connecter

Champ Valeur
Host trino.<votre-domaine-akko>
Port 443
Database / catalog iceberg
Authentication Database Native
Username / Password identifiants Keycloak
URL (après remplissage) jdbc:trino://trino.<domain>:443/iceberg?SSL=true

Test connection → Connected.

3. Astuces

  • Historique de requêtes stocké localement — utile comme « bookmark » avant de promouvoir en dashboard Superset.
  • Export CSV / Parquet / Excel fonctionne sans config.

Cheatsheet connection strings

Client Connection string
JDBC générique jdbc:trino://trino.<domain>:443/iceberg?SSL=true&user=alice&password=***
ODBC générique Driver={Starburst Trino ODBC Driver};Host=trino.<domain>;Port=443;SSL=1;AuthenticationType=Password;UID=alice;PWD=***
Python trino-python-client trino.dbapi.connect(host="trino.<domain>", port=443, http_scheme="https", user="alice", auth=BasicAuthentication("alice", "***"))

Dépannage

Symptôme Cause Correctif
SSLHandshakeException: PKIX path building failed Votre CA corporate n'est pas trustée Importer le cert trino.<domain> dans le trust store JVM (keytool -import …) ou désactiver la vérif (dev uniquement)
HTTP 401 Unauthorized Password ne correspond pas Réinitialiser le password dans la console admin Keycloak
Access Denied: Cannot access schema User Keycloak n'a pas de scope de groupe projet-* Ajouter l'user au bon groupe dans Keycloak — le sync OPA rafraîchit au prochain changement d'attribut
Toutes les lignes affichent ***REDACTED*** Column mask OPA s'applique car le groupe de l'user ne le bypasse pas Comportement attendu — les admins voient en clair, les autres groupes voient la valeur masquée selon group_policies.json

Voir aussi