Instalación de Apache Superset para Visualización de Datos

Apache Superset es una plataforma de exploración y visualización de datos de código abierto que soporta conexiones a decenas de bases de datos y permite crear dashboards interactivos sin necesidad de código. Con Superset puedes crear desde gráficos simples hasta análisis complejos con SQL Lab, integrándose con fuentes como PostgreSQL, MySQL, BigQuery o Snowflake. Esta guía cubre la instalación en Linux con Docker y la configuración completa para producción.

Requisitos Previos

  • Ubuntu 20.04/22.04 o CentOS 8+/Rocky Linux 8+
  • Docker 20.10+ y Docker Compose 2.x
  • 4 GB de RAM mínimo (8 GB recomendado)
  • 4 vCPUs recomendado
  • 10 GB de espacio en disco
  • Puerto 8088 disponible

Instalación con Docker Compose

La forma más rápida de poner en marcha Superset es usando el repositorio oficial:

# Clonar el repositorio oficial de Superset
git clone https://github.com/apache/superset.git
cd superset

# Usar la versión estable más reciente (verificar en GitHub)
git checkout 3.1.0

# Copiar configuración de ejemplo
cp docker/.env-non-dev docker/.env

# Editar variables importantes
nano docker/.env

Modifica las siguientes variables en el archivo .env:

# Cambiar estas claves por valores aleatorios seguros
SECRET_KEY=tu_clave_secreta_muy_larga_y_aleatoria
SUPERSET_SECRET_KEY=tu_clave_secreta_muy_larga_y_aleatoria

# URL pública de Superset
SUPERSET_LOAD_EXAMPLES=yes  # Desactivar en producción: no
# Iniciar todos los servicios
docker compose -f docker-compose-non-dev.yml up -d

# Ver estado de los contenedores
docker compose -f docker-compose-non-dev.yml ps

# Ver logs de inicialización
docker compose -f docker-compose-non-dev.yml logs -f superset

La primera vez que arranca, Superset inicializa la base de datos y carga ejemplos, lo que puede tardar 3-5 minutos.

Instalación Manual con pip

Para mayor control sobre la configuración:

# Instalar dependencias del sistema
sudo apt update
sudo apt install -y python3-pip python3-dev libmysqlclient-dev libssl-dev libffi-dev build-essential

# Crear entorno virtual
python3 -m venv /opt/superset-venv
source /opt/superset-venv/bin/activate

# Instalar Superset con conectores de bases de datos comunes
pip install apache-superset
pip install psycopg2-binary pymysql

# Crear archivo de configuración
sudo mkdir -p /etc/superset

Crea /etc/superset/superset_config.py:

import os

# Clave secreta - CAMBIAR en producción
SECRET_KEY = os.environ.get('SECRET_KEY', 'clave_super_secreta_cambiar')

# Base de datos de metadatos de Superset
SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://superset:password@localhost/superset'

# Configuración de caché con Redis
CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 300,
    'CACHE_KEY_PREFIX': 'superset_',
    'CACHE_REDIS_URL': 'redis://localhost:6379/0',
}

# Habilitar filtro de filas en resultados
ROW_LIMIT = 5000
# Exportar configuración
export SUPERSET_CONFIG_PATH=/etc/superset/superset_config.py

# Inicializar la base de datos
superset db upgrade

# Crear usuario administrador
superset fab create-admin \
  --username admin \
  --firstname Admin \
  --lastname User \
  --email [email protected] \
  --password contraseña_segura

# Cargar ejemplos (opcional)
superset load_examples

# Inicializar roles y permisos
superset init

# Iniciar el servidor de desarrollo (solo para pruebas)
superset run -p 8088 --with-threads --reload

Configuración Inicial

Accede a http://tu-ip:8088 y entra con las credenciales de administrador creadas.

La interfaz principal muestra:

  • Dashboards: lista de dashboards disponibles
  • Gráficos: biblioteca de visualizaciones guardadas
  • SQL Lab: editor SQL interactivo
  • Configuración: administración de usuarios, roles y conexiones

Conexión a Bases de Datos

Ve a Configuración → Conexiones a bases de datos → + Base de datos

# Cadenas de conexión para bases de datos comunes:

# PostgreSQL
postgresql+psycopg2://usuario:contraseña@host:5432/nombre_db

# MySQL
mysql+pymysql://usuario:contraseña@host:3306/nombre_db

# SQLite (solo para pruebas)
sqlite:////ruta/al/archivo.db

# Instalar driver adicional para ClickHouse
pip install clickhouse-connect

# Para BigQuery, instalar el conector oficial
pip install sqlalchemy-bigquery

En la interfaz:

  1. Selecciona el tipo de base de datos del desplegable
  2. Introduce la cadena de conexión (URI de SQLAlchemy)
  3. Haz clic en Probar conexión para verificar
  4. Ajusta las opciones avanzadas (tiempo máximo de consulta, esquemas expuestos)
  5. Guarda la configuración

