This document tracks the history and evolution of the Open Data Contract Standard.
v3.2.0 "Peter Flook" - APPROVED
This release is dedicated to the memory of our friend and longtime contributor Peter Flook, whose work shaped many parts of ODCS, from data quality testing to the negative-test suite, schema validation, documentation, and vendor onboarding. We carry his contributions forward in this version and beyond.
RFCs targeting v3.2.0 are tracked under tsc/rfcs/.
- Adds Enumerations (RFC 0033):
- New
enumarray on schema properties to constrain a property to a fixed set of allowed values. - Each
enumentry is an object withvalue(required) plus optionallabel,id,description,tags,customProperties, andauthoritativeDefinitions. enumentries must be unique and the array must contain at least one value.- Adds Maps (RFC 0030):
- New
mapvalue forlogicalTypeto represent key/value (dictionary) structures common in Databricks, Snowflake, BigQuery, Spark, and Avro. - Companion
mapobject on schema properties with requiredkeyandvaluesub-definitions; both follow the standard property shape (logicalType, description, nested properties/items, etc.). mapis required wheneverlogicalType: mapis set.- Adds Context block for AI and semantic interoperability (RFC 0038):
- New optional
contextblock at the data contract and schema object levels, withinstructions,verifiedStatements, andconstraints. - Adds
glossary,ontology, andtaxonomyto the recommendedauthoritativeDefinitions.typevalues. - Adds Measures and Dimensions (RFC 0034):
- New optional
semanticTypefield on schema properties, declaring the semantic role a property plays:column(the default),measure, ordimension. - A
measureis an aggregated value (e.g.,SUM(revenue)) whose aggregation expression lives intransformLogic; adimensionis a categorical attribute for grouping and filtering. - Non-breaking: properties without
semanticTyperemain implicit columns. Measures and dimensions reuse the full property shape (name, logicalType, logicalTypeOptions, businessName, transformLogic, etc.) with no new top-level structures. - Adds Synonyms (RFC 0041):
- New optional
synonymsarray on schema objects and properties, recording alternative names for catalogs, AI/LLM tools, and natural language interfaces. - Each
synonymsentry is an object with a requiredsynonymplus optionalid,description,locale(BCP 47),source,status, andcustomProperties. - Allowed only on schema objects and properties; non-breaking, as
synonymsis optional. - Adds Physical data encoding (RFC 0043):
- New optional
encodingstring field on server definitions that expose serialized payloads (Azure, Glue, Custom, Kafka, Kinesis, Local, S3, SFTP), declaring the expected character encoding of the data, e.g.UTF-8,ISO-8859-1,ASCII,UTF-16. - Free-form string (no enum), default
UTF-8; documents physical-payload encoding separately from the ODCS document encoding. Non-breaking, asencodingis optional. - Adds Deprecated flag (RFC 0051, shared with ODPS v1.1.0):
- New optional
deprecatedboolean on schema objects and properties (including nested properties), indicating an element is no longer recommended for use. - Defaults to
false; deprecated elements remain documented and validated for backward compatibility. Non-breaking, asdeprecatedis optional. - Adds Vendor attribution for custom properties (RFC 0035, shared with ODPS v1.1.0 and OORS v1.0.0):
- New optional
vendorstring oncustomPropertiesitems, associating a custom property with a specific vendor, provider, or external system. - SHOULD be a stable, lowercase identifier (
^[a-z0-9][a-z0-9-]*$); not enforced, and tools MUST preserve unknown vendor values. Non-breaking, asvendoris optional. - Adds Vector type (RFC 0042):
- New
vectorvalue forlogicalType, describing a fixed-dimension dense numeric array for embeddings and similarity search. - Dedicated
logicalTypeOptionsforvector: requireddimensions(positive integer) plus optionalelementType,distanceMetric,normalized,embeddingModel, andembeddingModelVersion. - Non-breaking:
vectoris a new optionallogicalTypevalue. - Adds SAP HANA server type (RFC 0045):
- New
hanaservertypefor SAP HANA, with requiredhostplus optionalport,database(tenant), andschema. - Non-breaking: adds a new optional server type.
- Adds SLA custom properties and authoritative definitions (RFC 0046):
- Each
slaProperties[]entry may now carry optionalcustomPropertiesandauthoritativeDefinitions, consistent with other ODCS objects. - Non-breaking: both fields are optional.
- Adds Variables (RFC 0050, shared with ODPS v1.1.0 and OORS v1.0.0):
- Any string value in a contract MAY contain
${VAR_NAME}references, resolved at runtime by tooling, keeping secrets and environment-specific values (hostnames, bucket paths, credentials) out of the document itself. - 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
portfields 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
idto relationship objects (RFC 0047): - New optional
idstring onRelationshipBase(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
relationshipsarray; SHOULD be stable across contract versions; cannot contain.#/\@!%&^. - Non-breaking, as
idis optional. - Adds Apache Iceberg server type (RFC 0049):
- New
icebergservertypedescribing access to Apache Iceberg catalogs through the standardized Iceberg REST API, with requiredcatalogandcatalogUrlplus optionalnamespaceandwarehouse. - Non-breaking: adds a new optional server type.
- Adds Exasol server type (RFC 0058):
- New
exasolservertypedescribing data served from Exasol, an in-memory MPP analytics database, with requiredhostplus optionalport(defaults to8563) andschema. - No
databasefield: an Exasol cluster runs a single database and the schema is the namespace.hostmay be a cluster connection range, e.g.n11..14.acme.com. - Non-breaking: adds a new optional server type.
- Adds Teradata server type (RFC 0057):
- New
teradataservertypedescribing data served from Teradata Vantage, with requiredhostplus optionalport(defaults to1025) anddatabase. - No
schemafield: in Teradata, the database is the namespace. - Non-breaking: adds a new optional server type.
- Adds Actian server types (RFC 0059):
- New
ingresservertype(Actian Ingres, OLTP RDBMS) with requireddatabaseandhostplus optionalport(defaults to21064). - New
vectorwiseservertype(Actian Analytics Engine, columnar analytical DBMS) with requireddatabaseandhostplus optionalport(defaults to21064). - New
versantservertype(Actian NoSQL Database, object DBMS) with requireddatabaseplus optionalhost(defaults tolocalhost) andport(defaults to5019). - New
poetservertype(Actian NoSQL FastObjects, object DBMS) with requireddatabaseplus optionalhost(defaults toLOCAL, the in-process embedded engine) andport(defaults to6001). - New synonyms:
fastobjectsforpoetandbtrieveforzen— same fields, same definitions, neither original value deprecated, aspostgresqlandpostgresalready sharePostgresServer. - Establishes the naming convention that a server
typevalue uses the name the product carried when it was created, in lowercase, since enum values are permanent and marketing names are not. - No
schemafield on any of the four: foringresandvectorwisethe namespace is the table owner resolved from the connecting user; the two object databases have no SQL schema namespace. - Non-breaking: adds four optional server types and two synonyms. No existing value changes meaning.
- Changes to Servers:
- Add optional Athena Server
workgroupfield and fixstagingDirto be optional in schema. - Fixes the
idcharacter set to match RFC-0026a: - The JSON schema implemented an allowlist (
^[A-Za-z0-9_-]+$) where the RFC defines a denylist — an id cannot contain.,#,/,\,@,!,%,&or^. The allowlist additionally rejected 23 punctuation characters and every non-ASCII letter. StableIdand the id segments ofFullyQualifiedReferencenow accept anything the RFC permits, so namespaced ids such asfdir:ISU:TADandurn:uuid:...validate, along with references built from them.- Whitespace is excluded as well, which the RFC leaves unstated.
- Non-breaking: the new pattern is strictly wider, so every previously valid id and reference stays valid. Also applied to the rolling v3.1.0 schema, where the mismatch originated.
v3.1.0 - 2025-12-08 - APPROVED
- Splits Main specification document into several smaller documents.
- Most sections have gained an optional
idto enable easier linking as per RFC 26. - The
teamblock is accepting both ODCS v3.0.x structure (now obsolete) or the updated RFC16 structure. The obsolete structure will be removed in ODCS v4. - Adds Relationships (Foreign Keys):
- Add
relationshipsarray field to bothSchemaObjectandSchemaPropertyto define foreign key relationships. - Support for property-level relationships where
fromfield is implicit. - Support for schema-level relationships with explicit
fromandtofields. - Support for composite foreign keys using arrays in
fromandtofields. - Support for nested property references using dot shorthand notation (e.g.,
accounts.address_street). - Support for nested property references using fully qualified references (e.g
/schema/schema_id/properties/my_property) - Add
customPropertiesto relationships for metadata like cardinality, labels, and descriptions. - New
Relationshipdefinition in JSON schema with fields:type: Type of relationship (defaults toforeignKey)from: Source property reference (optional at property level)to: Target property reference (required)customProperties: Additional metadata
- Breaking change to the JSON Schema (as a reminder the standard is not the JSON Schema but the textual document):
- Alter
exclusiveMaximumandexclusiveMinimumforinteger/numberlogical data type to benumberinstead ofboolean. Conforms with JSON Schema specification. - Alter
exclusiveMaximumandexclusiveMinimumfordatelogical data type to bestringinstead ofboolean. - No additional or unevaluated properties are allowed for the following sections of the schema:
authoritativeDefinitionscustomPropertiesdataQualitydataQualityCheckpriceroleschemaElementserverslaPropertiessupportteam
- Alter
teamto be an object instead of an array.- Adds
name,description,members,tags,customProperties,authoritativeDefinitionsfields toteam. - Adds
tags,customProperties,authoritativeDefinitionsfields toteam.members.
- Adds
- Changes to logicalType and logicalTypeOptions:
- Add
timestampandtimetologicalTypeoptions. - Add
timezoneanddefaultTimezonetologicalTypeOptionsoptions fortimestampandtime. - Changes to Quality
- Add a maintained library of commonly used quality metrics
rowCount,nullValues,invalidValues,duplicateValues, andmissingValues. - Add
scheduleandschedulerto data quality properties. - Changes to SLA:
- Add optional
descriptionfield to SLA entries for human-readable context. - Changes to Support Channels:
- Change
urlfield to be optional. - Add
customPropertiesfield for additional metadata. - Add
notificationsas an example forscope - Add
googlechatas an example fortool - Changes to Servers:
- AzureServer
formatnot longer an enum ofparquet,delta,json,csv, but rather a string with the same examples. - AzureServer
delimiternot longer an enum ofnew_line,array, but rather a string with the same examples. - S3Server
formatnot longer an enum ofparquet,delta,json,csv, but rather a string with the same examples. - S3Server
delimiternot longer an enum ofnew_line,array, but rather a string with the same examples. - SftpServer
formatnot longer an enum ofparquet,delta,json,csv, but rather a string with the same examples. - SftpServer
delimiternot longer an enum ofnew_line,array, but rather a string with the same examples. - Added HiveServer with type
hive. - Added ImpalaServer with type
impala - Duckdb schema was expecting an integer, but should expect a string.
- Added support for Actian Zen Server.
- Added missing
streamproperty to CustomServer. - Deprecations:
slaDefaultElementis deprecated, and will be removed in ODCS v4.0.0 (see RFC 21).- The
teamstructure has evolved. Both are valid, however the ODCS v3.0.x structure is deprecated (see RFC 16). - Changes to custom properties and authoritative definitions:
- Add
descriptionfield to bothcustomPropertiesandauthoritativeDefinitions.
v3.0.2 - 2025-03-31 - REPLACED BT v3.1.0
- Added field
physicalNamefor the properties in JSON schema. - Explicitly specifies
YYYY-MM-DDTHH:mm:ss.SSSZfor default date format. - Added field
nameteam members in JSON schema and docs. - Added field
descriptionteam members in JSON schema and docs. - Fixed Athena Server required property name from
staging_dirtostagingDir
v3.0.1 - 2024-12-22 - REPLACED BY v3.0.2
- Added field
authoritativeDefinitionsinto JSON schema - Added field
description.customPropertiesinto JSON schema - Added field
description.authoritativeDefinitionsinto JSON schema - Added field
role.customPropertiesinto JSON schema - Updated
statusfield to include examples - Updated
authoritativeDefinitionsdescription to be vendor agnostic - Updated
tagsdescription and included examples
v3.0.0 - 2024-10-21 - REPLACED BY v3.0.1
- New section: Support & communication channels.
- New section: Servers.
- Changes to fundamentals :
- Rename
uuidtoid. - Add
name. - Rename
quantumNametodataProductand make it optional. - Rename
datasetDomaintodomain(we avoid the dataset prefix). - Drop
datasetKind(example:virtualDataset, was optional, have not seen any usage). - Drop
userConsumptionMode(examples:analytical, was optional, already deprecated in v2.). - Drop
sourceSystem(example:bigQuery, information will be encoded in servers). - Drop
sourcePlatform(example:googleCloudPlatform, information will be encoded in servers). - Drop
productSlackChannel(will move to support channels). - Drop
productFeedbackUrl(will move to support channels). - Drop
productDl(will move to support channels). - Drop
username(credentials should not be stored in the data contract). - Drop
password(credentials should not be stored in the data contract). - Drop
driverVersion(will move to servers if needed). - Drop
driver(will move to servers if needed). - Drop
server(will move to servers if needed). - Drop
project(BigQuery-specific, will move to servers). - Drop
datasetName(BigQuery-specific, will move to servers). - Drop
database(BigQuery-specific, will move to servers). - Drop
schedulerAppName(not part of the contract). - Changes to Schema:
- Major changes, check spec.
- Adds support for non table formats, hierarchies, and arrays.
nameis a new fielditemsis a new fieldpriorTableNameis not supported anymore, if needed, consider a custom property.tableis not supported anymore, if needed, consider usingname.columnsis nowpropertiesdataGranularityis nowdataGranularityDescription.encryptedColumnNameis nowencryptedName.partitionStatusis nowpartitioned.clusterStatusis not supported anymore, if needed, consider a custom property.clusterKeyPositionis not supported anymore, if needed, consider a custom property.sampleValuesis nowexamples.isNullableis nowrequired.isUniqueis nowunique.isPrimaryKeyis nowprimaryKey.criticalDataElementStatusis nowcriticalDataElement.clusterKeyPositionis not supported anymore, if needed, consider a custom property.transformSourceTablesis nowtransformSourceObjects- Restrict
schema.*.logicalTypeto be one ofstring,date,number,integer,object,array,boolean. - Add
schema.*.logicalTypeOptions. - Changes to Data Quality:
- Significant changes have been applied to support more tools and use cases. Please review the new section.
- If needed,
templateNameis a custom property. toolNameis obsolete, replaced bytype=custom; engine: <engine name>.scheduleCronExpressionis replaced byscheduleandscheduler.scheduleCronExpression: 0 20 * * *becomesschedule: 0 20 * * *andscheduler: cron.- Pricing:
- No changes.
- Changes to team (fka stakeholders):
- Replaces
stakeholders. Content stays the same. - Changes to Role:
- Added
description - Changed
accessis not required anymore - Security:
- No changes.
- Changes to SLA:
- Starting with v3, the schema is not purely tables and columns, hence minor modifications: columns are now elements.
slaDefaultColumnis nowslaDefaultElement.columnis nowelement.- Explicit reference to Data QoS.
- Changes to custom and other properties:
systemInstanceis not supported anymore, if needed, consider a custom property.
v2.2.2 - 2024-05-23 - APPROVED, LAST VERSION OF THE v2 BRANCH
- In JSON schema validation:
- Change
dataset.descriptiondata type fromarraytostring. - Change
dataset.column.isPrimaryKeydata type fromstringtoboolean. - Change
price.priceAmountdata type fromstringtonumber. - Change
slaProperties.valuedata type fromstringtooneOf[string, number]. - Change
slaProperties.valueExtdata type fromstringtooneOf[string, number]. - Update examples to adhere to JSON schema.
- Full example from README directs to full-example.yaml.
- Add in mkdocs for creating a documentation website. Check building-doc.md.
- Add vendors page vendors.md. Feel free to add anyone there.
v2.2.1 - 2023-12-18 - REPLACED BY v2.2.2
- Reformat quality examples to be valid YAML.
- Type of definition for authority have standard values:
businessDefinition,transformationImplementation,videoTutorial,tutorial, andimplementation. - Add in
isUnique,primaryKeyPosition,partitionKeyPosition, andclusterKeyPositiontocolumndefinition. - Add JSON schema to validate YAML files for v2.2.1.
- Integrated as part of Bitol.
- Reformat Markdown tables.
v2.2.0 - 2023-07-27 - REPLACED BY v2.2.1
- New name to Open Data Contract Standard.
templateNameis now calledstandardVersion, v2.2.0 parsers should account for this change and support both to avoid a breaking change.- Added support for
authoritativeDefinitionsat the table level. - Added many examples.
- Various improvements and typo corrections.
- Finalization of fork under AIDA User Group.
v2.1.1 - 2023-04-26 - REPLACED BY v2.2.0
- Open source version.
- Additional value field
valueExtin SLA.
v2.1.0 - 2023-03-23 - REPLACED BY v2.1.1
Data Quality
The data contract adds elements specifically for interfacing with the Data Quality tooling.
Additions: * quality (table level & column level check): * templateName (called standardVersion since v2.2.0) * dimension * type * severity * businessImpact * scheduleCronExpression * customProperties * columns * isPrimaryKey
Physical names
The data contract is a logical construct; we add more specific links to the physical world.
Service-level agreement
The service-level agreements not previously used are more detailed to follow the DP QoS pattern. See SLA.
Other
Removed the weight for system ratings from the data contract. Their default values remain.
v2.0.0 - REPLACED BY V2.1.0
Guidelines & Evolution
- Type case
- Support for SemVer versioning.
- Tags can have values.
Additions
- Version of contract definition: v2.0.0. A breaking change with v1.
- Description:
- Purpose (text field).
- Limitations (text field).
- Usage (text field).
- Domain.
- Dictionary section:
- Identification of masked column (encryptedColumnName property), example: the email_decrypted column would be masked by email_encrypted.
- Flag for critical data element.
- Added keys for transformation data (sources, logic, description).
- Sample values.
- Ability to specify links to authoritative sources at the column level (authoritativeDefinitions).
- Business name.
- List of stakeholders:
- Username (user account).
- Role.
- Date in.
- Date out.
- Replaced by.
- Service levels: agreements & objective orginal inspiration.
- Price / cost.
- Name changes to match PPaaS type case.
- Product data:
- productDl.
- productSlackChannel.
- productFeedbackUrl.
- Renamed
tableskey todataset. - Removed
ownerkey. Owner is now a stakeholder role. - Additional quality keys:
- description.
- toolName.
- toolRuleName.
- Custom Properties.
- Product dates:
- generalAvailabilityDate.
- endOfSupportDate.
- endOfLifeDate.
v1 - DEPRECATED
- Description of the data quantum/data artifact.
- Roles.
- Schema:
- Tables, columns.
- Data quality.
- System rating weightage.
- Ratings:
- System, user, etc.