Reconstruire les tableaux de bord sur ClickHouse : sept jeux de données exploitant uniqHLL12, quantileTDigest, l’échantillonnage, les fonctions de fenêtrage et dictGet, puis 18 graphiques répartis dans quatre tableaux de bord.
Ce guide décrit la configuration manuelle complète de tous les jeux de données,
graphiques et tableaux de bord ClickHouse dans Superset. Suivez-le pour comprendre le
rôle et la construction de chaque visualisation.
Vous souhaitez aller directement au résultat ? Exécutez le script d’importation
pour tout créer automatiquement :
Le script crée en une seule fois la connexion, les 7 jeux de données, les
18 graphiques et les 4 tableaux de bord. Utilisez ce guide comme référence ou pour
reconstruire des éléments séparément.
Important — identifiants fictifs dans superset/dashboards/dashboard_export_*.zip.
Dans le fichier ZIP de tableau de bord enregistré, les valeurs de
databases/*.yaml sont remplacées par des valeurs fictives :
Importation automatique (add_clickhouse_connection.sh) — fonctionne sans
modification. Avant l’envoi au point d’entrée d’importation, le script réécrit la
valeur sqlalchemy_uri dans le ZIP avec ${CLICKHOUSE_HOST} /
${CLICKHOUSE_USER} / ${CLICKHOUSE_PASSWORD} issus de votre .env. L’hôte
fictif n’atteint donc jamais Superset.
Importation manuelle dans l’interface Superset — la base importée est créée avec
your-instance.clickhouse.cloud et ne peut pas se connecter. Après l’importation,
ouvrez Settings → Database Connections → Edit, puis remplacez
sqlalchemy_uri par votre véritable URI ClickHouse Cloud, par exemple
clickhousedb://default:<PASSWORD>@<your-host>.clickhouse.cloud:8443/analytics?secure=true.
Nouvelle exportation de vos propres tableaux de bord — Superset inscrit votre
véritable hôte ClickHouse dans l’exportation. Avant d’ajouter le fichier au dépôt,
remplacez à nouveau l’hôte par your-instance.clickhouse.cloud afin de ne pas
divulguer l’identifiant de votre service dans l’historique git.
Prérequis : la couche analytique est alimentée, après dbt run à l’étape 7.3, et
le dictionnaire existe, après scripts/04_create_dictionary.sql à l’étape 7.4.
Utilisé par : Capabilities Showcase — illustre le décompte approximatif avec
uniqHLL12() par rapport au décompte exact avec uniq().
Ouvrez Datasets → + Dataset.
Cliquez sur Switch to SQL Lab, ou sélectionnez l’onglet Virtual.
Définissez Database sur NYC Taxi — ClickHouse Cloud.
Collez le SQL :
SELECT toDate(pickup_at) AS day, uniq(trip_id) AS exact_unique_trips, uniqHLL12(trip_id) AS approx_unique_trips, round( abs(uniq(trip_id) - uniqHLL12(trip_id)) / uniq(trip_id) * 100, 2 ) AS pct_errorFROM analytics.fact_trips FINALWHERE pickup_at >= today() - INTERVAL 30 DAYGROUP BY dayORDER BY day
Nommez-le CH Approx Unique Trips (uniqHLL12), puis cliquez sur Save.
Utilisé par : Capabilities Showcase — illustre les fonctions de fenêtrage
(AVG(...) OVER (...)) pour calculer le chiffre d’affaires glissant par arrondissement.
Ouvrez Datasets → + Dataset → Virtual.
Définissez Database sur NYC Taxi — ClickHouse Cloud.
Collez le SQL :
SELECT week, pickup_borough, trips, revenue, round(avg(revenue) OVER ( PARTITION BY pickup_borough ORDER BY week ROWS BETWEEN 3 PRECEDING AND CURRENT ROW ), 2) AS rolling_4wk_avg_revenueFROM ( SELECT toStartOfWeek(pickup_at) AS week, pickup_borough, count() AS trips, round(sum(fare_amount_usd), 2) AS revenue FROM analytics.fact_trips FINAL GROUP BY week, pickup_borough)ORDER BY week DESC, revenue DESCLIMIT 100
Nommez-le CH Cohort Retention, puis cliquez sur Save.
Utilisé par : Capabilities Showcase — illustre quantileTDigest() comme fonction de
centile native de ClickHouse.
Ouvrez Datasets → + Dataset → Virtual.
Définissez Database sur NYC Taxi — ClickHouse Cloud.
Collez le SQL :
SELECT vendor_name, quantileTDigest(0.5)(fare_amount_usd) AS p50_fare, quantileTDigest(0.95)(fare_amount_usd) AS p95_fare, quantileTDigest(0.99)(fare_amount_usd) AS p99_fare, count() AS trip_countFROM analytics.fact_trips FINALGROUP BY vendor_nameORDER BY vendor_name
Nommez-le CH Fare Percentiles (quantileTDigest), puis cliquez sur Save.
Utilisé par : Capabilities Showcase — illustre dictGet() pour enrichir une dimension
sans aucun JOIN.
Nécessite : le dictionnaire analytics.taxi_zones_dict de l’étape 7.4,
créé avec scripts/04_create_dictionary.sql.
Ouvrez Datasets → + Dataset → Virtual.
Définissez Database sur NYC Taxi — ClickHouse Cloud.
Collez le SQL :
SELECT dictGet('analytics.taxi_zones_dict', 'borough', toUInt16(pickup_location_id)) AS borough, dictGet('analytics.taxi_zones_dict', 'zone', toUInt16(pickup_location_id)) AS zone, count() AS trips, round(avg(fare_amount_usd), 2) AS avg_fareFROM default.trips_rawWHERE pickup_at >= today() - INTERVAL 7 DAYGROUP BY borough, zoneORDER BY trips DESC
Nommez-le CH Zone Dict Lookup, puis cliquez sur Save.
Ce jeu de données lit default.trips_raw, la table brute, plutôt que
analytics.fact_trips, afin de montrer le fonctionnement du dictionnaire directement
dans la couche source, sans prétraitement.
Créez les graphiques depuis Charts → + Chart : sélectionnez le jeu de données,
choisissez le type de graphique, configurez les champs, puis cliquez sur Save en
utilisant exactement le nom indiqué.
Après avoir terminé la troisième partie, ouvrez
http://localhost:8088. Sous Dashboards, vous devez voir
sept tableaux de bord : les trois tableaux de bord Snowflake créés pendant la première
partie, et quatre dont le nom commence par CH —.
fact_trips ou agg_hourly_zone_trips introuvable
Exécutez d’abord dbt run, à l’étape 7.3.
dictGet renvoie des chaînes vides
Le dictionnaire analytics.taxi_zones_dict n’a pas été créé. Exécutez
scripts/04_create_dictionary.sql, à l’étape 7.4.
Le jeu de données virtuel ne renvoie aucune ligne
La fenêtre de 30 jours ou de 7 jours de certaines requêtes exige des données récentes.
Si toutes vos données migrées sont historiques, remplacez le filtre temporel par une
date fixe :
-- Replace: WHERE pickup_at >= today() - INTERVAL 30 DAY-- With: WHERE pickup_at >= '2023-01-01'
Erreur 403 du script d’importation
Votre cookie de session Superset a expiré. Déconnectez-vous, reconnectez-vous, puis
relancez le script.