diff --git a/README.md b/README.md index 5ff02bc8..dffc9b21 100644 --- a/README.md +++ b/README.md @@ -386,21 +386,36 @@ SoftClient4ES uses a dual-license model: - **Core** (SQL engine, REPL client, Scala library) — **Apache License 2.0** (open source) - **JDBC Driver**, **Arrow Flight SQL**, **ADBC Driver**, and **Materialized Views** — **Elastic License 2.0** (free to use, not open source) -### Feature Matrix - -| Feature | Community | Pro | Enterprise | -|--------------------------------------------------------------------|-----------|---------|------------| -| Full SQL DDL (CREATE, ALTER, DROP TABLE) | Yes | Yes | Yes | -| Full SQL DML (INSERT, UPDATE, DELETE, COPY INTO) | Yes | Yes | Yes | -| Full SQL DQL (SELECT, JOIN UNNEST, aggregations, window functions) | Yes | Yes | Yes | -| Pipelines, Watchers, Enrich Policies | Yes | Yes | Yes | -| Interactive REPL client | Yes | Yes | Yes | -| Scala library (Akka Streams) | Yes | Yes | Yes | -| Elasticsearch 6, 7, 8, 9 support | Yes | Yes | Yes | -| JDBC driver (DBeaver, Tableau, etc.) | Yes | Yes | Yes | -| Arrow Flight SQL server + ADBC driver | Yes | Yes | Yes | -| Materialized Views (CREATE, REFRESH, DESCRIBE) | Max 3 | Limited | Unlimited | -| Priority support | - | - | Yes | +### Editions & pricing + +Every tier has **every feature** — including all client drivers. You pay for +**scale**, metered by quotas, not for unlocking capabilities. + +The two things Elasticsearch cannot do natively — and that DIY can't either — +are available on **every** tier: + +- **Query-time cross-index JOIN** — on every surface (REPL, JDBC, ADBC, + Arrow Flight SQL, Federation). JOIN *depth* is metered. +- **Persisted Materialized Views** — pre-joined / pre-aggregated indices. + +| | **Community** | **Pro** | **Enterprise** | +|---|---|---|---| +| **Price** | Free | **€129/mo** · €1,290/yr | **from €12,000/year** | +| Full SQL (DDL · DML · DQL · window functions) | Yes | Yes | Yes | +| Client drivers — JDBC · ADBC · REPL | **Free** | Free | Free | +| Arrow Flight SQL server | Yes | Yes | Yes | +| Cross-index JOINs per query | **2** | 5 | Unlimited | +| Federation (cross-cluster) | **1 cluster** | up to 5 clusters | Unlimited | +| Materialized Views | **1** | 50 | Unlimited | +| Max query results | 10,000 | 1,000,000 | Unlimited | +| ES 6 / 7 / 8 / 9 support | Yes | Yes | Yes | +| Support | Community | Email / 48h | Priority / 4h SLA | +| SSO · air-gapped licensing · custom quotas | — | — | Yes | + +> Single-cluster cross-index JOINs and one Materialized View are **free** in +> Community — taste both superpowers, then scale up by cluster count, JOIN +> depth, and MV volume. See the +> [pricing page](https://softclient4es.dev/licensing/) for details. ### Elasticsearch License Requirements diff --git a/documentation/sql/dql_statements.md b/documentation/sql/dql_statements.md index 7e20d21b..9fd32d32 100644 --- a/documentation/sql/dql_statements.md +++ b/documentation/sql/dql_statements.md @@ -1461,7 +1461,6 @@ Returns the current license type, quota values, expiration date, and grace statu | `max_materialized_views` | Maximum number of materialized views allowed, or "unlimited" | | `max_clusters` | Maximum number of federated clusters allowed, or "unlimited" | | `max_result_rows` | Maximum rows returned per query, or "unlimited" | -| `max_concurrent_queries` | Maximum concurrent queries allowed, or "unlimited" | | `max_joins` | Maximum number of JOIN operations allowed per query, or "unlimited" | | `expires_at` | License expiration timestamp, or "never" for Community | | `days_remaining` | Days until expiration, or -1 for Community (no expiry) | @@ -1473,9 +1472,9 @@ Returns the current license type, quota values, expiration date, and grace statu SHOW LICENSE; ``` -| license_type | trial | platform | max_materialized_views | max_clusters | max_result_rows | max_concurrent_queries | max_joins | expires_at | days_remaining | status | -|---|---|---|---|---|---|---|---|---|---|---| -| Community | false | PRODUCTION | 3 | 1 | 10000 | 5 | 1 | never | -1 | Active | +| license_type | trial | platform | max_materialized_views | max_clusters | max_result_rows | max_joins | expires_at | days_remaining | status | +|---|---|---|---|---|---|---|---|---|---| +| Community | false | PRODUCTION | 1 | 1 | 10000 | 2 | never | -1 | Active | 📊 1 row(s) (1ms) --- diff --git a/documentation/sql/materialized_views.md b/documentation/sql/materialized_views.md index 56c96824..01eaf4e7 100644 --- a/documentation/sql/materialized_views.md +++ b/documentation/sql/materialized_views.md @@ -474,7 +474,7 @@ DROP MATERIALIZED VIEW IF EXISTS orders_with_customers_mv; |---------------------------------------------|----------------------------------------------------------------------| | **UNNEST JOIN** | Not supported in materialized views | | **`RIGHT JOIN` / `FULL OUTER JOIN`** | Not supported (see below). Use `LEFT JOIN` with swapped table order. | -| **Quota limits** | Community edition: max 3 views. Pro: limited. Enterprise: unlimited | +| **Quota limits** | Community: 1 view · Pro: 50 · Enterprise: unlimited | | **Watcher dependency (ES license)** | Automatic enrich policy re-execution relies on Elasticsearch Watchers, which require an Elasticsearch Platinum or Enterprise license (see below) | | **Eventual consistency** | Data is eventually consistent based on refresh frequency and delay | | **Join cardinality** | JOINs use enrich policies which match on a single field |