Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
130837f
Update custom-other-properties.md
DatSciMeMa May 5, 2026
e1fcce8
fix(schema): mark dataProduct as deprecated in v3.1.0
jgperrin May 5, 2026
946dbdb
Update vendors.md
nightmoose May 5, 2026
00f7193
Merge pull request #272 from nightmoose/main
jgperrin May 5, 2026
244357e
schema: add v3.1.0-20260505 dated snapshot for the deprecation silent…
jgperrin May 5, 2026
900dc4e
Merge pull request #270 from bitol-io/DatSciMeMa-update_description_c…
jgperrin May 5, 2026
d4c2fb7
Update custom-other-properties.md
DatSciMeMa May 5, 2026
842b80c
Merge pull request #275 from bitol-io/DatSciMeMa-patch-1-fix_avis_pos…
jgperrin May 5, 2026
78bcf0a
Merge pull request #274 from jgperrin/fix/226-dataproduct-deprecated-…
jgperrin May 5, 2026
7539af4
docs(vendors): add FLUID Forge CLI
fas89 May 24, 2026
c3d7da2
Merge pull request #279 from fas89/docs/vendors-add-fluid-forge
andrewrjones May 24, 2026
c4fd50f
Update vendors.md
simonharrer Jun 2, 2026
e6a1c66
Merge pull request #283 from bitol-io/simonharrer-patch-3
simonharrer Jun 2, 2026
e62cebe
fix: use #/ in external shorthand reference example (#287)
jgperrin Jun 23, 2026
8ac22e9
docs: add Collate (OpenMetadata) to vendors list (#286)
jgperrin Jun 23, 2026
e558968
fix: accept .yml extension in FullyQualifiedReference pattern (#285)
jgperrin Jun 23, 2026
d0cb739
fix: sync .yml extension into v3.2.0 rolling schema + changelog (#288)
jgperrin Jun 24, 2026
e2cd39f
docs: document logicalType at the object level (#289)
jgperrin Jun 24, 2026
4b89da9
Merge main into dev-v3.2.0: reconcile dev<->main drift
Jun 24, 2026
f41e971
Merge pull request #291 from bitol-io/reconcile/main-into-v320
jgperrin Jun 24, 2026
1a417fc
feat(rfc-0043): add optional `encoding` field to server definitions (…
jgperrin Jun 30, 2026
b213a1c
Update infrastructure-servers.md
jgperrin Jun 30, 2026
04bf598
feat(rfc-0028): add optional `deprecated` flag to schema objects and …
jgperrin Jun 30, 2026
6f03298
feat(rfc-0035): add optional `vendor` field to customProperties (#295)
jgperrin Jun 30, 2026
b70d585
chore: renumber deprecated-flag RFC 0028 → 0051 (#296)
jgperrin Jun 30, 2026
16341fe
feat(rfc-0042): add `vector` logicalType for embeddings (#297)
jgperrin Jun 30, 2026
09b06f4
feat(rfc-0045): add `hana` server type for SAP HANA (#298)
jgperrin Jun 30, 2026
3e64277
feat(rfc-0046): allow customProperties and authoritativeDefinitions o…
jgperrin Jun 30, 2026
28a06f5
feat(rfc-0050): variables — ${VAR_NAME} interpolation, incl. POSIX de…
jgperrin Jul 13, 2026
76e124e
feat(rfc-0047): add optional `id` to relationship objects (#302)
jgperrin Jul 14, 2026
7357f05
feat(rfc-0049): add `iceberg` server type (#303)
jgperrin Jul 14, 2026
cb036d2
docs(context): restore authoritativeDefinitions example (ontology/glo…
jgperrin Jul 14, 2026
acb7f79
feat(rfc-0050): allow string values in server port fields (#307)
jochenchrist Jul 19, 2026
7c01759
feat(rfc-0058): add `exasol` server type (#313)
jgperrin Aug 5, 2026
da17cea
docs(servers): add a definition to every server type, spell out HCL/I…
jgperrin Aug 5, 2026
ea1fc27
Merge dev into dev-v3.2.0 (conflicts resolved)
jgperrin Aug 5, 2026
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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,18 @@ RFCs targeting v3.2.0 are tracked under [`tsc/rfcs/`](https://github.com/bitol-i
* The POSIX `${VAR_NAME:-default}` form supplies an inline default, used when the variable is unset or empty.
* Tools MUST resolve references before using a value, SHOULD error on unresolvable references (never silently substitute an empty string), and MUST preserve unresolved tokens verbatim when serializing back to YAML.
* Non-breaking: no new section or field is added to the standard; interpolation applies to string values only.
* Server `port` fields now accept a string in addition to an integer, so they can hold a variable reference such as `${DB_PORT}` or `${DB_PORT:-5432}`, which the previous integer-only type rejected.
* **Adds** `id` to relationship objects ([RFC 0047](https://github.com/bitol-io/tsc/blob/main/rfcs/approved/odcs-v3.2.0/0047-relationship-id.md)):
* New optional `id` string on `RelationshipBase` (surfaced on both schema-level and property-level relationships), completing the stable-identifier work of RFC-0026a for the last referenceable array-item object that lacked one.
* MUST be unique within its containing `relationships` array; SHOULD be stable across contract versions; cannot contain `.` `#` `/` `\` `@` `!` `%` `&` `^`.
* Non-breaking, as `id` is optional.
* **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
2 changes: 1 addition & 1 deletion docs/examples/fundamentals/variables.odcs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ servers:
environment: prod
type: postgresql
host: ${DB_HOST}
port: 5432
port: ${DB_PORT:-5432}
database: ${DB_NAME:-orders}
schema: ${DB_SCHEMA:-public}

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
80 changes: 64 additions & 16 deletions docs/infrastructure-servers.md

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions docs/variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ servers:
environment: prod
type: postgresql
host: ${DB_HOST}
port: 5432
port: ${DB_PORT:-5432}
database: ${DB_NAME:-orders}
schema: ${DB_SCHEMA:-public}
```
Expand Down Expand Up @@ -53,7 +53,8 @@ quality:

## Notes

* Interpolation applies to **string** values only. A field typed as an integer or boolean in the JSON schema (such as a server `port`) cannot hold a variable reference: the unresolved token is a string and the schema rejects it.
* Interpolation applies to **string** values only. A field typed as an integer or boolean in the JSON schema cannot hold a variable reference: the unresolved token is a string and the schema rejects it.
* The server `port` is an exception: the schema accepts an integer or a string, so it can hold a variable reference such as `${DB_PORT}` or `${DB_PORT:-5432}`.
* No new section or field is added to the standard: a contract using variables validates against the standard JSON schema as-is.

[Back to TOC](README.md)
86 changes: 66 additions & 20 deletions schema/odcs-json-schema-latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,10 @@
"description": "Stable technical identifier for references. Must be unique within its containing array. Cannot contain special characters ('-', '_' allowed).",
"pattern": "^[A-Za-z0-9_-]+$"
},
"Port": {
"type": ["integer", "string"],
"description": "A network port: an integer, or a string, e.g. to hold a variable reference such as ${DB_PORT} resolved at runtime (RFC 0050)."
},
"Server": {
"type": "object",
"description": "Data source details of where data is physically stored.",
Expand All @@ -233,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 @@ -376,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 @@ -859,7 +876,7 @@
"description": "The host of the ClickHouse server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the ClickHouse server."
},
"database": {
Expand Down Expand Up @@ -907,7 +924,7 @@
"description": "The host of the Denodo server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the Denodo server."
},
"database": {
Expand All @@ -929,7 +946,7 @@
"description": "The host of the Dremio server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the Dremio server."
},
"schema": {
Expand Down Expand Up @@ -959,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 Expand Up @@ -1020,7 +1066,7 @@
"description": "The host of the Google Cloud Sql server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the Google Cloud Sql server."
},
"database": {
Expand Down Expand Up @@ -1048,7 +1094,7 @@
"description": "The host of the IBM DB2 server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the IBM DB2 server."
},
"database": {
Expand All @@ -1075,7 +1121,7 @@
"description": "The host to the Hive server. "
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the Hive server. Defaults to 10000."
},
"database": {
Expand All @@ -1097,7 +1143,7 @@
"description": "The host to the Impala server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the Impala server. Defaults to 21050."
},
"database": {
Expand All @@ -1119,7 +1165,7 @@
"description": "The host to the Informix server. "
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the Informix server. Defaults to 9088."
},
"database": {
Expand All @@ -1141,7 +1187,7 @@
"description": "Hostname or IP address of the Zen server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "Zen server SQL connections port. Defaults to 1583."
},
"database": {
Expand Down Expand Up @@ -1208,7 +1254,7 @@
"description": "Relative or absolute path to the data file(s)."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "Port to the server. No default value is assumed for custom servers."
},
"project": {
Expand Down Expand Up @@ -1355,7 +1401,7 @@
"description": "The host of the MySql server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the MySql server."
},
"database": {
Expand All @@ -1381,7 +1427,7 @@
]
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the oracle server.",
"examples": [
1523
Expand Down Expand Up @@ -1410,7 +1456,7 @@
"description": "The host to the Postgres server"
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the Postgres server."
},
"database": {
Expand Down Expand Up @@ -1438,7 +1484,7 @@
"description": "Host of the HANA server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "Port of the HANA server."
},
"database": {
Expand Down Expand Up @@ -1664,7 +1710,7 @@
"description": "The host to the Snowflake server"
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the Snowflake server."
},
"account": {
Expand Down Expand Up @@ -1702,7 +1748,7 @@
]
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port to the database server.",
"default": 1433,
"examples": [
Expand Down Expand Up @@ -1739,7 +1785,7 @@
"description": "The host of the Synapse server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the Synapse server."
},
"database": {
Expand All @@ -1765,7 +1811,7 @@
]
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The Trino port."
},
"catalog": {
Expand Down Expand Up @@ -1799,7 +1845,7 @@
"description": "The host of the Vertica server."
},
"port": {
"type": "integer",
"$ref": "#/$defs/Port",
"description": "The port of the Vertica server."
},
"database": {
Expand Down
Loading
Loading