Creación de Gráficos y Dashboards

Crear un conjunto de datos

  1. Ve a Datos → Conjuntos de datos → + Conjunto de datos
  2. Selecciona la base de datos, esquema y tabla
  3. O crea un dataset virtual con una consulta SQL personalizada

Crear un gráfico

  1. Clic en + → Gráfico
  2. Selecciona el dataset y el tipo de visualización (más de 40 tipos disponibles)
  3. Configura el eje X, métricas, dimensiones y filtros en el panel lateral
  4. Usa el panel de Personalización para ajustar colores y etiquetas
  5. Guarda el gráfico con un nombre descriptivo

Crear un dashboard

  1. Clic en + → Dashboard
  2. Arrastra gráficos desde el panel lateral al lienzo
  3. Añade filtros nativos para controlar múltiples gráficos simultáneamente
  4. Configura la actualización automática si necesitas datos en tiempo real
  5. Publica el dashboard para compartirlo con el equipo

SQL Lab

SQL Lab es un editor SQL completo con autocompletado, historial y visualización directa de resultados:

-- Ejemplo: análisis de ventas con SQL Lab
SELECT
    DATE_TRUNC('month', fecha_venta) AS mes,
    categoria,
    SUM(importe) AS total_ventas,
    COUNT(*) AS num_transacciones
FROM ventas
WHERE fecha_venta >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1, 2
ORDER BY 1, 3 DESC;

Características de SQL Lab:

  • Múltiples pestañas de consulta simultáneas
  • Autocompletado de tablas y columnas
  • Guardar consultas para reutilizar
  • Crear dataset directamente desde una consulta
  • Exportar resultados a CSV o JSON

Gestión de Usuarios y Roles

Superset usa un sistema de roles basado en Flask-AppBuilder:

RolPermisos
AdminAcceso total
AlphaCrear y editar dashboards y gráficos
GammaSolo visualizar dashboards asignados
sql_labAcceso al SQL Lab
PublicAcceso a contenido público
# Crear usuario desde línea de comandos
superset fab create-user \
  --role Alpha \
  --username analista1 \
  --firstname Ana \
  --lastname García \
  --email [email protected] \
  --password contraseña

# Listar usuarios existentes
superset fab list-users

Para Row Level Security (RLS): Seguridad → Filtros de seguridad a nivel de fila

Caché y Rendimiento

# Instalar Redis para caché
sudo apt install -y redis-server
sudo systemctl enable redis-server --now

# Verificar que Redis está activo
redis-cli ping

Configuración de caché en superset_config.py:

# Caché para dashboards y gráficos
DATA_CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 600,   # 10 minutos
    'CACHE_KEY_PREFIX': 'superset_data_',
    'CACHE_REDIS_URL': 'redis://localhost:6379/1',
}

# Caché para metadatos de tablas
TABLE_NAMES_CACHE_CONFIG = {
    'CACHE_TYPE': 'RedisCache',
    'CACHE_DEFAULT_TIMEOUT': 3600,  # 1 hora
    'CACHE_REDIS_URL': 'redis://localhost:6379/2',
}

# Límite de tiempo para consultas (segundos)
SQLLAB_TIMEOUT = 300
SUPERSET_WEBSERVER_TIMEOUT = 300
# Configurar workers de Celery para consultas asíncronas
pip install celery

# Iniciar worker de Celery
celery --app=superset.tasks.celery_app:app worker --pool=prefork -O fair -c 4

Solución de Problemas

Superset no arranca con Docker:

# Verificar logs de todos los servicios
docker compose -f docker-compose-non-dev.yml logs

# Reiniciar solo el servicio de Superset
docker compose -f docker-compose-non-dev.yml restart superset

Error "CSRF token missing":

# Añadir en superset_config.py
WTF_CSRF_ENABLED = True
WTF_CSRF_EXEMPT_LIST = []
WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365

Consultas que expiran:

# Aumentar el timeout en superset_config.py
SQLLAB_ASYNC_TIME_LIMIT_SEC = 600
SQLLAB_TIMEOUT = 600

No se ven las tablas de una base de datos:

# Forzar sincronización del esquema desde la interfaz
# Editar la conexión → Configuración avanzada → Sincronizar metadatos de tablas
# O desde la terminal:
superset sync_db --database-name "Nombre de tu DB"

Problema de memoria en consultas grandes:

# Limitar filas en resultados
ROW_LIMIT = 10000
SQL_MAX_ROW = 100000

Conclusión

Apache Superset es una solución de visualización de datos robusta y extensible que rivaliza con herramientas comerciales como Tableau o Power BI. La instalación con Docker simplifica enormemente el despliegue, mientras que la configuración de caché con Redis garantiza un rendimiento óptimo en entornos con múltiples usuarios. Con los roles y permisos adecuados, puedes democratizar el acceso a los datos en tu organización de forma segura y controlada.