Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ RFCs targeting v3.2.0 are tracked under [`tsc/rfcs/`](https://github.com/bitol-i
* **Adds** Apache Iceberg server type ([RFC 0049](https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0049-iceberg-server-type.md)):
* New `iceberg` server `type` describing access to Apache Iceberg catalogs through the standardized Iceberg REST API, with required `catalog` and `catalogUrl` plus optional `namespace` and `warehouse`.
* Non-breaking: adds a new optional server type.
* **Adds** Exasol server type ([RFC 0058](https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0058-exasol-server-type.md)):
* New `exasol` server `type` describing data served from Exasol, an in-memory MPP analytics database, with required `host` plus optional `port` (defaults to `8563`) and `schema`.
* No `database` field: an Exasol cluster runs a single database and the schema is the namespace. `host` may be a cluster connection range, e.g. `n11..14.acme.com`.
* Non-breaking: adds a new optional server type.
* **Changes** to Servers:
* Add optional Athena Server `workgroup` field and fix `stagingDir` to be optional in schema.

Expand Down
25 changes: 25 additions & 0 deletions docs/examples/server/exasol-server.odcs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2026 The Bitol Contributors
# SPDX-License-Identifier: Apache-2.0

# Demonstrates RFC-0058: the `exasol` server type for Exasol, an in-memory MPP
# analytics database. An Exasol cluster runs a single database, so the schema is
# the namespace and there is no `database` field.

version: 1.0.0
apiVersion: v3.2.0
kind: DataContract
id: 5c9a1e73-8d24-4f60-b1a7-6e0c3b5d9f42
status: active
servers:
- server: prod
type: exasol
host: exasol.acme.com
port: 8563
schema: SALES
schema:
- name: sales
physicalType: table
properties:
- name: sale_id
logicalType: string
required: true
14 changes: 13 additions & 1 deletion docs/infrastructure-servers.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ servers:
| id | string | ID | No | A unique identifier used to reduce the risk of collisions, such as a UUID. |
| roles | array | Roles | No | List of roles that have access to the server. Check [roles](./roles.md) section for more details. |
| server | string | Server | Yes | Identifier of the server. |
| type | string | Type | Yes | Type of the server. Can be one of: api, athena, azure, bigquery, clickhouse, cloudsql, custom, databricks, db2, denodo, dremio, duckdb, glue, hive, impala, informix, kafka, kinesis, local, mysql, oracle, postgres, postgresql, presto, pubsub, redshift, s3, sftp, snowflake, sqlserver, synapse, trino, vertica, zen. |
| type | string | Type | Yes | Type of the server. Can be one of: api, athena, azure, bigquery, clickhouse, cloudsql, custom, databricks, db2, denodo, dremio, duckdb, exasol, glue, hive, impala, informix, kafka, kinesis, local, mysql, oracle, postgres, postgresql, presto, pubsub, redshift, s3, sftp, snowflake, sqlserver, synapse, trino, vertica, zen. |
| customProperties | array | Custom Properties | No | Custom properties that are not part of the standard. |

## Specific Server Properties
Expand Down Expand Up @@ -160,6 +160,18 @@ If your server is not in the list, please use [custom](#custom-server) and sugge
| database | string | Database | Yes | Path to duckdb database file. |
| schema | string | Schema | No | The name of the schema. |

### Exasol

[Exasol](https://www.exasol.com/) is an in-memory, massively parallel processing (MPP) analytics database used as an enterprise data warehouse. Added in ODCS v3.2.0 ([RFC 0058](https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0058-exasol-server-type.md)).

An Exasol cluster runs a single database and the schema is the namespace, so there is no `database` field.

| Key | Type | UX Label | Required | Description |
| ------ | ------- | -------- | -------- | -------------------------------------------------------------------------------------- |
| host | string | Host | Yes | Host of the Exasol server. May be a cluster connection range, e.g. `n11..14.acme.com`. |
| port | integer | Port | No | Port of the Exasol server. Defaults to 8563. |
| schema | string | Schema | No | Name of the schema. |

### Amazon Glue

| Key | Type | UX Label | Required | Description |
Expand Down
44 changes: 43 additions & 1 deletion schema/odcs-json-schema-latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@
"description": "Type of the server.",
"enum": [
"api", "athena", "azure", "bigquery", "clickhouse", "databricks", "denodo", "dremio",
"duckdb", "glue", "hana", "cloudsql", "db2", "hive", "iceberg", "impala", "informix", "kafka", "kinesis", "local",
"duckdb", "exasol", "glue", "hana", "cloudsql", "db2", "hive", "iceberg", "impala", "informix", "kafka", "kinesis", "local",
"mysql", "oracle", "postgresql", "postgres", "presto", "pubsub",
"redshift", "s3", "sftp", "snowflake", "sqlserver", "synapse", "trino", "vertica", "zen", "custom"
]
Expand Down Expand Up @@ -380,6 +380,19 @@
"$ref": "#/$defs/ServerSource/DuckdbServer"
}
},
{
"if": {
"properties": {
"type": {
"const": "exasol"
}
},
"required": ["type"]
},
"then": {
"$ref": "#/$defs/ServerSource/ExasolServer"
}
},
{
"if": {
"properties": {
Expand Down Expand Up @@ -963,6 +976,35 @@
"database"
]
},
"ExasolServer": {
"type": "object",
"title": "ExasolServer",
"properties": {
"host": {
"type": "string",
"description": "Host of the Exasol server. May be a cluster connection range.",
"examples": [
"exasol.acme.com",
"n11..14.acme.com"
]
},
"port": {
"$ref": "#/$defs/Port",
"description": "Port of the Exasol server.",
"default": 8563,
"examples": [
8563
]
},
"schema": {
"type": "string",
"description": "Name of the schema."
}
},
"required": [
"host"
]
},
"GlueServer": {
"type": "object",
"title": "GlueServer",
Expand Down
44 changes: 43 additions & 1 deletion schema/odcs-json-schema-v3.2.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@
"description": "Type of the server.",
"enum": [
"api", "athena", "azure", "bigquery", "clickhouse", "databricks", "denodo", "dremio",
"duckdb", "glue", "hana", "cloudsql", "db2", "hive", "iceberg", "impala", "informix", "kafka", "kinesis", "local",
"duckdb", "exasol", "glue", "hana", "cloudsql", "db2", "hive", "iceberg", "impala", "informix", "kafka", "kinesis", "local",
"mysql", "oracle", "postgresql", "postgres", "presto", "pubsub",
"redshift", "s3", "sftp", "snowflake", "sqlserver", "synapse", "trino", "vertica", "zen", "custom"
]
Expand Down Expand Up @@ -379,6 +379,19 @@
"$ref": "#/$defs/ServerSource/DuckdbServer"
}
},
{
"if": {
"properties": {
"type": {
"const": "exasol"
}
},
"required": ["type"]
},
"then": {
"$ref": "#/$defs/ServerSource/ExasolServer"
}
},
{
"if": {
"properties": {
Expand Down Expand Up @@ -962,6 +975,35 @@
"database"
]
},
"ExasolServer": {
"type": "object",
"title": "ExasolServer",
"properties": {
"host": {
"type": "string",
"description": "Host of the Exasol server. May be a cluster connection range.",
"examples": [
"exasol.acme.com",
"n11..14.acme.com"
]
},
"port": {
"$ref": "#/$defs/Port",
"description": "Port of the Exasol server.",
"default": 8563,
"examples": [
8563
]
},
"schema": {
"type": "string",
"description": "Name of the schema."
}
},
"required": [
"host"
]
},
"GlueServer": {
"type": "object",
"title": "GlueServer",
Expand Down
19 changes: 19 additions & 0 deletions src/script/negative-tests/exasol-missing-host.odcs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright 2026 The Bitol Contributors
# SPDX-License-Identifier: Apache-2.0

# RFC-0058 negative test: an `exasol` server requires `host`. Here `host` is
# omitted, so the schema MUST reject this contract.

version: 1.0.0
apiVersion: v3.2.0
kind: DataContract
id: 6d0b2f84-9e35-4a71-c2b8-7f1d4c6e0a53
status: active
servers:
- server: prod
type: exasol
port: 8563
schema: SALES
schema:
- name: sales
physicalType: table
Loading