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:
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:
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).
Usado por: Capabilities Showcase — demonstra a contagem aproximada com uniqHLL12() em
comparação com a contagem exata de uniq().
Acesse Datasets → + Dataset.
Clique em Switch to SQL Lab (ou selecione a guia Virtual).
Defina Database = NYC Taxi — ClickHouse Cloud.
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_errorFROM analytics.fact_trips FINALWHERE pickup_at >= today() - INTERVAL 30 DAYGROUP BY dayORDER BY day
Dê o nome CH Approx Unique Trips (uniqHLL12) e clique em Save.
Usado por: Capabilities Showcase — demonstra funções de janela
(AVG(...) OVER (...)) para a receita móvel por borough.
Acesse Datasets → + Dataset → Virtual.
Defina Database = NYC Taxi — ClickHouse Cloud.
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_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
Usado por: Capabilities Showcase — demonstra quantileTDigest() como uma função de
percentil nativa do ClickHouse.
Acesse Datasets → + Dataset → Virtual.
Defina Database = NYC Taxi — ClickHouse Cloud.
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_countFROM analytics.fact_trips FINALGROUP BY vendor_nameORDER BY vendor_name
Dê o nome CH Fare Percentiles (quantileTDigest) e clique em Save.
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).
Acesse Datasets → + Dataset → Virtual.
Defina Database = NYC Taxi — ClickHouse Cloud.
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_fareFROM default.trips_rawWHERE pickup_at >= today() - INTERVAL 7 DAYGROUP BY borough, zoneORDER BY trips DESC
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.
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.
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 —.
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.