Skip to content

Apache Superset

Apache Superset connects to Elasticsearch via the Arrow Flight SQL protocol, enabling full SQL dashboards and data exploration. Superset is a Tested tool: the tier rests on the elastiq SQLAlchemy dialect that ships with the Docker demo (demo/superset/), which is the configuration the Superset workload was validated against.

Some advanced SQL (subqueries, CTEs) is not in this release yet — see Known Limitations.

Prerequisites

Quick Start with Docker

The demo includes a pre-configured Superset with sample e-commerce dashboards. The docker-compose.yml that defines the superset-flight profile lives in the demo/ directory of the SoftClient4ES repository — run the command from there:

Terminal window
git clone https://github.com/SOFTNETWORK-APP/SoftClient4ES.git
cd SoftClient4ES/demo
docker compose --profile superset-flight up

Then open Superset at http://localhost:8088.

Manual Setup

Use this path if you already run Superset and only want to add Elasticsearch as a data source.

1. Install the elastiq SQLAlchemy dialect

Superset reaches databases through SQLAlchemy, so it needs a package that registers a SQLAlchemy dialect. adbc-driver-flightsql is an ADBC/DBAPI driver: it registers no sqlalchemy.dialects entry point, so a SQLAlchemy URI built on its name resolves to nothing.

SoftClient4ES ships the dialect that does: elastiq, a thin subclass of the FlightSQLDialect that flightsql-dbapi provides. It lives in demo/superset/ of the SoftClient4ES repository — the same dialect the Docker demo image installs.

From a checkout of that repository (the Quick Start above clones it), assemble and install the package. The packaging metadata ships as setup_dialect.py; the demo image renames it to setup.py at build time, so do the same here:

Terminal window
mkdir -p /tmp/elastiq-dialect
cp demo/superset/elastic_dialect.py /tmp/elastiq-dialect/elastic_dialect.py
cp demo/superset/setup_dialect.py /tmp/elastiq-dialect/setup.py
pip install /tmp/elastiq-dialect

Run that in the Python environment Superset itself runs in. The install adds flightsql-dbapi if it is not already present, and registers elastiq as a SQLAlchemy dialect. Note that flightsql-dbapi requires sqlalchemy < 2.0, so install it into an environment that is already on SQLAlchemy 1.x rather than letting pip downgrade a working one. Restart Superset so it picks up the new entry point.

On the official apache/superset image that environment is /app/.venv, and its pip is not installed by default — the demo image bootstraps it with python -m ensurepip and then runs python -m pip install, both from /app/.venv/bin/ (see demo/superset/Dockerfile). A package installed into a running container with docker exec is also lost on the next restart, so for a container deployment add these steps to a derived image rather than installing into a live container.

2. Add Database Connection

  1. Go to Settings > Database Connections > + Database
  2. Select Other as the database type
  3. Enter the SQLAlchemy URI, pointing at your Arrow Flight SQL server:
elastiq://localhost:32010?insecure=true

Substitute your own host and port for localhost:32010 — if Superset itself runs in a container, localhost is that container, not your machine. insecure=true selects a plaintext gRPC connection, the same transport the grpc:// URI uses in the Arrow Flight SQL guide; keep it to a trusted network.

3. Create Charts and Dashboards

Once connected, you can use the full SoftClient4ES SQL syntax directly in Superset:

SELECT
customer_name,
SUM(total_price) AS revenue,
COUNT(*) AS orders
FROM ecommerce
GROUP BY customer_name
ORDER BY revenue DESC;

Cross-index JOIN

The superpower of this release: Elasticsearch SQL can’t JOIN across indices — SoftClient4ES does, and the JOIN runs straight through Superset’s Flight SQL dialect. In SQL Lab, join two indices in one query:

SELECT e.name, e.salary, d.dept_name
FROM jdbc_join_emp e
JOIN jdbc_join_dept d ON e.dept_id = d.dept_id;
-- 5 rows (the orphan employee with dept_id=99 is dropped by the INNER JOIN)

Build a chart or dashboard directly on the joined result set.

For the full JOIN matrix (INNER / LEFT / RIGHT / FULL / cross-cluster), see the Cross-Index JOIN walkthrough. JOIN depth and cluster count are metered — see Pricing.

Apache Superset SQL Lab showing a cross-index JOIN result between jdbc_join_emp and jdbc_join_dept

Screenshot coming in a follow-up release. Captured with Apache Superset against SoftClient4ES 0.2.1 (Arrow Flight SQL), 2026-06.

Supported Features

FeatureStatus
SELECT queriesTested
Aggregations (GROUP BY)Tested
Window functionsTested
DDL (CREATE/ALTER/DROP)Tested
DML (INSERT/UPDATE/DELETE)Tested
SHOW/DESCRIBETested
Chart creationTested
Dashboard creationTested
Cross-index JOINCompatible (JOIN runs via the Flight SQL server; verify before upgrading to Tested)

Known limitations

Subqueries, CTEs (WITH), and set operators beyond UNION ALL are not in this release — and the Question/chart builder can auto-generate them. See Known Limitations & Roadmap for exactly what works today, what’s coming in the next release (Quarter 4 2026), and the per-tool workaround.

License

Superset integration uses the Arrow Flight SQL server, licensed under the Elastic License 2.0.