Apache Superset is an open-source BI platform for exploring and visualizing data at warehouse scale. It connects to any database with a SQLAlchemy driver, ships a SQL IDE called SQL Lab, a no-code chart explorer, and a dashboard builder with cross-filtering. Originally built at Airbnb and now a top-level Apache project, it is the common self-hosted alternative to Tableau or Looker for teams that want their BI layer in Python and under their own control.

Datasets, the semantic layer, and charts

Superset sits on a dataset abstraction: you register a physical table or a saved SQL query as a dataset, then define calculated columns, metrics, and column formatting on it once. Every chart built from that dataset inherits those definitions, which gives you a lightweight semantic layer without a separate modeling language. A metric is stored as the SQL expression Superset injects into the SELECT:

-- A dataset metric definition
SUM(CASE WHEN status = 'completed' THEN amount_usd ELSE 0 END)

-- Superset generates roughly:
SELECT region,
       SUM(CASE WHEN status = 'completed' THEN amount_usd ELSE 0 END) AS revenue
FROM orders
GROUP BY region
ORDER BY revenue DESC
LIMIT 10000;

Charts are configured in the Explore view - pick a dataset, drag metrics and dimensions, choose a visualization - and saved charts are dropped onto dashboards where native filters and cross-filtering tie them together.

SQL Lab, caching, and async queries

SQL Lab is the ad-hoc editor: write SQL against any connected database, preview results, and save a query as a virtual dataset. For slow warehouses, Superset runs queries asynchronously through a Celery worker pool backed by a results backend (Redis or S3), so long queries don't hold the web request open. Chart results are cached in Redis or Memcached keyed by the query, with per-dataset cache timeouts, so a popular dashboard reads cache instead of re-hitting the warehouse.

LayerRole
Database connectionSQLAlchemy URI to Postgres, BigQuery, Snowflake, Trino, etc.
DatasetTable or saved SQL plus metrics and calculated columns
ChartOne visualization over a dataset, saved and reusable
DashboardCharts plus native filters and cross-filtering

Deployment and security

Superset is a Python (Flask) app; production runs the web server under Gunicorn, Celery workers for async and scheduled work, a metadata database (use Postgres, not SQLite), and Redis for caching and the message queue. Access control is role-based down to the database, dataset, and row level - row-level security filters are SQL predicates attached to a dataset and applied per role. Feature flags in superset_config.py gate things like dashboard cross-filters, alerts, and reports, so review that config when an expected feature is missing.

Frequently asked questions

Does Superset store my data? No. It queries the source database live and caches only query results in Redis/Memcached plus its own metadata (datasets, charts, dashboards) in Postgres.

How does it compare to Metabase? Superset scales to more chart types, a richer SQL Lab, and finer access control, at the cost of a heavier deployment. Metabase is simpler to stand up for self-serve. For a code-defined governed metric layer, see Looker.

Can it send scheduled reports? Yes - alerts and reports run on Celery beat, render a dashboard or chart via a headless browser, and deliver to email or Slack. The feature requires the reporting feature flag and a working headless Chrome.

What databases does it support? Anything with a SQLAlchemy dialect, including Postgres, MySQL, BigQuery, Snowflake, Redshift, Trino/Presto, ClickHouse, and Druid.