Skip to content

Tableau

Tableau connects to Elasticsearch through the SoftClient4ES JDBC driver.

Compatible — the JDBC protocol works; we have not run Tableau through formal regression. Best-effort.

What works, what’s coming

Tableau live connections can auto-generate nested subqueries, which are not in this release yet.

Workaround: use Extract mode, or a Custom SQL connection with explicit JOIN … ON … queries. Great for explicit JOIN SQL — full BI-tool subquery / CTE support is coming in the next release (Quarter 4 2026).

See Known Limitations for the full picture of what the current release does and doesn’t cover.

Connect

Tableau’s generic JDBC connector (“Other Databases (JDBC)”) connects to SoftClient4ES:

  1. Download the SoftClient4ES JDBC fat JAR for your Elasticsearch version (e.g. softclient4es8-jdbc-driver-0.2.4.jar) and place it in ~/.tableau/Drivers.
  2. Restart Tableau.
  3. Connect → To a Server → Other Databases (JDBC).
  4. Fill in:
    • URL: jdbc:elastic://localhost:9200
    • Dialect: MySQL (closest ANSI-SQL dialect for Tableau’s generic JDBC)
    • For authentication, append URL parameters: jdbc:elastic://es.example.com:9243?scheme=https&user=elastic&password=changeme

The driver class is app.softnetwork.elastic.jdbc.ElasticDriver (the JAR registers it automatically). The fat JAR is self-contained and Scala-version-independent — no Scala suffix to choose.

Browse

Once connected, your Elasticsearch indices appear as tables in the data-source picker. Drag a table onto the canvas to preview its columns, or switch to New Custom SQL to run a query directly.

Cross-index JOIN

The superpower of this release: Elasticsearch SQL can’t JOIN across indices — SoftClient4ES does. Use a Custom SQL data source with explicit JOINs (this avoids Tableau’s live-connection subquery generation):

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)

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.

Screenshot

Tableau Custom SQL showing a cross-index JOIN result between jdbc_join_emp and jdbc_join_dept

Screenshot coming in a follow-up release. Captured with Tableau against SoftClient4ES 0.2.1 (JDBC), 2026-07.

License

The JDBC driver is licensed under the Elastic License 2.0 — free to use, not open source.