Snowflake MigrationClickHouse Workshops

Superset no ClickHouse

Reconstrução dos dashboards no ClickHouse: sete conjuntos de dados que exercitam uniqHLL12, quantileTDigest, amostragem, funções de janela e dictGet, seguidos de 18 gráficos em quatro dashboards.

Este guia apresenta toda a configuração manual dos conjuntos de dados, gráficos e dashboards do ClickHouse no Superset. Siga-o para entender o que cada visualização faz e como ela é criada.

Quer pular essas etapas? Execute o script de importação para criar tudo automaticamente:

source .env && source .clickhouse_state
bash superset/add_clickhouse_connection.sh

O script cria a conexão e importa os 7 conjuntos de dados, 18 gráficos e 4 dashboards de uma só vez. Use este guia como referência ou para reconstruir elementos específicos.

Importante — credenciais de exemplo em superset/dashboards/dashboard_export_*.zip.

Os arquivos databases/*.yaml do ZIP de dashboards incluído no repositório usam valores de exemplo no lugar das informações reais:

sqlalchemy_uri: clickhousedb://default:XXXXXXXXXX@your-instance.clickhouse.cloud:8443/analytics?secure=true
  • Importação automática (add_clickhouse_connection.sh) — funciona sem alterações. Antes de enviar o arquivo ao endpoint de importação, o script reescreve sqlalchemy_uri dentro do ZIP usando ${CLICKHOUSE_HOST} / ${CLICKHOUSE_USER} / ${CLICKHOUSE_PASSWORD} de seu .env; assim, o host de exemplo nunca chega ao Superset.
  • Importação manual pela interface do Superset — o banco importado será criado com your-instance.clickhouse.cloud e não conseguirá se conectar. Após a importação, vá até Settings → Database Connections → Edit e substitua sqlalchemy_uri pela URI real do ClickHouse Cloud (por exemplo, clickhousedb://default:<PASSWORD>@<your-host>.clickhouse.cloud:8443/analytics?secure=true).
  • Nova exportação de seus próprios dashboards — o Superset incorpora seu host real do ClickHouse na exportação. Antes de fazer commit, substitua novamente o host por your-instance.clickhouse.cloud para que o identificador do serviço não vaze para o histórico do Git.

Pré-requisitos: a camada de analytics está preenchida (dbt run concluído na Etapa 7.3) e o dicionário existe (scripts/04_create_dictionary.sql concluído na Etapa 7.4).


Etapa 0 — Registrar a conexão com o ClickHouse

  1. Entre no Superset em http://localhost:8088 (admin / admin).

  2. Acesse Settings → Database Connections.

  3. Clique em + Database.

  4. Selecione ClickHouse Connect na lista.

  5. Preencha:

    CampoValor
    Display NameNYC Taxi — ClickHouse Cloud
    Hosto nome do host do ClickHouse Cloud (em .clickhouse_state)
    Port8443
    Databaseanalytics
    Usernamedefault
    Passwordsua senha do ClickHouse Cloud
    SSLativado
  6. Clique em Test Connection — confirme que o banner verde de sucesso aparece.

  7. Clique em Connect.


Parte 1 — Criar os conjuntos de dados

Conjunto de dados 1 — fact_trips (tabela)

Usado por: Operations Command Center, Executive Weekly Report, Driver Quality Analytics, Capabilities Showcase

  1. Acesse Datasets → + Dataset.
  2. Defina Database = NYC Taxi — ClickHouse Cloud, Schema = analytics, Table = fact_trips.
  3. Clique em Add Dataset and Create Chart e depois saia da página — o conjunto de dados é salvo.

Conjunto de dados 2 — agg_hourly_zone_trips (tabela)

Usado por: Operations Command Center, Executive Weekly Report

  1. Acesse Datasets → + Dataset.
  2. Defina Database = NYC Taxi — ClickHouse Cloud, Schema = analytics, Table = agg_hourly_zone_trips.
  3. Clique em Save.

Conjunto de dados 3 — CH Approx Unique Trips (uniqHLL12) (virtual)

Usado por: Capabilities Showcase — demonstra a contagem aproximada com uniqHLL12() em comparação com a contagem exata de uniq().

  1. Acesse Datasets → + Dataset.
  2. Clique em Switch to SQL Lab (ou selecione a guia Virtual).
  3. Defina Database = NYC Taxi — ClickHouse Cloud.
  4. Cole o 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_error
FROM analytics.fact_trips FINAL
WHERE pickup_at >= today() - INTERVAL 30 DAY
GROUP BY day
ORDER BY day
  1. Dê o nome CH Approx Unique Trips (uniqHLL12) e clique em Save.

Conjunto de dados 4 — CH Cohort Retention (virtual)

Usado por: Capabilities Showcase — demonstra funções de janela (AVG(...) OVER (...)) para a receita móvel por borough.

  1. Acesse Datasets → + Dataset → Virtual.
  2. Defina Database = NYC Taxi — ClickHouse Cloud.
  3. Cole o 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_revenue
FROM (
  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 DESC
LIMIT 100
  1. Dê o nome CH Cohort Retention e clique em Save.

Conjunto de dados 5 — CH Fare Percentiles (quantileTDigest) (virtual)

Usado por: Capabilities Showcase — demonstra quantileTDigest() como uma função de percentil nativa do ClickHouse.

  1. Acesse Datasets → + Dataset → Virtual.
  2. Defina Database = NYC Taxi — ClickHouse Cloud.
  3. Cole o 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_count
FROM analytics.fact_trips FINAL
GROUP BY vendor_name
ORDER BY vendor_name
  1. Dê o nome CH Fare Percentiles (quantileTDigest) e clique em Save.

Conjunto de dados 6 — CH Sampling Demo (virtual)

Usado por: Capabilities Showcase — demonstra a amostragem com rand() % N em comparação com uma varredura completa e compara sua precisão.

  1. Acesse Datasets → + Dataset → Virtual.
  2. Defina Database = NYC Taxi — ClickHouse Cloud.
  3. Cole o SQL:
SELECT
  'Full Scan'              AS method,
  count()                  AS trip_count,
  round(avg(fare_amount_usd), 4) AS avg_fare
FROM analytics.fact_trips FINAL
UNION ALL
SELECT
  '~10% (rand() % 10 = 0)' AS method,
  count() * 10              AS trip_count_est,
  round(avg(fare_amount_usd), 4) AS avg_fare
FROM analytics.fact_trips FINAL
WHERE rand() % 10 = 0
  1. Dê o nome CH Sampling Demo e clique em Save.

Conjunto de dados 7 — CH Zone Dict Lookup (virtual)

Usado por: Capabilities Showcase — demonstra dictGet() para enriquecer dimensões sem nenhuma JOIN.

Exige: o dicionário analytics.taxi_zones_dict da Etapa 7.4 (scripts/04_create_dictionary.sql).

  1. Acesse Datasets → + Dataset → Virtual.
  2. Defina Database = NYC Taxi — ClickHouse Cloud.
  3. Cole o 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_fare
FROM default.trips_raw
WHERE pickup_at >= today() - INTERVAL 7 DAY
GROUP BY borough, zone
ORDER BY trips DESC
  1. Dê o nome CH Zone Dict Lookup e clique em Save.

Esse conjunto de dados lê de default.trips_raw (tabela bruta), e não de analytics.fact_trips, para mostrar o dicionário funcionando na camada de origem sem nenhum pré-processamento.


Parte 2 — Criar os gráficos

Crie os gráficos por meio de Charts → + Chart: selecione o conjunto de dados, escolha o tipo de gráfico, configure os campos e clique em Save, usando exatamente o nome indicado.


Dashboard 1 — CH Operations Command Center

Gráfico: CH Total Trips Today

ConfiguraçãoValor
Datasetfact_trips
Chart typeBig Number
MetricCOUNT(trip_id)
Time filterpickup_at = today : now
Subheadertrips today

Salve como CH Total Trips Today.

Gráfico: CH Revenue Today

ConfiguraçãoValor
Datasetfact_trips
Chart typeBig Number
MetricSUM(fare_amount_usd)
Time filterpickup_at = today : now
Subheaderrevenue today

Salve como CH Revenue Today.

Gráfico: CH Trip Volume by Hour (24h)

ConfiguraçãoValor
Datasetagg_hourly_zone_trips
Chart typeLine Chart (ECharts)
X-axishour_bucket
MetricSUM(trips)
Time grain1 hour

Salve como CH Trip Volume by Hour (24h).

Gráfico: CH Revenue by Zone (Top 10)

ConfiguraçãoValor
Datasetagg_hourly_zone_trips
Chart typeBar Chart
Dimensionszone_id
MetricSUM(revenue)
Row limit10
Sort barsenabled

Salve como CH Revenue by Zone (Top 10).


Dashboard 2 — CH Executive Weekly Report

Gráfico: CH Daily Revenue (7 days)

ConfiguraçãoValor
Datasetfact_trips
Chart typeLine Chart (ECharts)
X-axispickup_at
MetricSUM(fare_amount_usd)
Time grain1 hour

Salve como CH Daily Revenue (7 days).

Gráfico: CH Top Zones by Revenue

ConfiguraçãoValor
Datasetagg_hourly_zone_trips
Chart typeBar Chart
Dimensionszone_id
MetricSUM(revenue)
Row limit20
Sort barsenabled

Salve como CH Top Zones by Revenue.

Gráfico: CH Payment Distribution

ConfiguraçãoValor
Datasetfact_trips
Chart typePie Chart
Dimensionspayment_type
MetricCOUNT(trip_id)

Salve como CH Payment Distribution.

Gráfico: CH Avg Fare by Vendor

ConfiguraçãoValor
Datasetfact_trips
Chart typeBar Chart
Dimensionsvendor_name
MetricAVG(fare_amount_usd)
Row limit20
Sort barsenabled

Salve como CH Avg Fare by Vendor.


Dashboard 3 — CH Driver Quality Analytics

Gráfico: CH Rating Distribution

ConfiguraçãoValor
Datasetfact_trips
Chart typeBar Chart
Dimensionsdriver_rating
MetricCOUNT(trip_id)
Row limit20
Sort barsenabled

Salve como CH Rating Distribution.

Gráfico: CH High-Rated Driver Revenue

ConfiguraçãoValor
Datasetfact_trips
Chart typeBig Number
MetricSUM(fare_amount_usd)
Filterdriver_rating >= 4.5
Subheaderrevenue from 4.5+ rated drivers

Salve como CH High-Rated Driver Revenue.

Gráfico: CH Avg Fare by Driver Rating

ConfiguraçãoValor
Datasetfact_trips
Chart typeBar Chart
Dimensionsdriver_rating
MetricAVG(fare_amount_usd)
Row limit20
Sort barsenabled

Salve como CH Avg Fare by Driver Rating.

Gráfico: CH Top Drivers Leaderboard

ConfiguraçãoValor
Datasetfact_trips
Chart typeTable
Query modeRaw records
Columnsvendor_name, vehicle_type, driver_rating, fare_amount_usd
Row limit1000

Salve como CH Top Drivers Leaderboard.


Dashboard 4 — CH Capabilities Showcase

Gráfico: CH Recent Trips (fact_trips)

ConfiguraçãoValor
Datasetfact_trips
Chart typeTable
Query modeRaw records
Columnstrip_id, pickup_at, dropoff_at, fare_amount_usd, pickup_borough, vendor_name
Row limit1000

Salve como CH Recent Trips (fact_trips).

Gráfico: CH Fare Percentiles (quantileTDigest)

ConfiguraçãoValor
DatasetCH Fare Percentiles (quantileTDigest)
Chart typeTable
Query modeRaw records
Columnsvendor_name, p50_fare, p95_fare, p99_fare, trip_count

Salve como CH Fare Percentiles (quantileTDigest).

Gráfico: CH Approx vs Exact Unique Trips (uniqHLL12)

ConfiguraçãoValor
DatasetCH Approx Unique Trips (uniqHLL12)
Chart typeTable
Query modeRaw records
Columnsday, exact_unique_trips, approx_unique_trips, pct_error

Salve como CH Approx vs Exact Unique Trips (uniqHLL12).

Gráfico: CH Sampling Accuracy Demo (SAMPLE 0.1)

ConfiguraçãoValor
DatasetCH Sampling Demo
Chart typeTable
Query modeRaw records
Columnsmethod, trip_count, avg_fare

Salve como CH Sampling Accuracy Demo (SAMPLE 0.1).

Gráfico: CH Zone Lookup via Dictionary (dictGet)

ConfiguraçãoValor
DatasetCH Zone Dict Lookup
Chart typeTable
Query modeRaw records
Columnsborough, zone, trips, avg_fare

Salve como CH Zone Lookup via Dictionary (dictGet).

Gráfico: CH Weekly Revenue Trend (window functions)

ConfiguraçãoValor
DatasetCH Cohort Retention
Chart typeTable
Query modeRaw records
Columnsweek, pickup_borough, trips, revenue, rolling_4wk_avg_revenue

Salve como CH Weekly Revenue Trend (window functions).


Parte 3 — Montar os dashboards

Para cada dashboard:

  1. Acesse Dashboards → + Dashboard.
  2. Informe o título.
  3. Clique em Save e depois em Edit Dashboard.
  4. No painel à direita, arraste cada gráfico para a tela.
  5. Ao terminar, clique em Save.

CH — Operations Command Center

Título: CH — Operations Command Center

LinhaGráficos
Linha 1CH Total Trips Today · CH Revenue Today
Linha 2CH Trip Volume by Hour (24h) · CH Revenue by Zone (Top 10)

CH — Executive Weekly Report

Título: CH — Executive Weekly Report

LinhaGráficos
Linha 1CH Daily Revenue (7 days) · CH Top Zones by Revenue · CH Payment Distribution · CH Avg Fare by Vendor

CH — Driver Quality Analytics

Título: CH — Driver Quality Analytics

LinhaGráficos
Linha 1CH Rating Distribution · CH High-Rated Driver Revenue
Linha 2CH Avg Fare by Driver Rating · CH Top Drivers Leaderboard

CH — Capabilities Showcase

Título: CH — Capabilities Showcase

LinhaGráficos
Linha 1CH Recent Trips (fact_trips) · CH Fare Percentiles (quantileTDigest)
Linha 2CH Approx vs Exact Unique Trips (uniqHLL12) · CH Sampling Accuracy Demo (SAMPLE 0.1)
Linha 3CH Zone Lookup via Dictionary (dictGet) · CH Weekly Revenue Trend (window functions)

Verificação

Depois de concluir a Parte 3, abra http://localhost:8088. Em Dashboards, devem aparecer 7 itens no total — 3 dashboards do Snowflake (criados durante a preparação da Parte 1) e 4 com o prefixo CH —.


Solução de problemas

fact_trips ou agg_hourly_zone_trips não encontrado Primeiro, execute dbt run (Etapa 7.3).

dictGet retorna strings vazias O dicionário analytics.taxi_zones_dict não foi criado. Execute scripts/04_create_dictionary.sql (Etapa 7.4).

O conjunto de dados virtual não retorna linhas A janela de 30 ou 7 dias de algumas consultas exige dados recentes. Se todos os dados da migração forem históricos, substitua o filtro de tempo por uma data fixa:

-- Replace: WHERE pickup_at >= today() - INTERVAL 30 DAY
-- With:    WHERE pickup_at >= '2023-01-01'

Erro 403 do script de importação O cookie de sessão do Superset expirou. Saia, entre novamente e execute o script outra vez.

Nesta página

Etapa 0 — Registrar a conexão com o ClickHouseParte 1 — Criar os conjuntos de dadosConjunto de dados 1 — fact_trips (tabela)Conjunto de dados 2 — agg_hourly_zone_trips (tabela)Conjunto de dados 3 — CH Approx Unique Trips (uniqHLL12) (virtual)Conjunto de dados 4 — CH Cohort Retention (virtual)Conjunto de dados 5 — CH Fare Percentiles (quantileTDigest) (virtual)Conjunto de dados 6 — CH Sampling Demo (virtual)Conjunto de dados 7 — CH Zone Dict Lookup (virtual)Parte 2 — Criar os gráficosDashboard 1 — CH Operations Command CenterGráfico: CH Total Trips TodayGráfico: CH Revenue TodayGráfico: CH Trip Volume by Hour (24h)Gráfico: CH Revenue by Zone (Top 10)Dashboard 2 — CH Executive Weekly ReportGráfico: CH Daily Revenue (7 days)Gráfico: CH Top Zones by RevenueGráfico: CH Payment DistributionGráfico: CH Avg Fare by VendorDashboard 3 — CH Driver Quality AnalyticsGráfico: CH Rating DistributionGráfico: CH High-Rated Driver RevenueGráfico: CH Avg Fare by Driver RatingGráfico: CH Top Drivers LeaderboardDashboard 4 — CH Capabilities ShowcaseGráfico: CH Recent Trips (fact_trips)Gráfico: CH Fare Percentiles (quantileTDigest)Gráfico: CH Approx vs Exact Unique Trips (uniqHLL12)Gráfico: CH Sampling Accuracy Demo (SAMPLE 0.1)Gráfico: CH Zone Lookup via Dictionary (dictGet)Gráfico: CH Weekly Revenue Trend (window functions)Parte 3 — Montar os dashboardsCH — Operations Command CenterCH — Executive Weekly ReportCH — Driver Quality AnalyticsCH — Capabilities ShowcaseVerificaçãoSolução de problemas
PT