Vamos criar um dashboard interativo em Python, utilizando o Streamlit, para visualizar e filtrar os dados de uma tabela fato de Data Warehouse OLAP armazenada no ClickHouse. O Streamlit é uma biblioteca Python excelente para criar aplicações web de dados de forma rápida, simples e sem necessidade de front-end tradicional.
Em seu ambiente Python, rode:
pip install streamlit clickhouse-connect pandas
Crie um arquivo chamado dashboard.py com o seguinte código básico (com explicações em comentários):
import streamlit as st
import pandas as pd
import clickhouse_connect
*# --- Conexão com o ClickHouse ---*
client = clickhouse_connect.get_client(
host='localhost', *# ou '127.0.0.1'*
port=8123
)
*# --- Query base da tabela fato com joins ---*
QUERY_BASE = """
SELECT
f.id_visita,
u.nome AS usuario,
u.cidade,
p.descricao AS pagina,
t.data,
t.dia_semana,
f.duracao
FROM
fato_visita AS f
JOIN dim_usuario AS u ON f.id_usuario = u.id_usuario
JOIN dim_pagina AS p ON f.id_pagina = p.id_pagina
JOIN dim_tempo AS t ON f.id_tempo = t.id_tempo
"""
*# --- Consulta e carrega os dados em DataFrame ---*
def load_data():
result = client.query(QUERY_BASE)
df = pd.DataFrame(result.result_rows, columns=result.column_names)
return df
*# --- Main App Streamlit ---*
st.title('Dashboard de Visitas - ClickHouse OLAP Star Schema')
*# Carregar os dados da query*
df = load_data()
*# --- Filtros Dinâmicos ---*
st.sidebar.header("Filtros")
cidades = st.sidebar.multiselect(
"Cidade", options=sorted(df['cidade'].unique()), default=sorted(df['cidade'].unique()))
paginas = st.sidebar.multiselect(
"Página", options=sorted(df['pagina'].unique()), default=sorted(df['pagina'].unique()))
datas = st.sidebar.date_input(
"Data", value=None, min_value=df['data'].min(), max_value=df['data'].max())
*# Aplicar filtros*
df_filtrado = df[
df['cidade'].isin(cidades)
& df['pagina'].isin(paginas)
]
if datas is not None and len(datas) == 2:
df_filtrado = df_filtrado[
(pd.to_datetime(df_filtrado['data']) >= pd.to_datetime(datas[0]))
& (pd.to_datetime(df_filtrado['data']) <= pd.to_datetime(datas[1]))
]
*# Exibir os dados filtrados*
st.dataframe(df_filtrado)
*# --- Estatísticas básicas ---*
st.markdown("### Estatísticas Resumidas")
st.write(f"Total de visitas selecionadas: {len(df_filtrado)}")
st.write(f"Duração média das visitas: {df_filtrado['duracao'].mean():.1f} segundos")
No terminal, execute:
streamlit run dashboard.py
Acesse o endereço mostrado no terminal pelo navegador (por padrão, http://localhost:8501).