Open Data Product Standard
Executive Summary
This document describes the keys and values expected in a YAML data product, per the Open Data Product Standard (ODPS). The Open Data Product Standard YAML file serves as the primary configuration and documentation for data products within your organization. This document explains each section of the standard, its purpose, and how to properly write it.
Table of content
TBD
Fundamentals
The core metadata section defines the fundamental identifying information required for the data product.
Example
apiVersion: v0.9.0
kind: DataProduct
name: Customer Data Product
id: fbe8d147-28db-4f1d-bedf-a3fe9f458427
domain: seller
status: draft
tenant: RetailCorp
description:
purpose: Enterprise view of a customer.
limitations: No known limitations.
usage: Check the various artefacts for their own description.
tags: ['customer']
Field Descriptions
Key | UX label | Required | Description | Example |
---|---|---|---|---|
apiVersion | Standard version | Yes | Version of the standard used to build data product. Default value is v0.9.0 . |
v0.9.0 |
kind | Kind | Yes | The kind of file this is. Valid value is DataProduct . |
DataProduct |
id | ID | Yes | A unique identifier used to reduce the risk of dataset name collisions, such as a UUID. | 064c4630-8aad-4dc0-ba95-0f69940e6b18 |
name | Name | No | Name of the data product. | |
version | Version | No | Current version of the data product. Not required, but highly recommended. | v1.0.0 |
status | Status | Yes | Current status of the data product. Valid values are "proposed", "draft", "active", "deprecated", "retired". | |
domain | Domain | No | Business domain | Customer |
tenant | Tenant | No | Organization identifier | RetailCorp |
authoritativeDefinitions | Authoritative Definitions | No | List of links to sources that provide more details on the data contract. | |
description | Description | No | Object containing the descriptions. | |
description.purpose | Purpose | No | Intended purpose for the provided data. | |
description.limitations | Limitations | No | Technical, compliance, and legal limitations for data use. | |
description.usage | Usage | No | Recommended usage of the data. | |
description.authoritativeDefinitions | Authoritative Definitions | No | See Authoritative Definitions below. | |
description.customProperties | Custom Properties | No | See Custom Properties below. | |
authoritativeDefinitions | Authoritative Definitions | No | See Authoritative Definitions below. | |
customProperties | Custom Properties | No | See Custom Properties below. | |
tags | Tags | No | Tags as a list | ['customer', 'sales'] |
Product information
Describe the core of the product.
Example
inputPorts: # Expectations [Optional]
- name: payments
version: 1.0.0 # [Required]
contractId: dbb7b1eb-7628-436e-8914-2a00638ba6db # [Required]
- name: payments
version: 2.0.0 # [Required]
contractId: dbb7b1eb-7628-436e-8914-2a00638ba6da # [Required]
- name: onlinetransactions
version: 1.0.0 # [Required]
contractId: ec2a112d-5cfe-49f3-8760-f9cfb4597544 # [Required]
- name: onlinetransactions
version: 1.1.0 # [Required]
contractId: ec2a112d-5cfe-49f3-8760-f9cfb4597547 # [Required]
outputPorts: # Promises [Required]
- name: rawtransactions
description: "Raw Transactions"
type: tables
version: 1.0.0 # [Required]
contractId: c2798941-1b7e-4b03-9e0d-955b1a872b32 # [Required]
- name: rawtransactions
description: "Raw Transactions"
type: tables
version: 2.0.0 [Required]
contractId: c2798941-1b7e-4b03-9e0d-955b1a872b33 # [Required]
sbom: # The SBOM can/should be at the version level [Optional]
- type: "external" # default
url: "https://mysbomserver/mysbom"
inputContracts: # or dependencies [Optional]
- id: dbb7b1eb-7628-436e-8914-2a00638ba6db # or contractId
version: 2.0.0
- id: ec2a112d-5cfe-49f3-8760-f9cfb4597544
version: 1.0.0
- name: consolidatedtransactions
description: "Consolidated transactions"
type: tables
version: 1.0.0
contractId: a44978be-1fe0-4226-b840-1b715bc25c63
- name: fulltransactionswithreturns
description: "Full transactions with returns"
type: tables
version: 0.3.0
contractId: ef769969-0cbe-4188-876f-bb00abadaee4
Key | Key | UX label | Required | Description |
---|---|---|---|---|
inputPorts | Input Ports | Yes | List of objects describing an input port. You need at least one as a data product needs to get data somewhere. | |
inputPorts.name | Yes | Yes | ||
outputPorts | Output Ports | Yes | List of objects describing an output port. You need at least one, as a data product without output is useless. | |
outputPorts.name | Yes | Yes | ||
outputPorts.version | Yes | Yes | For each version, a different instance of the output port is listed. The combination of the name and version is the key. A new (major) version would be a new output port, for simplicity. | |
outputPorts.contractId | No | |||
outputPorts.type | No | There can be different types of output ports, each automated and handled differently. Here you can indicate the type. | ||
outputPorts.description | No | Human readable short description of the output port. |
Management Ports
The management ports define access points for managing the data product.
Example
managementPorts:
- content: dictionary
type: topic
name: tpc-dict-update
description: Kafka topic for dictionary updates
Field Descriptions
Field | UX label | Required | Description |
---|---|---|---|
managementPorts | Management Interface | No | |
managementPorts.name | Name | Yes | Endpoint identifier or unique name |
managementPorts.content | Content | Yes | Content: can be discoverability , observability , or control . |
managementPorts.type | No | Type: can be rest or topic . Default is rest . |
|
managementPorts.url | URL | No | URL to access the endpoint. |
managementPorts.channel | Channel | No | Channel to communicate with the data product. |
managementPorts.description | Description | No | Purpose and usage |
managementPorts.tags | Tags | No | Tags. |
managementPorts.customProperties | Custom Properties | No | Custom properties block. |
managementPorts.authoritativeDefinitions | Authoritative Definitions | No | Authoritative definitions block. |
Support and Communication Channels
(inherited from ODCS)
Field Descriptions
Key | UX label | Required | Description |
---|---|---|---|
support | Support | No | Top level for support channels. |
support.channel | Channel | Yes | Channel name or identifier. |
support.url | Channel URL | Yes | Access URL using normal URL scheme (https, mailto, etc.). |
support.description | Description | No | Description of the channel, free text. |
support.tool | Tool | No | Name of the tool, value can be email , slack , teams , discord , ticket , or other . |
support.scope | Scope | No | Scope can be: interactive , announcements , issues . |
support.invitationUrl | Invitation URL | No | Some tools uses invitation URL for requesting or subscribing. Follows the URL scheme. |
support.tags | Tags | No | Tags as a list. |
support.customProperties | Custom Properties | No | Custom properties block. |
support.authoritativeDefinitions | Authoritative Definitions | No | Authoritative definitions block. |
Team
(inherited from ODCS)
Field Descriptions
Key | UX label | Required | Description |
---|---|---|---|
team | Team | No | Object |
team.username | Username | No | The user's username or email. |
team.name | Name | No | The user's name. |
team.description | Description | No | The user's name. |
team.role | Role | No | The user's job role; Examples might be owner, data steward. There is no limit on the role. |
team.dateIn | Date In | No | The date when the user joined the team. |
team.dateOut | Date Out | No | The date when the user ceased to be part of the team. |
team.replacedByUsername | Replaced By Username | No | The username of the user who replaced the previous user. |
team.tags | Tags | No | Tags as a list. |
team.customProperties | Custom Properties | No | Custom properties block. |
team.authoritativeDefinitions | Authoritative Definitions | No | Authoritative definitions block. |
Ancillary Objects
(all inherited from ODCS)
Custom Properties
Key | UX label | Required | Description |
---|---|---|---|
customProperties | Custom Properties | No | A list of key/value pairs for custom properties. |
customProperties.property | Property | No | The name of the key. Names should be in camel caseāthe same as if they were permanent properties in the contract. |
customProperties.value | Value | No | The value of the key. |
customProperties.description | Description | No | Optional description. |
Authoritative definitions
Key | UX label | Required | Description |
---|---|---|---|
authoritativeDefinitions | Link | No | A list of type/link pairs for authoritative definitions. |
authoritativeDefinitions.type | Definition type | Yes | Type of definition for authority. Valid values are: businessDefinition , transformationImplementation , videoTutorial , tutorial , and implementation . |
authoritativeDefinitions.url | URL to definition | Yes | URL to the authority. |
authoritativeDefinitions.description | Description | No | Optional description. |
Other Properties Definition
Key | UX label | Required | Description |
---|---|---|---|
productCreatedTs | Product Created UTC | No | Timestamp in UTC of when the data contract was created, using ISO 8601. |
All trademarks are the property of their respective owners.