This Solution Design document will help us explore and understand the internals of OpenMetadata services, how are they built and
their interactions.We will start by describing the big picture of the software design of the application. Bit by bit we will get inside
specific components, describing their behaviour and showing examples on how to use them.
The goal of this first section is to get familiar with the high-level concepts and technologies involved. The learning objectives here are:
Describe the elements that compose OpenMetadata and their relationships.
How end-users and external applications can communicate with the system.
Here we have the main actors of the solution:
API: This is the main pillar of OpenMetadata. Here we have defined how we can interact with the metadata Entities.
It powers all the other components of the solution.
UI: Discovery-focused tool that helps users keep track of all the data assets in the organisation. Its goal is
enabling and fueling collaboration.
Ingestion Framework: Based on the API specifications, this system is the foundation of all the Connectors, i.e., the
components that define the interaction between OpenMetadata and external systems containing the metadata we want to integrate.
Entity Store: MySQL storage that contains real-time information on the state of all the Entities and their Relationships.
Search Engine: Powered by ElasticSearch, it is the indexing system for the UI to help users discover the metadata.
If we abstract away from the Storage Layer for a moment, we then realize that the OpenMetadata implementation is the
integration of three blocks:
The core API, unifying and centralising the communication with internal and external systems.
The UI for a team-centric metadata Serving Layer.
The Ingestion Framework as an Interface between OpenMetadata and external sources.
The only thing these components have in common is the vocabulary -> All of them are shaping, describing, and moving
around metadata Entities.OpenMetadata is based on a standard definition for metadata. Therefore, we need to make sure that in our implementation
of this standard we share this definition in the end-to-end workflow. To this end, the main lexicon is defined as JSON Schemas,
a readable and language-agnostic solution.Then, when packaging the main components, we generate the specific programming classes for all the Entities.
What we achieve is three views from the same source:
Java Classes for the API,
Python Classes for the Ingestion Framework and
TypeScript Types for the UI,
each of them modeled after a single source of truth. Thanks to this approach we can be sure that it does not matter at
which point we zoom in throughout the whole process, we are always going to find a univocal well-defined Entity.
Now we are going to zoom inside the API Container. As the central Software System of the solution, its goal is to manage
calls (both from internal and external sources, e.g., Ingestion Framework or any custom integration) and update the
state of the metadata Entities.While the data is stored in the MySQL container, the API will be the one fetching it and completing the necessary
information, validating the Entities data and all the relationships.Having a Serving Layer (API) decoupled from the Storage Layer allows users and integrations to ask for what they need
in a simple language (REST), without the learning curve of diving into specific data models and design choices.
When we interact with most of our Entities, we follow the same endpoint structure. For example:
GET <url>/api/v1/<collectionName>/<id> to retrieve an Entity instance by ID, or
GET <url>/api/v1/<collectionName>/name/<FQN> to query by its fully qualified domain name.
Similarly, we support other CRUD operations, each of them expecting a specific incoming data structure, and returning
the Entity’s class. As the foundations of OpenMetadata are the Entities definitions, we have this data contract with
any consumer, where the backend will validate the received data, as well as the outputs.The endpoint definition and datatype setting are what happens at the Entity Resource. Each metadata Entity is packed
with a Resource class, which builds the API definition for the given Entity.This logic is what then surfaces in the API docs.
The goal of the Entity Repository is to perform Read & Write operations to the backend database to Create, Retrieve,
Update and Delete Entities.While the Entity Resource handles external communication, the Repository is in charge of managing how the whole
process interacts with the Storage Layer, making sure that incoming and outgoing Entities are valid and hold proper
and complete information.This means that here is where we define our DAO (Data Access Object), with all the validation and data storage logic.As there are processes repeated across all Entities (e.g., listing entities in a collection or getting a specific
version from an Entity), the Entity Repository extends an Interface that implements some basic functionalities and
abstracts Entity specific logic.Each Entity then needs to implement its server-side processes such as building the FQN based on the Entity hierarchy,
how the Entity stores and retrieves Relationship information with other Entities or how the Entity reacts to Change Events.
In the API Container Diagram, we showed how the Entity Repository interacts with three different Storage Containers
(tables) depending on what type of information is being processed.To fully understand this decision, we should first talk about the information contained by Entities instances.An Entity has two types of fields: attributes (JSON Schema properties) and relationships (JSON Schema href):
Attributes are the core properties of the Entity: the name and id, the columns for a table, or the algorithm
for an ML Model. Those are intrinsic pieces of information of an Entity and their existence and values are what
help us differentiate both Entity instances (Table A vs. Table B) and Entity definitions (Dashboard vs. Topic).
Relationships are associations between two Entities. For example, a Table belongs to a Database, a User owns a
Dashboard, etc. Relationships are a special type of attribute that is captured using Entity References.
Entities are stored as JSON documents in the database. Each entity has an associated table (<entityName>_entity) which
contains the JSON defining the Entity attributes and other metadata fields, such as the id, updatedAt or updatedBy.This JSON does not store any Relationship. E.g., a User owning a Dashboard is a piece of information that is materialised
in a separate table entity_relationship as graph nodes, where the edge holds the type of the Relationship (e.g., contains,
uses, follows…).This separation helps us decouple concerns. We can process related entities independently and validate at runtime what
information needs to be updated and/or retrieved. For example, if we delete a Dashboard being owned by a User, we will then
clean up this row in entity_relationship, but that won’t alter the information from the User.Another trickier example would be trying to delete a Database that contains Tables. In this case, the process would check
that the Database Entity is not empty, and therefore we cannot continue with the removal.
You might have already noticed that in all Entities definitions we have a changeDescription field. It is defined as
“Change that leads to this version of the entity”. If we inspect further the properties of changeDescription, we can
see how it stores the differences between the current and last versions of an Entity.This results in giving visibility on the last update step of each Entity instance. However, there might be times when
this level of tracking is not enough.One of the greatest features of OpenMetadata is the ability to track all Entity versions. Each operation that leads
to a change (PUT, POST, PATCH) will generate a trace that is going to be stored in the table change_event.Using the API to get events data, or directly exploring the different versions of each entity gives great debugging
power to both data consumers and producers.
Now that we have a clear picture of the main pieces and their roles, we will analyze the logical flow of a POST and a
PUT calls to the API. The main goal of this section is to get familiar with the code organisation and its main steps.
To take the most out of this section, it is recommended to follow the source code as well, from the Entity JSON you’d
like to use as an example to its implementation of Resource and Repository.
We will start with the simplest scenario: Creating a new Entity via a POST call. This is a great first point to review
as part of the logic and methods are reused during updates.
As we already know, the recipient of the HTTP call will be the EntityResource. In there, we have the create function
with the @POST annotation and the description of the API endpoint and expected schemas.The role of this first component is to receive the call and validate the request body and headers, but the real
implementation happens in the EntityRepository, which we already described as the DAO. For the POST operation, the
internal flow is rather simple and is composed of two steps:
Prepare: Which validates the Entity data and computes some attributes at the server-side.
Store: This saves the Entity JSON and its Relationships to the backend DB.
This method is used for validating an entity to be created during POST, PUT, and PATCH operations and preparing the
entity with all the required attributes and relationships.Here we handle, for example, the process of setting up the FQN of an Entity based on its hierarchy. While all Entities
require an FQN, this is not an attribute we expect to receive in a request.Moreover, this checks that the received attributes are being correctly informed, e.g., we have a valid User as an owner
or a valid Database for a Table.
The storing process is divided into two different steps (as we have two tables holding the information).We strip the validated Entity from any href attribute (such as owner or tags) in order to just store a JSON document
with the Entity intrinsic values.We then store the graph representation of the Relationships for the attributes omitted above.At the end of these calls, we end up with a validated Entity holding all the required attributes,
which have been validated and stored accordingly. We can then return the created Entity to the caller.
Let’s now build on top of what we learned during the POST discussion, expanding the example to a PUT request handling.The first steps are fairly similar:
We have a function in our Resource annotated as @PUT and handling headers, auth and schemas.
The Resource then calls the DAO at the Repository, bootstrapping the data-related logic.
We validate the Entity and cook some attributes during the prepare step.
After processing and validating the Entity request, we then check if the Entity instance has already been stored,
querying the backend database by its FQN. If it has not, then we proceed with the same logic as the POST
operation -> simple creation. Otherwise, we need to validate the updated fields.
We cannot allow all fields to be updated for a given Entity instance. For example, the id or name stay immutable once
the instance is created, and the same thing happens to the Database of a Table.The list of specified fields that can change is defined at each Entity’s Repository, and we should only allow changes
on those attributes that can naturally evolve throughout the lifecycle of the object.At this step, we set the fields to the Entity that are either required by the JSON schema definition (e.g.,
the algorithm for an MlModel) or, in the case of a GET operation, that are requested as
GET <url>/api/v1/<collectionName>/<id>?fields=field1,field2...
In the EntityRepository there is an abstract implementation of the EntityUpdater interface, which is in charge of
defining the generic update logic flow common for all the Entities.The main steps handled in the update calls are:1. Update the Entity generic fields, such as the description or the owner.
2. Run Entity specific updates, which are implemented by each Entity’s EntityUpdater extension.
3.Store the updated Entity JSON doc to the Entity Table in MySQL.
Each Entity has a set of attributes that define it. These attributes are going to have a very specific behaviour,
so the implementation of the update logic falls to each Entity Repository.For example, we can update the Columns of a Table, or the Dashboard holding the performance metrics of an MlModel.
Both of these changes are going to be treated differently, in terms of how the Entity performs internally the update,
how the Entity version gets affected, or the impact on the Relationship data.For the sake of discussion, we’ll follow a couple of update scenarios.
When updating Columns, we need to compare the existing set of columns in the original Entity vs. the incoming columns
of the PUT request.If we are receiving an existing column, we might need to update its description or tags. This change will be
considered a minor change. Therefore, the version of the Entity will be bumped by 0.1, following the software
release specification model.However, what happens if a stored column is not received in the updated instance? That would mean that such a column
has been deleted. This is a type of change that could possibly break integrations on top of the Table’s data.
Therefore, we can mark this scenario as a major update. In this case, the version of the Entity will increase by 1.0.Checking the Change Events or visiting the Entity history will easily show us the evolution of an Entity instance,
which will be immensely valuable when debugging data issues.
One of the attributes for an MlModel is the EntityReference to a Dashboard holding its performance metrics evolution.As this attribute is a reference to another existing Entity, this data is not directly stored in the MlModel JSON doc,
but rather as a Relationship graph, as we have been discussing previously. Therefore, during the update step we will need to:1. Insert the relationship, if the original Entity had no Dashboard informed,
2. Delete the relationship if the Dashboard has been removed, or
3. Update the relationship if we now point to a different Dashboard.Note how during the POST operation we needed to always call the storeRelationship function, as it was the first
time we were storing the instance’s information. During an update, we will just modify the Relationship data if the
Entity’s specific attributes require it.
During all these discussions and examples we’ve been showing how the backend API handles HTTP requests and what the
Entities’ data lifecycle is. Not only we’ve been focusing on the JSON docs and Relationships, but from time to time we
have talked about Change Events.Moreover, In the API Container Diagram we drew a Container representing the Table holding the Change Event data,
but yet, we have not found any Component accessing it.This is because the API server is powered by Jetty, which means that luckily we do not need to make those calls ourselves!
By defining a ChangeEventHandler and registering it during the creation of the server, this postprocessing of the calls
happens transparently.Our ChangeEventHandler will check if the Entity has been Created, Updated or Deleted and will store the appropriate
ChangeEvent data from our response to the backend DB.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"OpenMetadata Documentation","colors":{"primary":"#6938EF","light":"#6938EF","dark":"#6938EF"},"logo":"https://mintcdn.com/openmetadata/Z_Ib-0g05fLykSep/public/images/icons/omd.svg?fit=max\u0026auto=format\u0026n=Z_Ib-0g05fLykSep\u0026q=85\u0026s=8eb40986afc777e29ae395288a3983e8","favicon":"https://mintcdn.com/openmetadata/Z_Ib-0g05fLykSep/public/images/icons/om-monogram.svg?fit=max\u0026auto=format\u0026n=Z_Ib-0g05fLykSep\u0026q=85\u0026s=8c8208506e2cadb9ef7a7302f79486fb","api":{"mdx":{"auth":{"method":"bearer"},"server":"https://sandbox.open-metadata.org/api"}},"appearance":{"default":"light","strict":true},"navbar":{"links":[{"icon":"Slack","href":"https://slack.open-metadata.org","label":"Community"},{"icon":"Book","href":"https://blog.open-metadata.org/","label":"Blogs"},{"href":"https://getcollate.io/","label":"Free Tier"}]},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/openmetadata","youtube":"https://www.youtube.com/@OpenMetadataChannel","x":"https://x.com/open_metadata"},"links":[{"items":[{"label":"Terms of Service","href":"https://www.getcollate.io/terms"},{"label":"Privacy Policy","href":"https://www.getcollate.io/privacypolicy"},{"label":"Trust Center","href":"https://trustcenter.getcollate.io/"},{"label":"Contact Us","href":"https://www.getcollate.io/contact-sales"}]}]},"seo":{"metatags":{"canonical":"https://docs.open-metadata.org"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"GTM-554C968W"}},"interaction":{"drilldown":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"openmetadata","hasAudioNarration":false,"actualSubdomain":"openmetadata","customDomains":["docs.open-metadata.org"],"gitSource":{"type":"github","owner":"open-metadata","repo":"docs-om","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae2dae01eabf386204703c8","collectionId":"1c8673a1-e348-433a-b573-ad206157317c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae2dae01eabf386204703c8"},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae2dae01eabf386204703c8","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Connectors","count":1123},{"language":"default","tag":"Connector","count":1030},{"language":"default","tag":"SDK \u0026 APIs","count":960},{"language":"default","tag":"Deployment","count":628},{"language":"default","tag":"Database","count":547},{"language":"default","tag":"Data Assets","count":470},{"language":"default","tag":"Data Governance","count":314},{"language":"default","tag":"Data Quality and Observability","count":282},{"language":"default","tag":"Ingestion","count":228},{"language":"default","tag":"Developers","count":210}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"globals.css","content":"/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: italic;\n font-weight: 100 1000;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/dmsans/v17/rP2Fp2ywxg089UriCZa4ET-DNl0.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: italic;\n font-weight: 100 1000;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/dmsans/v17/rP2Fp2ywxg089UriCZa4Hz-D.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 100 1000;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/dmsans/v17/rP2Hp2ywxg089UriCZ2IHSeH.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'DM Sans';\n font-style: normal;\n font-weight: 100 1000;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/dmsans/v17/rP2Hp2ywxg089UriCZOIHQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@tailwind base;@tailwind components;@tailwind utilities;:root{--top-nav-height:70px;--main-nav-height:42px;--side-nav-width:288px;--side-nav-collapsed-width:42px;--select-dropdown-default-height:28px;--select-dropdown-default-width:165px;--side-nav-width:min(20%, 300px);--api-side-nav-width:max(14%, 220px);--content-div-width:min(17%, 250px);--default-border-color:#dce3ec;--primary-color:#6938EF;--primary-shadow-color:#5469d433;--primary-background-color:rgba(84, 105, 212, 0.05);--select-background-color:#f4f7ff;--icon-background-color:#f1f3fe;--select-border-color:#e9eefc;--homepage-container-px:130px;--default-text-color:rgb(60, 66, 87);--gray-text-color:rgba(60, 66, 87, 0.7);--white-color:#fff;--top-nav-color:#f7fafc;--code-background-color:#212d63;--code-gray-background-color:rgb(79, 86, 107);--code-light-background-color:#f7fafc;--code-toolbar-color:#212d63;--code-gray-toolbar-color:#3c4257;--code-light-toolbar-color:#ffffff;--code-light-border-color:#e3e8ee;--code-filename-color:#a4cdfe;--code-gray-filename-color:#dadce1;--code-light-filename-color:#f7fafc;--code-block-text-color:#f5fbff;--purple-bg-color:#7147e81a;--green-bg-color:#0084761a;--pink-bg-color:#b02aac1a;--purple-icon-color:#7147e8;--green-icon-color:#008376;--pink-icon-color:#b02aac;--beta-label-color:#0950C5;--beta-label-bg-color:#E4EEFF;--prod-label-color:#81C562;--prod-label-bg-color:#EEFBE7;--stable-label-color:#1890ff;--stable-label-bg-color:#e6f7ff;--connector-icon-bg-color:#F8F8F8;--green-tag-color:#43A047;--green-tag-bg-color:#43A0471A;--orange-tag-color:#FF7C50;--orange-tag-bg-color:#FF7C501A}body{font-family:\"DM Sans\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\";color:var(--default-text-color);margin:0;font-weight:400;-webkit-font-smoothing:antialiased}h1,h2,h3,h4,h5,h6{font-weight:600;font-family:\"DM Sans\"}b,strong{font-weight:600}p{line-height:1.5em;margin:8px 0 0;color:#414651}h1{font-size:36px;line-height:44px;color:#224!important;margin-bottom:10px!important}h2{font-size:30px;line-height:38px}h3{font-size:24px;line-height:32px}h4{font-size:20px;line-height:30px}h5{font-size:18px;line-height:28px}body,h6{font-size:16px}h6{line-height:24px}a{color:var(--primary-color);font-weight:500}li::marker{color:var(--primary-color)}ol{list-style:decimal;margin-top:16px;margin-left:16px}ol li::marker{color:var(--default-text-color)}li>ul{margin-top:0;margin-left:16px}pre{border-radius:6px;background-color:var(--code-background-color)}code,pre{-ms-overflow-style:none;scrollbar-width:none}::-webkit-scrollbar,code::-webkit-scrollbar,pre::-webkit-scrollbar{display:none}*{scrollbar-width:none}a.link{color:#6938ef;font-weight:600;text-decoration:none;border:0}a.link:hover{text-decoration:underline}.connector-tab{display:block;width:100%;text-align:start;padding:8px;cursor:pointer;border-radius:4px}.active-connector,.connector-tab:hover{background-color:var(--primary-background-color)}.active-connector{border:.5px solid var(--select-border-color);color:var(--primary-color);font-weight:600}.divider{color:var(--default-border-color)}.icons{height:2rem;width:2rem}.cloud-button{border-radius:1rem;border:1px solid #c280ff;background-color:#c280ff}.search,.search-box{background-color:#f4f4f4}.search-box{height:2.25rem;width:550px;border:1px solid #f4f4f4;border-radius:.5rem;padding:4px 20px;color:#9e9d9d;display:flex;align-items:center}.search{width:90%;height:90%;border:0;outline:0}.overview-container{width:100vw;display:flex;flex-direction:column;justify-content:center;padding:50px 10%;background:#f4f7ff}.container-heading,.overview-heading{font-weight:700;font-size:22px;line-height:42px;margin-bottom:12px}.container-heading{margin-bottom:40px}.blogs-container,.cards-container{display:grid;grid-template-columns:1fr 1fr 1fr;gap:32px}.homepage-containers{padding:0 10%;margin:80px 0 0}#myUL{list-style-type:none;margin:0;padding:0}.nested{display:none}.active{display:block;color:var(--primary-color)}.DownArrow{display:none}.RightArrow{display:block}.highlightedCode{background-color:#1a2652}.page-404{height:calc(100vh - var(--top-nav-height) - var(--main-nav-height))}.content{flex-grow:0;flex-shrink:1}.non-collapsed-content{width:calc(100vw - var(--side-nav-width))}.collapsed-content{width:calc(100vw - var(--side-nav-collapsed-width))}.card-icon-container{padding:8px;width:fit-content;border-radius:10px}.card-purple-icon{background-color:var(--purple-bg-color);border:1px solid #7147e8}.card-green-icon{background-color:var(--green-bg-color);border:1px solid #008376}.card-pink-icon{background-color:var(--pink-bg-color);border:1px solid #b02aac}.nav-bar-container{position:sticky;top:0;z-index:100}.min-width-600{min-width:600px}@media (max-width:1240px){.blogs-container{grid-template-columns:1fr 1fr}}@media (max-width:900px){.cards-container{grid-template-columns:1fr 1fr}.blogs-container{grid-template-columns:1fr}.overview-container{padding:20px 60px;width:100%}.homepage-containers{padding:20px 60px;margin:32px 0 0}}@media (max-width:600px){.cards-container{grid-template-columns:1fr}.non-collapsed-content{display:none}.collapsed-content{width:calc(100% - 41px)}}#header h1,#header p{display:none!important}.mdx-content{margin-top:0!important}.api-page-container{display:grid;grid-template-columns:var(--api-side-nav-width) calc(100vw - var(--api-side-nav-width))}.hash-link{overflow:hidden;width:0;height:0;display:block;visibility:hidden;text-decoration:none;pointer-events:none;margin-top:-300px!important;padding-top:300px}.cookie-modal{position:fixed;bottom:0;background-color:#f8fbfc;z-index:20;padding:1rem;box-shadow:var(--shadow-card);transform:translateY(100%);transition:transform 1.2s ease-in-out,visibility 1.2s ease-in-out;visibility:hidden;border:1px solid #c9c4c4;border-radius:10px}.cookie-modal p{color:#292929;font-weight:300}.cookie-modal-buttons{margin-top:2rem;display:flex;gap:.75rem;justify-content:flex-end}.button{border-radius:1.5rem;padding:.5rem 2rem;font-size:.875rem;cursor:pointer;border:0}.button-accept{background-color:#7147e8;color:#fff}.button-reject{background-color:#fff;color:#7147e8;border:1px solid #7147e8}@media (min-width:640px){.cookie-modal{margin:1.25rem;max-width:36rem}}@media (min-width:1024px){.cookie-modal{max-width:48rem}}.cookie-modal.visible{transform:translateY(0);visibility:visible}.brand-docs-banner{font-weight:500;padding:0 8px;border-radius:12px;margin-top:16px;width:fit-content}.breadcrumb-item:first-child{display:none}.breadcrumb-item:last-of-type a{color:#414651;pointer-events:none;cursor:text;text-decoration:none}#page-loader{position:fixed;top:0;left:0;width:0%;height:3px;background:linear-gradient(90deg,#3b82f6,#8b5cf6);z-index:9999;transition:width .3s ease}#navbar .border-b{border:0}#navbar .nav-tabs{background-color:#fafafa;max-width:max-content;border:1px solid #eaecf5;border-radius:100px;margin:24px auto 4px;column-gap:16px;overflow-x:auto;display:flex;flex-wrap:nowrap;justify-content:flex-start}#navbar .nav-tabs .nav-tabs-item{padding:12px 24px;font-size:16px;white-space:nowrap;flex-shrink:0;color:#414651;font-weight:500}#navbar .nav-tabs .nav-tabs-item:hover{color:#181d27;text-decoration:none}#navbar .nav-tabs .nav-tabs-item .absolute,#navbar .nav-tabs a[href*=\"/how-to-guides/\"],a.mobile-nav-tabs-item[href*=\"/how-to-guides/\"]{display:none!important}#navbar .nav-tabs .nav-tabs-item.text-primary{color:#fff;background-color:#252b37;border-radius:100px;font-weight:600}#navbar .nav-tabs:has(a[href*=\"/how-to-guides/\"].text-primary) a.nav-tabs-item[href*=\"/how-to-guides\"]{color:#fff;background-color:#252b37;border-radius:100px;font-weight:600}#navbar .h-10{height:auto!important}.navbar-link a{background-color:transparent;color:#535862;font-weight:600}.nav-logo{height:40px}.navbar-link a:hover{color:#181d27;background-color:transparent}.products-container h2{color:#224;font-size:22px;font-weight:600}.card,.card>*{transition:all .3s ease}.card{border:0;box-shadow:0 4px 12px -1px rgba(10,13,18,.08)}.card>*{padding:20px}.card h2{color:#181d27;font-size:18px;line-height:20px}.card:hover{box-shadow:0 3px 3px -1.5px #0a0d120a,0 8px 8px -4px #0a0d1208,0 20px 24px -4px #0a0d1214;transform:translateY(-2px)}.card:hover>*{padding:24px;margin:-4px}.connector-page .card [data-component-part=card-content-container]{position:relative}.card [data-component-part=card-icon]:has(>svg){background-color:#e6f1ff;padding:24px;border-radius:100%;display:inline-flex;align-items:center;justify-content:center}body:not(:has(.homepage-container)) .card [data-component-part=card-icon]{width:auto!important;height:auto!important;min-width:32px!important;min-height:32px!important;align-self:flex-start!important}body:not(:has(.homepage-container)) .card [data-component-part=card-icon] img{width:32px!important;height:32px!important;object-fit:contain;flex-shrink:0}.connector-page div[data-component-part=card-icon]{background-color:#f8f9fc;padding:16px;border-radius:100%;display:inline-flex;align-items:center;justify-content:center;width:auto!important;height:auto!important}.connector-page div[data-component-part=card-icon] img,.connector-page div[data-component-part=card-icon] svg{width:32px!important;height:32px!important;object-fit:contain;flex-shrink:0;position:relative;z-index:1}.prod-beta-chip{display:flex;gap:4px;font-size:10px;width:max-content;border-radius:100px;padding:0 6px;font-weight:500;position:absolute;top:12px;right:12px}.prod-beta-chip.prod{color:#067647;background-color:#ecfdf3;border:1px solid #abefc6}.prod-beta-chip.beta{color:#175cd3;background-color:#eff8ff;border:1px solid #b2ddff}.prod-beta-chip img,button[aria-haspopup=menu] p{margin:0}.prod-beta-chip span{margin-top:-7px}#sidebar-content{border:0;top:132px!important;height:calc(100vh - 132px)!important}.sidebar-group-header{display:none}.my-2:has(ul.sidebar-group a[href*=\"/api-reference\"])>.sidebar-group-header{display:flex}.sidebar-group-header h5{color:#224;font-size:14px;font-weight:600}#table-of-contents-content .toc-item a{color:#414651}#table-of-contents-content .toc-item a:hover{color:#414651;border-color:#d5d9eb}#table-of-contents-content .toc-item a.text-primary{color:#6938ef;border-color:#6938ef;font-weight:600}.collate-ai-container h1,.products-container h1,body:not(:has(.homepage-container)) .mdx-content h1{display:flex;flex-direction:column;align-items:flex-start;margin-top:0!important}body:not(:has(.homepage-container)) .mdx-content h1#error-title{align-items:center}.collate-ai-container h1::before,.products-container h1::before,body:not(:has(.homepage-container)) .mdx-content h1::before{content:\"OpenMetadata Documentation\";display:block;background-color:#ebe9fe;color:#6938ef;padding:4px 12px;border-radius:100px;font-size:14px;font-weight:600;line-height:1.5;margin-bottom:16px;width:fit-content;flex-shrink:0}h1.ConnectorName::before{margin-top:-40px;position:absolute;top:-2px;left:0}body:has(.homepage-container) #assistant-entry,body:has(.homepage-container) #search-bar-entry,div:has(>#chat-assistant-sheet) .cursor-col-resize{display:none!important}.search-container{position:relative;margin-top:64px;display:flex;align-items:center;justify-content:center;width:100%;max-width:800px;margin-left:auto;margin-right:auto;padding:0 6px}.homepage-search-input{width:100%;padding:18px 58px 18px 28px;border:2px solid #eaecf5;border-radius:100px;font-size:16px;color:#3c4257;cursor:pointer;transition:all .2s ease;box-sizing:border-box}.homepage-search-input::placeholder{color:#cecfd2;font-size:18px}.homepage-search-input:hover{background-color:#fff}.homepage-search-input:focus{outline:0;background-color:#fff;box-shadow:0 0 0 3px rgba(84,105,212,.1)}.search-shortcut{position:absolute;right:20px;top:50%;transform:translateY(-50%);color:#9ca3af;padding:4px 8px;border-radius:4px;font-size:12px;font-weight:600;pointer-events:none;white-space:nowrap}.navbar-link:last-of-type a{background-color:#6938ef;color:#fff;border-radius:100px;display:flex;justify-content:center}.navbar-link:last-of-type a:hover{background-color:#5f27f8}body:has(.connector-page) #sidebar-content,body:has(.deployment-page-container) #sidebar-content,body:has(.getting-started-container) #sidebar-content,body:has(.how-to-guides-container) #sidebar-content,body:has(.sdk-container) #sidebar-content{display:none}body:has(.connector-page) #content-container,body:has(.deployment-page-container) #content-container,body:has(.getting-started-container) #content-container,body:has(.how-to-guides-container) #content-container,body:has(.sdk-container) #content-container{max-width:1300px!important}.collate-ai-container{margin-top:10px}.prose iframe,article iframe{max-width:600px!important;width:100%!important;margin:0 auto!important;display:block!important;height:auto!important;aspect-ratio:16/9!important;border:0!important}@media (max-width:1024px){.navbar-link:first-of-type{margin-top:20px}.prose iframe,article iframe{max-width:100%!important;width:100%!important;height:auto!important;aspect-ratio:16/9!important}}@media (max-width:768px){.prose iframe,article iframe{max-width:100%!important;width:100%!important;margin:0!important;height:auto!important;aspect-ratio:16/9!important}}.card:not(:has([data-component-part=card-icon])){border:1px solid #eaecf5!important;background-color:#f8f9fc!important;box-shadow:none!important}.card.card:not(:has([data-component-part=card-icon])) h2{color:#6938ef;font-weight:500;font-size:20px;margin-bottom:12px;line-height:30px}.card.card:not(:has([data-component-part=card-icon])):hover h2{text-decoration:underline}.how-to-guides-container ul{list-style:none;padding-left:0}.how-to-guides-container ul li{padding-left:28px;position:relative;margin-bottom:8px}.how-to-guides-container ul li::before,.python-container ul li::before,.sdk-container ul li::before{content:'';position:absolute;left:0;top:6px;width:16px;height:16px;background-color:transparent;background-image:url(/public/images/icons/check-circle.svg);background-size:contain;background-repeat:no-repeat}.sdk-container .card img{min-width:40px!important;width:40px!important;height:40px!important}.code-block,.code-block [data-component-part=code-block-root]{border:0!important;background-color:#3e444f!important;border-radius:16px!important;backdrop-filter:blur(40px)}.code-block code,.code-block pre,.code-block span{color:#e5e7eb!important;background-color:transparent!important}.python-container{background-color:#fafafa;border-radius:12px;padding:6px 20px}.callout [data-component-part=callout-content]{color:#414651!important}@layer utilities{.callout [data-component-part=callout-content] a{color:var(--primary-color)!important}}div:has(>#chat-assistant-sheet){border:0}#chat-assistant-sheet{margin-top:.4rem!important;min-height:90%!important;border:1px solid #eaecf5;border-top-left-radius:24px;border-top-right-radius:24px;box-shadow:0 2px 2px -1px #0a0d120a,0 4px 6px -2px #0a0d1208,0 12px 16px -4px #0a0d1214;background:#0a0d12;color:rgba(255,255,255,.9)}.chat-assistant-sheet-header span{color:rgba(255,255,255,.9)!important}.chat-assistant-sheet-header span.font-medium{font-size:0}.chat-assistant-sheet-header span.font-medium::before{content:\"Ask AI\";font-size:.875rem;font-weight:600}.chat-assistant-sheet-header svg{width:16px;height:16px;color:rgba(255,255,255,.8)}#chat-assistant-textarea{background-color:#373a41;border-radius:100px;color:rgba(255,255,255,.9);padding:12px}#chat-assistant-textarea::placeholder{color:rgba(255,255,255,.6)}.chat-assistant-send-button{width:32px!important;height:32px!important;bottom:6px;background-color:#2970ff}.chat-assistant-send-button:hover{background-color:#004eeb}.chat-assistant-send-button svg{width:16px;height:16px}div:has(>div>#chat-assistant-textarea){border:0!important;background-color:#373a41}#chat-content{margin-top:12px}#chat-content .rounded-2xl.bg-gray-100{background:#22262f!important}#chat-content button{color:rgba(255,255,255,.6)}#chat-content button[aria-label*=Vote]:hover,#chat-content button[aria-label=\"Copy chat response\"]:hover{color:#22262f}#chat-content .whitespace-pre-line,#chat-content li{color:rgba(255,255,255,.7)}#chat-content .rounded-2xl.bg-gray-100 .text-gray-800,#chat-content .rounded-2xl.bg-gray-100 div{color:#ffffffe5!important}#assistant-entry{margin-left:auto;border:2px solid #1570ef;background-color:transparent}#assistant-entry span,#assistant-entry svg{-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:600;color:#1570ef}#assistant-entry span,#assistant-entry svg,#assistant-entry:hover{background:linear-gradient(45deg,#175cd3 0,#1570ef 100%)}#assistant-entry:hover span,#assistant-entry:hover svg{background:0 0;-webkit-background-clip:unset;-webkit-text-fill-color:#fff;background-clip:unset;color:#fff}div:has(>#search-bar-entry):has(>#assistant-entry){flex-direction:row-reverse!important}.deployment-page-container ul[data-component-part=tabs-list]{width:100%;display:flex;justify-content:space-between;border:0}.deployment-page-container div[data-active=true],.deployment-page-container div[data-component-part=tab-button]{border:0}.card-layout{display:flex;gap:24px;padding:20px;box-shadow:0 2px 7px 0 rgba(169,169,169,.3);border-radius:12px;margin:6px;overflow:hidden}.card-layout>div:last-child{flex-shrink:0;align-self:start}.card-layout .icon{width:64px;height:64px;margin:0}.card-layout .header{font-size:20px;font-weight:600;color:#224}.card-layout .header-container{display:flex;align-items:center;gap:10px}.card-layout .header-chip{font-size:12px;background-color:#ebe9fe;color:#6938ef;font-weight:500;border-radius:36px;padding:2px 8px}.card-layout p{font-size:15px;color:#414651;font-weight:500;margin:8px 0 0}.card-layout .button-card{white-space:nowrap;background-color:#5925dc;color:#fff;text-decoration:none;padding:6px 8px;border-radius:6px;font-size:14px;font-weight:500}.card-layout .button-card:hover{text-decoration:none;background-color:#4d20be;border-bottom:none}.card-layout .button-link{white-space:nowrap;color:#5925dc;font-size:16px;font-weight:600;text-decoration:none;border-bottom:none;display:flex;gap:8px;align-items:center}.card-layout .button-link img{width:10px;height:10px;margin:0}.deployment-page-container div[data-component-part=card-cta] button{color:#6938ef}.deployment-page-container div[data-component-part=card-content-container]{height:100%}.card-layout.upgrade{background:linear-gradient(90deg,#f7f9ff 0,#fcfaff 100%)}.deployment-page-container .card-group{margin:6px}@media (max-width:768px){.card-layout{flex-direction:column}}@media (max-width:580px){.card-layout .header-container{flex-direction:column;align-items:start;margin-bottom:16px}}.deployment-tabs[role=tablist]{display:grid!important;grid-template-columns:repeat(3,1fr);gap:24px;max-width:1200px;margin:32px auto;padding:12px;border:0!important;background:0 0!important}[role=tabpanel][data-component-part=tab-content]{margin-top:32px}.deployment-tabs [role=tablist]::before{content:none!important}.deployment-tabs [role=tab]{all:unset;cursor:pointer;display:flex!important;flex-direction:column;align-items:flex-start!important;padding:4px 14px!important;background-color:#fff!important;position:relative;box-shadow:0 4px 12px -1px #0a0d1214;border-radius:12px;margin-top:28px;transition:box-shadow .2s ease,transform .2s ease;text-align:left;box-sizing:border-box}.deployment-tabs [role=tab]:hover{outline:2px solid #ccbafe}.deployment-tabs [role=tab][aria-selected=true]{outline:2px solid #6938ef!important}.deployment-tabs [role=tab]::before{background-color:#ebe9fe;color:#6938ef;max-width:max-content;border-top-left-radius:12px;padding:6px 60px 32px 16px;position:absolute;top:-34px;left:0;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 70' preserveAspectRatio='none'%3E%3Cpath d='M0,12 Q0,0 12,0 L165,0 Q177,0 182,10 L200,70 L0,70 Z'/%3E%3C/svg%3E\") no-repeat;-webkit-mask-size:100% 100%;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 70' preserveAspectRatio='none'%3E%3Cpath d='M0,12 Q0,0 12,0 L165,0 Q177,0 182,10 L200,70 L0,70 Z'/%3E%3C/svg%3E\") no-repeat;mask-size:100% 100%;font-size:14px;font-weight:500;z-index:-1}.deployment-tabs [data-component-part=tab-button]{font-size:18px;font-weight:600;color:#224;display:flex;gap:10px;padding:10px 0!important}.deployment-tabs [role=tab]:nth-child(1)::before{content:\"Best for: PoC, exploration\"}.deployment-tabs [role=tab]:nth-child(2)::before{content:\"Best for: Teams, orgs\"}.deployment-tabs [role=tab]:nth-child(3)::before{content:\"Best for: Existing users\"}.deployment-tabs [role=tab] img{width:50px!important;height:50px!important;order:-1}.deployment-tabs [role=tab] [data-slot=title],.deployment-tabs [role=tab]>span:first-of-type{color:#181d27!important;font-size:20px!important;font-weight:600!important;margin-top:16px;display:block}.deployment-tabs [role=tabpanel]{max-width:1200px;margin:0 auto;padding:20px}@media (max-width:768px){.deployment-tabs [role=tablist]{grid-template-columns:1fr;gap:64px}.deployment-tabs [role=tab]{min-height:auto}}.space-x-2>:not([hidden])~:not([hidden]){margin:0}.update-container{display:flex;flex-direction:column!important;padding-top:0}.update-container>div:first-of-type{width:100%!important;max-width:100%!important;flex-direction:column!important;align-items:flex-start!important;position:sticky!important;top:128px!important;z-index:11;background-color:#fff;padding:36px 0 8px}"},{"filePath":"style.css","content":".homepage-container{max-width:1440px;margin:0 auto;padding:0 10px 40px}.collate-ai-iframe{margin:32px 0 40px}.banner-content{padding:96px 0;background:radial-gradient(46.63% 44.4% at 50% 50%,rgba(201,207,255,.2) 0,rgba(255,255,255,.2) 100%)}.page-header{color:#181d27!important;font-weight:600;font-size:56px;text-align:center;margin-top:24px}#header-highlight{background:linear-gradient(to top,#b224ef 0,#7579ff 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.page-description{text-align:center;color:#717680;font-size:20px;margin-top:20px}.header-description{font-size:18px;margin-top:16px}.chips{display:flex;justify-content:center;gap:24px;margin-top:24px}.chip{padding:8px 12px;border-radius:100px;box-shadow:0 4px 12px -1px rgba(10,13,18,.08);display:flex;gap:12px;align-items:center;font-weight:500;width:max-content}.chip.purple{background:#ebe9fe;color:#6938ef}.chip.purple:hover{background:#e5e2fd}.chip.header{background-color:#f5f3ff;color:#875bf7;margin:0 auto;padding:8px 20px;box-shadow:none;font-size:14px}.deployment-cards{max-width:1200px;margin:16px auto;display:grid;grid-template-columns:repeat(3,1fr);gap:24px;position:relative;padding:20px}.deployment-top{background-color:#fafafa;color:#181d27;max-width:max-content;border-top-left-radius:12px;padding:10px 60px 32px 24px;position:relative;top:28px;-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 70' preserveAspectRatio='none'%3E%3Cpath d='M0,12 Q0,0 12,0 L165,0 Q177,0 182,10 L200,70 L0,70 Z'/%3E%3C/svg%3E\") no-repeat;-webkit-mask-size:100% 100%;mask:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 70' preserveAspectRatio='none'%3E%3Cpath d='M0,12 Q0,0 12,0 L165,0 Q177,0 182,10 L200,70 L0,70 Z'/%3E%3C/svg%3E\") no-repeat;mask-size:100% 100%}.best-enterprise{max-width:max-content;border-radius:32px 80px 0 0;background:#224;padding:9px 44px 10px 45px;display:flex;gap:20px;align-items:center}.best-enterprise .collate-logo{width:84px;height:14px}.best-enterprise .x-icon{width:18px;height:18px}.best-enterprise .om-logo{width:64px;height:25px}.deployment-card{box-shadow:0 4px 12px -1px #0a0d1214;background-color:#fff;border-radius:12px;padding:20px;box-sizing:border-box;position:relative;z-index:24;display:flex;flex-direction:column;height:100%}.deployment-card img{align-self:flex-start;width:60px;height:60px}.deployment-card h3{color:#181d27;margin-top:16px;font-size:20px}.deployment-card p{color:#717680;font-size:18px}.deployment-card .read-more img,.highlight-card .read-more img{width:12px;height:12px}.collate-om{margin:72px auto 24px;max-width:1200px;padding:20px}.collate-content{background-image:url(/public/images/banner-bg.png);background-size:100% 100%;background-position:center;background-repeat:no-repeat;border-radius:0 20px 20px 20px;padding:28px 44px;width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:24px;position:relative;z-index:24}.collate-content .summit-header{font-size:48px;font-weight:400;color:#224;line-height:52px}.collate-content p{color:#5816dc;margin-top:0;margin-left:4px;font-size:28px;font-weight:600}.collate-content .explore-collate{background-color:#fbe200;color:#000;font-size:18px;white-space:nowrap;padding:11px 20px;border-radius:6px;font-weight:600}.collate-content .explore-collate:hover{background-color:#dec908}.collate-content .explore-collate a{color:#000;font-weight:600}.deployment,.guides,.highlights,.quick-links{padding:48px 48px 96px}.connectors{padding:48px 48px 24px}.guide-header{font-weight:500;font-size:40px;color:#181d27;text-align:center;margin-top:24px}.guide-list{display:grid;grid-template-columns:repeat(7,1fr);gap:24px;margin:52px auto 0;max-width:100%}.guide-card,.see-all{text-align:center;font-size:18px;font-weight:500}.guide-card{box-shadow:0 4px 12px -1px rgba(10,13,18,.08);padding:20px;border-radius:20px;display:flex;flex-direction:column;align-items:center;color:#252b37;gap:16px;width:100%;transition:all .3s ease}.guide-card:hover{box-shadow:0 20px 24px -4px #0a0d1214;transform:translateY(-4px);padding:24px;margin:-4px}a.guide-card img{width:80px!important;height:80px!important}.see-all{margin:64px auto 0;box-shadow:0 2px 2px -1px rgba(10,13,18,.04),0 4px 6px -2px rgba(10,13,18,.03),0 12px 16px -4px rgba(10,13,18,.08);width:max-content;padding:12px 24px;background-color:#f4f3ff;border-radius:100px}.see-all a{color:#6938ef!important}.see-all:hover{background-color:#e3e0fc}.highlight-cards{max-width:850px;display:grid;grid-template-columns:repeat(2,1fr);gap:32px;margin:60px auto 0}.highlight-card{box-shadow:0 4px 12px -1px rgba(10,13,18,.08);padding:20px;border-radius:12px;transition:all .3s ease}.highlight-card p{font-size:18px;color:#717680}.highlight-card:hover{box-shadow:0 3px 3px -1.5px rgba(10,13,18,.04),0 8px 8px -4px rgba(10,13,18,.03),0 20px 24px -4px rgba(10,13,18,.08);padding:24px;margin:-4px;transform:translateY(-2px)}.highlight-card .icon{width:48px!important;height:48px!important}.highlight-header{font-size:20px;font-weight:500;color:#181d27;margin-top:12px}.deployment-card .read-more,.read-more{margin-top:20px;display:flex;gap:10px;align-items:center;color:#6938ef;font-weight:600}.deployment-card .read-more{margin-top:auto}.deployment-card:hover .read-more,.highlight-card:hover .read-more{color:#581ef7}.read-more img{margin-top:2px}.deployment-card img{margin-top:6px}.links{margin:40px auto 0;max-width:80%;display:grid;grid-template-columns:repeat(3,1fr);justify-items:center}.link-header{color:#181d27;display:flex;gap:10px;align-items:center;margin-bottom:16px}.link-header h3{font-size:20px;font-weight:500}.link-list{color:#6938ef;font-weight:500;display:flex;flex-direction:column;gap:12px}.link-list a:hover{text-decoration:underline;color:#5730c1}.collate-video{background:linear-gradient(135deg,rgb(224 195 252/50%) 0,rgb(142 197 252/50%) 100%);border-radius:24px;max-width:90%;margin:32px auto 64px;padding:36px 80px}.video-content{display:grid;grid-template-columns:repeat(2,1fr);align-items:center;gap:16px}.video-container{width:100%;max-width:600px;margin:20px auto;padding:0 16px;box-sizing:border-box}.video,.video-container iframe{border-radius:20px;border:3px solid #bed2fb;height:auto}.video-container iframe{width:100%;aspect-ratio:16/9;display:block}.video{max-width:100%;box-shadow:0 2px 2px -1px rgba(10,13,18,.04),0 4px 6px -2px rgba(10,13,18,.03),0 12px 16px -4px rgba(10,13,18,.08)}.video-chip{background-color:rgba(255,255,255,.4);width:max-content;padding:12px 8px;border-radius:24px;color:#6938ef;font-size:12px}.video-description{color:#414651;font-size:18px;max-width:90%}.product-demo{background-color:#7a5af8;padding:8px 14px;color:#fff;border-radius:24px;margin-right:8px;font-size:12px}.video-header{text-align:left;margin-bottom:16px}.external-links{padding:36px 80px}.explore-container{display:grid;grid-template-columns:repeat(3,1fr)}.explore-items{display:flex;gap:20px;grid-column:span 2/span 2}.explore-header{color:#252b37;font-size:24px;font-weight:600;letter-spacing:-2%}.explore-desc{font-size:18px;color:#717680;margin-top:4px}.slack-icon{width:20px;height:27px}.explore-card{background-color:#f4f9ff;box-shadow:0 4px 12px -8px #0026543d;padding:12px 20px;border-radius:12px;color:#535862;font-size:14px;font-weight:400;transition:all .3s ease}.explore-card:hover{box-shadow:0 3px 3px -1.5px rgba(10,13,18,.04),0 8px 8px -4px rgba(10,13,18,.03),0 20px 24px -4px rgba(10,13,18,.08);padding:16px 24px;margin:-4px;transform:translateY(-2px)}.explore-card-header{display:flex;gap:10px}.explore-card-header div{color:#252b37;font-weight:500;font-size:18px}.home-footer{display:flex;justify-content:space-between;padding:36px 80px 0;color:#717680}.home-footer-links{display:flex;gap:20px}.footer-link-name{color:#252b37;font-weight:400}.footer-link-name:hover{color:#181d27;text-decoration:underline}.home-footer-social{display:flex;gap:8px}.social-link{padding:4px 8px;border-radius:4px}.social-link:hover{background-color:#f8f9fc}.connector-page div[data-component-part=card-icon]{background-color:#f8f9fc;padding:21px 20px;border-radius:100%;display:inline-flex;align-items:center;justify-content:center}.connector-page div[data-component-part=card-icon]>*{position:relative;z-index:1}.connector-page .card [data-component-part=card-content-container]{padding:16px}.card-details{display:flex;gap:6px;align-items:center}.card-logo{width:20px;height:20px;margin:0}.products-container{max-width:1150px;margin:0 auto;padding:60px 14px 40px}.products-container h1{font-size:30px!important}.products-container [data-as=p]:first-of-type{display:block;margin-bottom:40px}.product-cards{margin-top:16px;padding-bottom:48px}.product-cards .card [data-component-part=card-content]{margin-top:4px}.products-container .external-links{padding:64px 0 36px}.products-container .home-footer{padding:36px 0 0}@media (max-width:1280px){.guide-list{grid-template-columns:repeat(3,1fr)}.links{max-width:100%}.collate-video,.external-links,.home-footer{padding:32px 56px}}@media (max-width:1024px){.explore-container,.video-content{grid-template-columns:repeat(1,1fr);gap:28px}.explore-container{gap:32px}.home-footer{display:grid;grid-template-columns:repeat(3,1fr);row-gap:20px}.collate-tm{grid-column:span 3/span 3}.home-footer-links{grid-column:span 2/span 2}.home-footer-social{justify-self:flex-end}}@media (max-width:768px){.page-header{font-size:48px}.chips{display:grid;grid-template-columns:repeat(2,1fr);max-width:400px;margin:40px auto 0}.deployment-cards{grid-template-columns:repeat(1,1fr);gap:64px}.collate-content{flex-direction:column;align-items:center;text-align:center;padding:48px 24px}.guide-list,.links{grid-template-columns:repeat(2,1fr)}.links{justify-items:start;row-gap:40px}.video-container{padding:0 12px;margin:16px auto}.external-links,.home-footer{padding:24px}.home-footer-links{flex-direction:column}}@media (max-width:640px){.chips{max-width:auto;justify-items:center}.chips,.guide-list,.highlight-cards,.links{grid-template-columns:repeat(1,1fr)}.collate-video{padding:24px}.explore-items{flex-direction:column}.best-enterprise{padding:9px 36px 10px 24px}}"},{"filePath":"snippets/components/CodePreview.css","content":".split-layout{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin:2rem 0;align-items:start}@media (max-width:768px){.split-layout{grid-template-columns:1fr;gap:1rem}}.code-content .code-block [data-component-part=code-block-root]{background-color:#0b1e3d!important}.content-panel{display:flex;flex-direction:column;gap:1.5rem;padding-right:1rem}.content-section{padding:.5rem 1rem;border-left:2px solid transparent;border-radius:6px;cursor:pointer;position:relative;box-sizing:border-box;transition:background .25s ease,border-color .25s ease,box-shadow .25s ease}.content-section:hover{background:linear-gradient(90deg,rgba(176,176,176,.08) 0,rgba(176,176,176,.03) 100%);border-left-color:rgba(176,176,176,.5)}.content-section.active{background:linear-gradient(90deg,rgba(176,176,176,.15) 0,rgba(176,176,176,.05) 100%);border-left-color:#b0b0b0;box-shadow:0 2px 8px rgba(176,176,176,.1),inset 0 0 20px rgba(176,176,176,.05);color:#3f4145}.content-section.active::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:linear-gradient(180deg,silver 0,#b0b0b0 50%,#a0a0a0 100%)}.content-section h4{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:#1a1a1a}.content-section p{margin:.5rem 0;line-height:1.6;color:#4a4a4a}.content-section code{background:rgba(0,0,0,.05);padding:.2em .4em;border-radius:3px;font-size:.9em}.code-panel{position:sticky;top:calc(var(--navbar-height, 64px) + 6rem);height:calc(100vh - var(--navbar-height, 64px) - 6rem);display:flex;flex-direction:column;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background:#1e1e1e;box-shadow:0 4px 6px rgba(0,0,0,.1)}.code-panel [data-component-part=code-block-root]{padding:0 1rem}.code-panel .code-block{margin:0}.code-header,.copy-btn{display:flex;align-items:center;font-size:.875rem}.code-header{justify-content:space-between;padding:.4rem 1rem;background:#0b1e3d;border-bottom:1px solid #404040;color:#fff;font-family:'Monaco','Menlo','Ubuntu Mono',monospace}.copy-btn{gap:.5rem;padding:.375rem .75rem;background:0 0;border:1px solid #404040;border-radius:4px;color:#a0a0a0;cursor:pointer;transition:all .2s ease}.copy-btn:hover{background:#404040;border-color:#606060;color:#fff}.copy-btn svg{width:16px;height:16px}.copy-btn .icon-check,.copy-btn[data-copied=true] .icon-copy{display:none}.copy-btn[data-copied=true] .icon-check{display:block;color:#10b981}.code-content{position:relative;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:auto;background:#0b1e3d;scroll-behavior:smooth;padding:14px 0}.code-content::-webkit-scrollbar{width:8px;height:8px}.code-content::-webkit-scrollbar-track{background:#2d2d2d}.code-content::-webkit-scrollbar-thumb{background:#404040;border-radius:4px}.code-content::-webkit-scrollbar-thumb:hover{background:#606060}.code-content pre,.code-line{position:relative;white-space:pre}.code-content pre{margin:0;padding:0 1rem;background:0 0;color:#d4d4d4;font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:.875rem;line-height:1.6;word-wrap:normal;overflow-wrap:normal}.code-content pre code{background:0 0;padding:0;color:inherit;font-size:inherit;border-radius:0;display:block;white-space:pre}.code-line{display:block;padding-left:1rem;padding-right:1rem;margin-left:-1rem;margin-right:-1rem;transition:all .2s ease;line-height:inherit;border-left:2px solid transparent}.code-line::after{content:'\\a';white-space:pre}.code-line.highlighted{background:rgba(200,200,200,.15)!important;border-left:2px solid #d0d0d0;padding-left:calc(1rem - 2px);min-height:1.5em}.code-line.highlighted::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:#d0d0d0;z-index:1}.code-line.highlighted+.code-line.highlighted{border-top:none}.code-line.highlighted:not(.code-line.highlighted+.code-line.highlighted){border-top-left-radius:4px}.code-line.highlighted:not(:has(+.code-line.highlighted)){border-bottom-left-radius:4px}.line-number{display:inline-block;min-width:2.5em;padding-right:1em;margin-right:.5em;text-align:right;color:#858585;user-select:none;border-right:1px solid #404040}@media (prefers-color-scheme:dark){.content-section p{color:silver}.content-section code{background:rgba(255,255,255,.1)}.code-panel{border-color:#404040}}@media (max-width:768px){.code-panel{position:relative;top:0;max-height:400px}.split-layout{grid-template-columns:1fr}}.code-content #ask-ai-code-block-button,.code-content [data-testid=copy-code-button]{display:none!important}div[data-fade-overlay=true]{--fade-color-light:transparent!important;--fade-color-dark:transparent!important;display:none!important}:has([data-floating-buttons])>[data-component-part=code-block-root] pre>code{padding-right:0!important}@media (max-width:768px){.code-panel{position:relative;top:0;height:400px}}"},{"filePath":"snippets/components/ConnectorDetailsHeader/ConnectorDetailsHeader.css","content":".container{margin:48px 0!important;display:flex;flex-direction:column;gap:6px}.Heading{display:flex;justify-content:space-between;padding-bottom:8px;border-bottom:1px solid var(--default-border-color)}.ConnectorName{font-size:32px;font-weight:700;margin-bottom:0}.PlatformDetails{display:flex;align-items:center;gap:4px;font-size:14px;color:var(--gray-text-color)}.ImageContainer,.PlatformIcon{padding:4px;background-color:var(--connector-icon-bg-color);border:1px solid var(--default-border-color);border-radius:12px}.ImageContainer{padding:12px;border-radius:28px}.IconContainer{background-color:#f8f9fc;padding:16px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;width:64px;height:64px;flex-shrink:0}.ConnectorIcon{width:32px!important;height:32px!important;object-fit:contain;display:block;margin:0}.FeaturesHeading{font-size:14px;color:var(--gray-text-color)}.SubHeading{display:flex;flex-direction:column;gap:8px}.FeaturesList{display:flex;flex-wrap:wrap;gap:12px}.FeatureTag{padding:4px 10px;font-size:12px;border-radius:14px;width:fit-content;display:flex;align-items:center;gap:4px}.AvailableFeature{color:var(--green-tag-color);border:1px solid var(--green-tag-color);background-color:var(--green-tag-bg-color)}.UnavailableFeature{color:var(--orange-tag-color);border:1px solid var(--orange-tag-color);background-color:var(--orange-tag-bg-color)}.StageBadge{font-size:10px;height:auto;color:var(--green-tag-color)}"},{"filePath":"snippets/v1.13.x/components/ConnectorGrid/Integrations.css","content":".no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.integrations-section{padding:3rem 1rem 9rem;max-width:1300px;margin:0 auto}.integrations-card{background:#fafafa;border-radius:12px;border:1px solid #eaecf5;display:flex;height:610px;overflow:hidden;position:relative;padding:40px 40px 40px 0}.integrations-mobile-header{display:none;width:100%;background:#fff;border-bottom:1px solid #d9daee;padding:32px;font-size:20px;justify-content:center;align-items:center;gap:12px;position:sticky;top:0;z-index:15;cursor:pointer}.arrow{transition:transform .3s ease}.arrow.open{transform:rotate(180deg)}.arrow-down{width:10px;height:10px}.integrations-sidebar{width:220px;border-right:1px solid #eaecf5;display:flex;flex-direction:column;position:sticky;top:0;z-index:5}.sidebar-item{display:block;width:100%;padding:12px 22px;font-size:16px;color:#535862;cursor:pointer;white-space:nowrap;flex-shrink:0;text-align:right;font-weight:500;border-right:2px solid transparent}.sidebar-item:hover{color:#414651;border-right:2px solid #d5d9eb}.sidebar-item.active{border-right:2px solid #6938ef;font-weight:600;color:#6938ef}.integrations-grid{flex:1;padding:20px 32px;overflow-y:auto;display:grid;gap:20px;align-content:flex-start}.integrations-grid.desktop{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.integrations-grid.mobile{display:none}.integration-card{max-height:110px;display:flex;align-items:center;gap:12px;background-color:#fff;box-shadow:0 4px 12px -1px #0a0d1214;border-radius:12px;padding:12px 20px;box-sizing:border-box;transition:all .3s ease}.integration-card span{color:#181d27;font-weight:500;font-size:16px;line-height:120%}.integration-card,a.integration-card span:hover{text-decoration:none}a.integration-card:hover{box-shadow:0 3px 3px -1.5px #0a0d120a,0 8px 8px -4px #0a0d1208,0 20px 24px -4px #0a0d1214;padding:16px 24px;margin:-4px;text-decoration:none;transform:translateY(-2px)}.integration-card img{width:32px;height:32px;object-fit:contain;flex-shrink:0}.load-more{grid-column:span 2;padding:24px;font-size:20px;background:#fff;border:0;cursor:pointer}@media (max-width:1024px){.integrations-card{flex-direction:column;height:auto;padding:0;overflow:auto}.integrations-mobile-header{display:flex}.integrations-sidebar{display:none;width:100%;position:absolute;top:68px;left:0;right:0;border-right:none;border-bottom:1px solid #d9daee;background:#fff;overflow-y:scroll;z-index:20}.integrations-sidebar.open{display:block}.sidebar-item{text-align:center}.sidebar-item.active{border-right:none}.integrations-grid.desktop{display:none}.integrations-grid.mobile{display:grid;grid-template-columns:repeat(2,1fr);padding:24px}}"},{"filePath":"snippets/components/BreakingChanges/BreakingChanges.css","content":".breaking-changes-container{border-bottom:5px solid #b42318;border-radius:20px;background-color:#ef4444;padding:12px 18px 18px;margin:24px 0}.breaking-changes-header{display:flex;align-items:center;gap:10px;margin-bottom:16px;margin-top:4px!important}.breaking-changes-icon{width:24px;height:24px;flex-shrink:0}.breaking-changes-title{font-size:22px;font-weight:700;color:#fff}.breaking-changes-content{background-color:#fef3f2;border-radius:20px;padding:20px 24px;color:#414045}.breaking-changes-content ul{margin:0}.breaking-changes-content li{margin-bottom:12px;line-height:1.6}.breaking-changes-content li:last-child{margin-bottom:0}.breaking-changes-content pre{border-radius:8px;padding:16px 20px;margin:12px 0;overflow-x:auto}.breaking-changes-content code{font-size:14px;line-height:1.7}"},{"filePath":"snippets/components/VersionMatrix/VersionMatrix.css","content":".vm-wrapper{border-radius:16px;overflow-x:auto;border:1px solid #7237f8;max-width:700px;font-family:inherit;display:inline-block;width:100%}.vm-wrapper .vm-table,.vm-wrapper .vm-table>div{margin:0!important;padding:0!important;width:100%!important;max-width:100%!important}.vm-wrapper table{margin:0!important;width:100%!important;min-width:0!important;display:table!important;table-layout:fixed;border-collapse:collapse}.vm-header-row{background:#6938ef}.vm-wrapper .vm-th{padding:14px 20px;text-align:left;color:#fff;font-weight:500;font-size:18px;width:50%}.vm-th:not(:last-child){border-right:1px solid rgba(255,255,255,.4)}.vm-row-even{background:#fff}.vm-row-odd{background:#f5f3ff}.vm-wrapper .vm-td{padding:14px 20px;font-size:16px;border-top:1px solid #e5e7eb;color:#111827;text-align:left}.vm-td:not(:last-child){border-right:1px solid #e5e7eb}.vm-td-updated{font-weight:400}.vm-updated-badge{color:#000;font-weight:400;font-size:14px;display:inline-flex;align-items:center;margin-left:12px;vertical-align:top}.vm-badge-icon{fill:red;vertical-align:middle;margin-right:4px;flex-shrink:0}@media (max-width:480px){.vm-td,.vm-th{padding:10px 12px;font-size:14px}.vm-td{font-size:13px}.vm-updated-badge{font-size:11px;display:flex;margin-left:0;margin-top:4px}.vm-badge-icon{width:12px;height:12px}}"},{"filePath":"snippets/components/CodeLayout/CodeLayout.css","content":".code-layout{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin:2rem 0;align-items:start;width:100%}.code-layout h4{margin-top:0}.code-layout-code{position:-webkit-sticky;position:sticky;top:132px;align-self:flex-start;max-height:calc(100vh - 132px);overflow-y:auto;z-index:10}@media (max-width:768px){.code-layout{grid-template-columns:1fr;gap:1rem}.code-layout-code{position:static;max-height:none;overflow-y:visible}}"},{"filePath":"snippets/components/ConnectorFilter/ConnectorFilter.css","content":".connector-filter{--connector-filter-accent:#1570ef;position:sticky;top:0;z-index:20;margin:20px 0 28px;padding:16px;border:1px solid var(--default-border-color, #e5e7eb);border-radius:8px;background-color:var(--background-color, #fff);box-shadow:0 2px 8px rgba(15,23,42,.06)}.connector-filter-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px}.connector-filter-field{display:flex;flex-direction:column;gap:6px;flex:1 1 160px;min-width:140px}.connector-filter-search-field{flex:1 1 170px;min-width:140px}.connector-filter-field label{font-size:14px;font-weight:600;color:var(--default-text-color, #374151)}.connector-filter-search{display:flex;align-items:center;gap:8px;height:36px;padding:0 10px;border:1px solid var(--select-border-color, #d1d5db);border-radius:6px;background-color:var(--background-color, #fff);color:var(--gray-text-color, #6b7280)}.connector-filter-search:focus-within{border-color:var(--connector-filter-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--connector-filter-accent) 20%,transparent)}.connector-filter-search svg{flex-shrink:0}.connector-filter-search input{flex:1;min-width:0;border:0;outline:0;background:0 0;font-size:13px;color:var(--default-text-color, #111827)}.connector-filter-dropdown{position:relative}.connector-filter-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;height:36px;padding:0 10px;border:1px solid var(--select-border-color, #d1d5db);border-radius:6px;background-color:var(--background-color, #fff);color:var(--default-text-color, #111827);font-size:13px;cursor:pointer;text-align:left}.connector-filter-trigger:hover{border-color:var(--connector-filter-accent)}.connector-filter-trigger[aria-expanded=true]{border-color:var(--connector-filter-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--connector-filter-accent) 20%,transparent)}.connector-filter-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.connector-filter-chevron{flex-shrink:0;color:var(--gray-text-color, #6b7280);transition:transform .15s ease}.connector-filter-chevron-open{transform:rotate(180deg);color:var(--connector-filter-accent)}.connector-filter-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;max-height:320px;overflow-y:auto;margin:0;padding:6px;list-style:none;border:1px solid var(--default-border-color, #e5e7eb);border-radius:8px;background-color:var(--background-color, #fff);box-shadow:0 8px 24px rgba(15,23,42,.12)}.connector-filter-menu li{list-style:none}.connector-filter-menu li::before,.connector-filter-menu li::marker{content:none}.connector-filter-menu li[role=option]{padding:7px 10px;border-radius:5px;font-size:13px;color:var(--default-text-color, #111827);cursor:pointer}.connector-filter-menu li[role=option]:hover{background-color:var(--primary-background-color, rgba(21, 112, 239, 0.08))}.connector-filter-menu li[role=option].active{background-color:var(--primary-background-color, rgba(21, 112, 239, 0.1));color:var(--connector-filter-accent);font-weight:600}.connector-filter-group-label{padding:6px 10px 4px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--gray-text-color, #9ca3af)}.connector-filter-reset{flex-shrink:0;margin-left:auto;height:36px;padding:0 14px;border:1px solid var(--connector-filter-accent);border-radius:6px;background-color:transparent;color:var(--connector-filter-accent);font-size:13px;font-weight:600;cursor:pointer}.connector-filter-reset:hover{background-color:color-mix(in srgb,var(--connector-filter-accent) 10%,transparent)}"},{"filePath":"snippets/v2.0.x/components/ConnectorGrid/Integrations.css","content":".no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.integrations-section{padding:1.5rem .5rem 4.5rem;max-width:1300px;margin:0 auto}.integrations-card{background:#fafafa;border-radius:12px;border:1px solid #eaecf5;display:flex;height:610px;overflow:hidden;position:relative;padding:40px 40px 40px 0}.integrations-mobile-header{display:none;width:100%;background:#fff;border-bottom:1px solid #d9daee;padding:32px;font-size:20px;justify-content:center;align-items:center;gap:12px;position:sticky;top:0;z-index:15;cursor:pointer}.arrow{transition:transform .3s ease}.arrow.open{transform:rotate(180deg)}.arrow-down{width:10px;height:10px}.integrations-sidebar{width:220px;border-right:1px solid #eaecf5;display:flex;flex-direction:column;position:sticky;top:0;z-index:5}.sidebar-item{display:block;width:100%;padding:12px 22px;font-size:16px;color:#535862;cursor:pointer;white-space:nowrap;flex-shrink:0;text-align:right;font-weight:500;border-right:2px solid transparent}.sidebar-item:hover{color:#414651;border-right:2px solid #d5d9eb}.sidebar-item.active{border-right:2px solid #6938ef;font-weight:600;color:#6938ef}.integrations-grid{flex:1;padding:20px 32px;overflow-y:auto;display:grid;gap:20px;align-content:flex-start}.integrations-grid.desktop{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.integrations-grid.mobile{display:none}.integration-card{max-height:110px;display:flex;align-items:center;gap:12px;background-color:#fff;box-shadow:0 4px 12px -1px #0a0d1214;border-radius:12px;padding:12px 20px;box-sizing:border-box;transition:all .3s ease}.integration-card span{color:#181d27;font-weight:500;font-size:16px;line-height:120%}.integration-card,a.integration-card span:hover{text-decoration:none}a.integration-card:hover{box-shadow:0 3px 3px -1.5px #0a0d120a,0 8px 8px -4px #0a0d1208,0 20px 24px -4px #0a0d1214;padding:16px 24px;margin:-4px;text-decoration:none;transform:translateY(-2px)}.integration-card img{width:32px;height:32px;object-fit:contain;flex-shrink:0}.load-more{grid-column:span 2;padding:24px;font-size:20px;background:#fff;border:0;cursor:pointer}@media (max-width:1024px){.integrations-card{flex-direction:column;height:auto;padding:0;overflow:auto}.integrations-mobile-header{display:flex}.integrations-sidebar{display:none;width:100%;position:absolute;top:68px;left:0;right:0;border-right:none;border-bottom:1px solid #d9daee;background:#fff;overflow-y:scroll;z-index:20}.integrations-sidebar.open{display:block}.sidebar-item{text-align:center}.sidebar-item.active{border-right:none}.integrations-grid.desktop{display:none}.integrations-grid.mobile{display:grid;grid-template-columns:repeat(2,1fr);padding:24px}}"},{"filePath":"snippets/v2.1.x-SNAPSHOT/components/ConnectorGrid/Integrations.css","content":".no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.integrations-section{padding:1.5rem .5rem 4.5rem;max-width:1300px;margin:0 auto}.integrations-card{background:#fafafa;border-radius:12px;border:1px solid #eaecf5;display:flex;height:610px;overflow:hidden;position:relative;padding:40px 40px 40px 0}.integrations-mobile-header{display:none;width:100%;background:#fff;border-bottom:1px solid #d9daee;padding:32px;font-size:20px;justify-content:center;align-items:center;gap:12px;position:sticky;top:0;z-index:15;cursor:pointer}.arrow{transition:transform .3s ease}.arrow.open{transform:rotate(180deg)}.arrow-down{width:10px;height:10px}.integrations-sidebar{width:220px;border-right:1px solid #eaecf5;display:flex;flex-direction:column;position:sticky;top:0;z-index:5}.sidebar-item{display:block;width:100%;padding:12px 22px;font-size:16px;color:#535862;cursor:pointer;white-space:nowrap;flex-shrink:0;text-align:right;font-weight:500;border-right:2px solid transparent}.sidebar-item:hover{color:#414651;border-right:2px solid #d5d9eb}.sidebar-item.active{border-right:2px solid #6938ef;font-weight:600;color:#6938ef}.integrations-grid{flex:1;padding:20px 32px;overflow-y:auto;display:grid;gap:20px;align-content:flex-start}.integrations-grid.desktop{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.integrations-grid.mobile{display:none}.integration-card{max-height:110px;display:flex;align-items:center;gap:12px;background-color:#fff;box-shadow:0 4px 12px -1px #0a0d1214;border-radius:12px;padding:12px 20px;box-sizing:border-box;transition:all .3s ease}.integration-card span{color:#181d27;font-weight:500;font-size:16px;line-height:120%}.integration-card,a.integration-card span:hover{text-decoration:none}a.integration-card:hover{box-shadow:0 3px 3px -1.5px #0a0d120a,0 8px 8px -4px #0a0d1208,0 20px 24px -4px #0a0d1214;padding:16px 24px;margin:-4px;text-decoration:none;transform:translateY(-2px)}.integration-card img{width:32px;height:32px;object-fit:contain;flex-shrink:0}.load-more{grid-column:span 2;padding:24px;font-size:20px;background:#fff;border:0;cursor:pointer}@media (max-width:1024px){.integrations-card{flex-direction:column;height:auto;padding:0;overflow:auto}.integrations-mobile-header{display:flex}.integrations-sidebar{display:none;width:100%;position:absolute;top:68px;left:0;right:0;border-right:none;border-bottom:1px solid #d9daee;background:#fff;overflow-y:scroll;z-index:20}.integrations-sidebar.open{display:block}.sidebar-item{text-align:center}.sidebar-item.active{border-right:none}.integrations-grid.desktop{display:none}.integrations-grid.mobile{display:grid;grid-template-columns:repeat(2,1fr);padding:24px}}"},{"filePath":"snippets/v2.0.x/components/ReleaseCarousel/ReleaseCarousel.css","content":"@keyframes release-carousel-slide-next{0%{opacity:0;transform:translateX(60px)}to{opacity:1;transform:translateX(0)}}@keyframes release-carousel-slide-prev{0%{opacity:0;transform:translateX(-60px)}to{opacity:1;transform:translateX(0)}}.release-banner{max-width:1300px;margin:0 auto;background:linear-gradient(135deg,rgba(105,56,239,.12) 0,rgba(142,198,252,.35) 100%);padding:48px 100px;border-radius:24px}.release-banner-content{display:grid;grid-template-columns:repeat(2,1fr);gap:50px;align-items:center}.release-banner-content h2{color:#181d27;font-weight:500;font-size:32px;margin-bottom:16px}.release-banner-content p,.release-carousel-content [data-as=p]{color:#414651;font-size:18px;margin-bottom:24px}.release-banner-content a{background-color:#fff;box-shadow:0 1px 2px rgba(10,13,18,.06),0 2px 4px rgba(10,13,18,.05);padding:12px 24px;border-radius:99px;font-size:18px;font-weight:500;color:#131313}.release-banner-content a:hover{text-decoration:underline}.release-carousel{position:relative}.release-carousel-viewport{overflow:hidden}.release-carousel-content [data-as=p]{display:block}.release-carousel-content [data-as=p] strong{color:#181d27;font-weight:700}.release-carousel-content a{display:inline-block}.release-carousel-title-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}.release-carousel-content .release-carousel-title-row h2{margin:0}.release-carousel-eyebrow{display:inline-block;flex-shrink:0;background-color:#f4f3ff;color:#6938ef;padding:4px 14px;border-radius:100px;font-size:13px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.release-carousel-content.slide-next{animation:release-carousel-slide-next .45s ease}.release-carousel-content.slide-prev{animation:release-carousel-slide-prev .45s ease}.release-carousel-image{width:100%;max-width:1200px;display:block;border:3px solid #d9d2fa;border-radius:16px;box-shadow:0 2px 2px -1px #0a0d120a,0 4px 6px -2px #0a0d1208,0 12px 16px -4px #0a0d1214;cursor:zoom-in}.release-carousel-lightbox{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:40px;background-color:rgba(16,24,40,.85)}.release-carousel-lightbox-image{max-width:100%;max-height:100%;display:block;border-radius:12px;box-shadow:0 12px 16px -4px #0a0d1214;cursor:default}.release-carousel-lightbox-close{top:24px;right:24px;border:1px solid rgba(255,255,255,.3);background-color:rgba(255,255,255,.1);color:#fff}.release-carousel-lightbox-close:hover{background-color:rgba(255,255,255,.2)}.release-carousel .carousel-arrow,.release-carousel-lightbox-close{position:absolute;display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;transition:background-color .15s ease}.release-carousel .carousel-arrow{top:50%;transform:translateY(-50%);border:1px solid #d9d2fa;background-color:#fff;color:#181d27;box-shadow:0 2px 2px -1px #0a0d120a,0 4px 6px -2px #0a0d1208,0 12px 16px -4px #0a0d1214}.release-carousel .carousel-arrow:hover{background-color:#f4f3ff}.release-carousel .carousel-arrow-prev{left:16px}.release-carousel .carousel-arrow-next{right:16px}.release-carousel .carousel-dots{display:flex;justify-content:center;gap:8px;margin-top:16px}.release-carousel .carousel-dot{width:8px;height:8px;border-radius:50%;border:0;background-color:#d9d2fa;padding:0;cursor:pointer;transition:background-color .15s ease,transform .15s ease}.release-carousel .carousel-dot.active{background-color:#6938ef;transform:scale(1.2)}@media (max-width:1024px){.release-banner-content{grid-template-columns:repeat(1,1fr)}.release-banner-content h2{font-size:28px}.release-carousel .carousel-arrow-prev{left:4px}.release-carousel .carousel-arrow-next{right:4px}}@media (max-width:768px){.release-banner{padding:40px 52px}.release-carousel .carousel-arrow{width:32px;height:32px}}@media (max-width:480px){.release-banner{padding:40px 20px}}"},{"filePath":"snippets/v2.1.x-SNAPSHOT/components/ReleaseCarousel/ReleaseCarousel.css","content":"@keyframes release-carousel-slide-next{0%{opacity:0;transform:translateX(60px)}to{opacity:1;transform:translateX(0)}}@keyframes release-carousel-slide-prev{0%{opacity:0;transform:translateX(-60px)}to{opacity:1;transform:translateX(0)}}.release-banner{max-width:1300px;margin:0 auto;background:linear-gradient(135deg,rgba(105,56,239,.12) 0,rgba(142,198,252,.35) 100%);padding:48px 100px;border-radius:24px}.release-banner-content{display:grid;grid-template-columns:repeat(2,1fr);gap:50px;align-items:center}.release-banner-content h2{color:#181d27;font-weight:500;font-size:32px;margin-bottom:16px}.release-banner-content p,.release-carousel-content [data-as=p]{color:#414651;font-size:18px;margin-bottom:24px}.release-banner-content a{background-color:#fff;box-shadow:0 1px 2px rgba(10,13,18,.06),0 2px 4px rgba(10,13,18,.05);padding:12px 24px;border-radius:99px;font-size:18px;font-weight:500;color:#131313}.release-banner-content a:hover{text-decoration:underline}.release-carousel{position:relative}.release-carousel-viewport{overflow:hidden}.release-carousel-content [data-as=p]{display:block}.release-carousel-content [data-as=p] strong{color:#181d27;font-weight:700}.release-carousel-content a{display:inline-block}.release-carousel-title-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}.release-carousel-content .release-carousel-title-row h2{margin:0}.release-carousel-eyebrow{display:inline-block;flex-shrink:0;background-color:#f4f3ff;color:#6938ef;padding:4px 14px;border-radius:100px;font-size:13px;font-weight:600;letter-spacing:.02em;text-transform:uppercase}.release-carousel-content.slide-next{animation:release-carousel-slide-next .45s ease}.release-carousel-content.slide-prev{animation:release-carousel-slide-prev .45s ease}.release-carousel-image{width:100%;max-width:1200px;display:block;border:3px solid #d9d2fa;border-radius:16px;box-shadow:0 2px 2px -1px #0a0d120a,0 4px 6px -2px #0a0d1208,0 12px 16px -4px #0a0d1214;cursor:zoom-in}.release-carousel-lightbox{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:40px;background-color:rgba(16,24,40,.85)}.release-carousel-lightbox-image{max-width:100%;max-height:100%;display:block;border-radius:12px;box-shadow:0 12px 16px -4px #0a0d1214;cursor:default}.release-carousel-lightbox-close{top:24px;right:24px;border:1px solid rgba(255,255,255,.3);background-color:rgba(255,255,255,.1);color:#fff}.release-carousel-lightbox-close:hover{background-color:rgba(255,255,255,.2)}.release-carousel .carousel-arrow,.release-carousel-lightbox-close{position:absolute;display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;cursor:pointer;transition:background-color .15s ease}.release-carousel .carousel-arrow{top:50%;transform:translateY(-50%);border:1px solid #d9d2fa;background-color:#fff;color:#181d27;box-shadow:0 2px 2px -1px #0a0d120a,0 4px 6px -2px #0a0d1208,0 12px 16px -4px #0a0d1214}.release-carousel .carousel-arrow:hover{background-color:#f4f3ff}.release-carousel .carousel-arrow-prev{left:16px}.release-carousel .carousel-arrow-next{right:16px}.release-carousel .carousel-dots{display:flex;justify-content:center;gap:8px;margin-top:16px}.release-carousel .carousel-dot{width:8px;height:8px;border-radius:50%;border:0;background-color:#d9d2fa;padding:0;cursor:pointer;transition:background-color .15s ease,transform .15s ease}.release-carousel .carousel-dot.active{background-color:#6938ef;transform:scale(1.2)}@media (max-width:1024px){.release-banner-content{grid-template-columns:repeat(1,1fr)}.release-banner-content h2{font-size:28px}.release-carousel .carousel-arrow-prev{left:4px}.release-carousel .carousel-arrow-next{right:4px}}@media (max-width:768px){.release-banner{padding:40px 52px}.release-carousel .carousel-arrow{width:32px;height:32px}}@media (max-width:480px){.release-banner{padding:40px 20px}}"}],"page":{"pagePath":"v1.13.x/api-reference/main-concepts/high-level-design","slug":"/v1.13.x/api-reference/main-concepts/high-level-design","pageMetadata":{"title":"High Level Design | OpenMetadata Architecture Overview","description":"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.","sidebarTitle":"High Level Design","href":"/v1.13.x/api-reference/main-concepts/high-level-design"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,OptimizedImage,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`high-level-design`,children:`High Level Design`}),`\n`,_jsx(_components.p,{children:`This Solution Design document will help us explore and understand the internals of OpenMetadata services, how are they built and\ntheir interactions.`}),`\n`,_jsx(_components.p,{children:`We will start by describing the big picture of the software design of the application. Bit by bit we will get inside\nspecific components, describing their behaviour and showing examples on how to use them.`}),`\n`,_jsx(Heading,{level:`2`,id:`system-context`,children:`System Context`}),`\n`,_jsx(_components.p,{children:`The goal of this first section is to get familiar with the high-level concepts and technologies involved. The learning objectives here are:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Describe the elements that compose OpenMetadata and their relationships.`}),`\n`,_jsx(_components.li,{children:`How end-users and external applications can communicate with the system.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Here we have the main actors of the solution:`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=0293e566edc406d02782604d97fc24b0`,alt:`system-context`,\"data-og-width\":`1021`,width:`1021`,\"data-og-height\":`741`,height:`741`,\"data-path\":`public/images/main-concepts/high-level-design/system-context.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=280\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=10c4dbbb4a7c14f1ebde4f0945c658f8 280w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=560\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=af98750faf1b36316a409d8aa0b4998d 560w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=840\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=51a98244976192d24c8aa03aa0d7491c 840w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=1100\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=fc49f88710f5b5743e705a917a554f18 1100w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=1650\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=7ab4ba2431668b360380ed667fce43d2 1650w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/system-context.png?w=2500\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=318e3080ef9e9c0da86d890d1343f91e 2500w`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`API`}),`: This is the main pillar of OpenMetadata. Here we have defined how we can interact with the metadata Entities.\nIt powers all the other components of the solution.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`UI`}),`: Discovery-focused tool that helps users keep track of all the data assets in the organisation. Its goal is\nenabling and fueling collaboration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Ingestion Framework`}),`: Based on the API specifications, this system is the foundation of all the Connectors, i.e., the\ncomponents that define the interaction between OpenMetadata and external systems containing the metadata we want to integrate.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entity Store`}),`: MySQL storage that contains real-time information on the state of all the Entities and their Relationships.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Search Engine`}),`: Powered by ElasticSearch, it is the indexing system for the UI to help users discover the metadata.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`json-schemas`,children:`JSON Schemas`}),`\n`,_jsx(_components.p,{children:`If we abstract away from the Storage Layer for a moment, we then realize that the OpenMetadata implementation is the\nintegration of three blocks:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The core `,_jsx(_components.strong,{children:`API`}),`, unifying and centralising the communication with internal and external systems.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`UI`}),` for a team-centric metadata Serving Layer.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Ingestion Framework`}),` as an Interface between OpenMetadata and external sources.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The only thing these components have in common is the `,_jsx(_components.strong,{children:`vocabulary`}),` -> All of them are shaping, describing, and moving\naround metadata Entities.`]}),`\n`,_jsxs(_components.p,{children:[`OpenMetadata is based on a `,_jsx(_components.strong,{children:`standard definition`}),` for metadata. Therefore, we need to make sure that in our implementation\nof this standard we share this definition in the end-to-end workflow. To this end, the main lexicon is defined as JSON Schemas,\na readable and language-agnostic solution.`]}),`\n`,_jsx(_components.p,{children:`Then, when packaging the main components, we generate the specific programming classes for all the Entities.\nWhat we achieve is three views from the same source:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Java Classes for the API,`}),`\n`,_jsx(_components.li,{children:`Python Classes for the Ingestion Framework and`}),`\n`,_jsx(_components.li,{children:`TypeScript Types for the UI,`}),`\n`]}),`\n`,_jsx(_components.p,{children:`each of them modeled after a single source of truth. Thanks to this approach we can be sure that it does not matter at\nwhich point we zoom in throughout the whole process, we are always going to find a univocal well-defined Entity.`}),`\n`,_jsx(Heading,{level:`2`,id:`api-container-diagram`,children:`API Container Diagram`}),`\n`,_jsx(_components.p,{children:`Now we are going to zoom inside the API Container. As the central Software System of the solution, its goal is to manage\ncalls (both from internal and external sources, e.g., Ingestion Framework or any custom integration) and update the\nstate of the metadata Entities.`}),`\n`,_jsx(_components.p,{children:`While the data is stored in the MySQL container, the API will be the one fetching it and completing the necessary\ninformation, validating the Entities data and all the relationships.`}),`\n`,_jsx(_components.p,{children:`Having a Serving Layer (API) decoupled from the Storage Layer allows users and integrations to ask for what they need\nin a simple language (REST), without the learning curve of diving into specific data models and design choices.`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=2b7e366f0b02fca91e844ac679e968fe`,alt:`api-container-diagram`,\"data-og-width\":`831`,width:`831`,\"data-og-height\":`971`,height:`971`,\"data-path\":`public/images/main-concepts/high-level-design/api-container-diagram.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=280\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=aab8226bf47a6ace0d98b011efb98b45 280w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=560\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=9c0d9e26b97d602424dcac28e7ae6079 560w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=840\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=cbbe2da911a161e19b3410b9d0eb0365 840w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=1100\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=dba305f2b6b1c35ad6658649e312aa81 1100w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=1650\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=ebcc9b166344f5b1b815d7e50e35fa30 1650w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/api-container-diagram.png?w=2500\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=19cf464abe6a1ed3f8f6326e207edaa2 2500w`}),`\n`,_jsx(Heading,{level:`2`,id:`entity-resource`,children:`Entity Resource`}),`\n`,_jsx(_components.p,{children:`When we interact with most of our Entities, we follow the same endpoint structure. For example:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET \u003curl>/api/v1/\u003ccollectionName>/\u003cid>`}),` to retrieve an Entity instance by ID, or`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GET \u003curl>/api/v1/\u003ccollectionName>/name/\u003cFQN>`}),` to query by its fully qualified domain name.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Similarly, we support other CRUD operations, each of them expecting a specific incoming data structure, and returning\nthe Entity’s class. As the foundations of OpenMetadata are the Entities definitions, we have this data contract with\nany consumer, where the backend will validate the received data, as well as the outputs.`}),`\n`,_jsx(_components.p,{children:`The endpoint definition and datatype setting are what happens at the Entity Resource. Each metadata Entity is packed\nwith a Resource class, which builds the API definition for the given Entity.`}),`\n`,_jsxs(_components.p,{children:[`This logic is what then surfaces in the `,_jsx(_components.a,{href:`https://docs.open-metadata.org/api-reference`,children:`API docs`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`entity-repository`,children:`Entity Repository`}),`\n`,_jsxs(_components.p,{children:[`The goal of the Entity Repository is to perform Read \u0026 Write operations to the `,_jsx(_components.strong,{children:`backend database`}),` to Create, Retrieve,\nUpdate and Delete Entities.`]}),`\n`,_jsx(_components.p,{children:`While the Entity Resource handles external communication, the Repository is in charge of managing how the whole\nprocess interacts with the Storage Layer, making sure that incoming and outgoing Entities are valid and hold proper\nand complete information.`}),`\n`,_jsxs(_components.p,{children:[`This means that here is where we define our `,_jsx(_components.strong,{children:`DAO`}),` (Data Access Object), with all the validation and data storage logic.`]}),`\n`,_jsxs(_components.p,{children:[`As there are processes repeated across all Entities (e.g., listing entities in a collection or getting a specific\nversion from an Entity), the Entity Repository extends an `,_jsx(_components.strong,{children:`Interface`}),` that implements some basic functionalities and\nabstracts Entity specific logic.`]}),`\n`,_jsxs(_components.p,{children:[`Each Entity then needs to implement its `,_jsx(_components.strong,{children:`server-side processes`}),` such as building the FQN based on the Entity hierarchy,\nhow the Entity stores and retrieves `,_jsx(_components.strong,{children:`Relationship`}),` information with other Entities or how the Entity reacts to `,_jsx(_components.strong,{children:`Change Events`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`entity-storage-layer`,children:`Entity Storage Layer`}),`\n`,_jsx(_components.p,{children:`In the API Container Diagram, we showed how the Entity Repository interacts with three different Storage Containers\n(tables) depending on what type of information is being processed.`}),`\n`,_jsx(_components.p,{children:`To fully understand this decision, we should first talk about the information contained by Entities instances.`}),`\n`,_jsxs(_components.p,{children:[`An Entity has two types of fields: `,_jsx(_components.strong,{children:`attributes`}),` (JSON Schema properties) and `,_jsx(_components.strong,{children:`relationships`}),` (JSON Schema href):`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Attributes`}),` are the core properties of the Entity: the name and id, the columns for a table, or the algorithm\nfor an ML Model. Those are intrinsic pieces of information of an Entity and their existence and values are what\nhelp us differentiate both Entity instances (Table A vs. Table B) and Entity definitions (Dashboard vs. Topic).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Relationships`}),` are associations between two Entities. For example, a Table belongs to a Database, a User owns a\nDashboard, etc. Relationships are a special type of attribute that is captured using Entity References.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`entity-and-relationship-store`,children:`Entity and Relationship Store`}),`\n`,_jsxs(_components.p,{children:[`Entities are stored as JSON documents in the database. Each entity has an associated table (`,_jsx(_components.code,{children:`\u003centityName>_entity`}),`) which\ncontains the JSON defining the Entity attributes and other metadata fields, such as the id, `,_jsx(_components.code,{children:`updatedAt`}),` or `,_jsx(_components.code,{children:`updatedBy`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`This JSON does not store any Relationship. E.g., a User owning a Dashboard is a piece of information that is materialised\nin a separate table entity_relationship as graph nodes, where the edge holds the type of the Relationship (e.g., `,_jsx(_components.code,{children:`contains`}),`,\n`,_jsx(_components.code,{children:`uses`}),`, `,_jsx(_components.code,{children:`follows`}),`…).`]}),`\n`,_jsxs(_components.p,{children:[`This separation helps us decouple concerns. We can process related entities independently and validate at runtime what\ninformation needs to be updated and/or retrieved. For example, if we delete a Dashboard being owned by a User, we will then\nclean up this row in `,_jsx(_components.code,{children:`entity_relationship`}),`, but that won’t alter the information from the User.`]}),`\n`,_jsx(_components.p,{children:`Another trickier example would be trying to delete a Database that contains Tables. In this case, the process would check\nthat the Database Entity is not empty, and therefore we cannot continue with the removal.`}),`\n`,_jsx(Heading,{level:`2`,id:`change-events-store`,children:`Change Events Store`}),`\n`,_jsxs(_components.p,{children:[`You might have already noticed that in all Entities definitions we have a `,_jsx(_components.code,{children:`changeDescription`}),` field. It is defined as\n“Change that leads to this version of the entity”. If we inspect further the properties of `,_jsx(_components.code,{children:`changeDescription`}),`, we can\nsee how it stores the differences between the current and last versions of an Entity.`]}),`\n`,_jsx(_components.p,{children:`This results in giving visibility on the last update step of each Entity instance. However, there might be times when\nthis level of tracking is not enough.`}),`\n`,_jsxs(_components.p,{children:[`One of the greatest features of OpenMetadata is the ability to track all Entity versions. Each operation that leads\nto a change (`,_jsx(_components.code,{children:`PUT`}),`, `,_jsx(_components.code,{children:`POST`}),`, `,_jsx(_components.code,{children:`PATCH`}),`) will generate a trace that is going to be stored in the table `,_jsx(_components.code,{children:`change_event`}),`.`]}),`\n`,_jsx(_components.p,{children:`Using the API to get events data, or directly exploring the different versions of each entity gives great debugging\npower to both data consumers and producers.`}),`\n`,_jsx(Heading,{level:`2`,id:`api-component-diagram`,children:`API Component Diagram`}),`\n`,_jsxs(_components.p,{children:[`Now that we have a clear picture of the main pieces and their roles, we will analyze the logical flow of a `,_jsx(_components.code,{children:`POST`}),` and a\n`,_jsx(_components.code,{children:`PUT`}),` calls to the API. The main goal of this section is to get familiar with the code organisation and its main steps.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`To take the most out of this section, it is recommended to follow the source code as well, from the Entity JSON you’d\nlike to use as an example to its implementation of Resource and Repository.`})}),`\n`,_jsx(Heading,{level:`3`,id:`create-a-new-entity-post`,children:`Create a new Entity - POST`}),`\n`,_jsxs(_components.p,{children:[`We will start with the simplest scenario: Creating a new Entity via a `,_jsx(_components.code,{children:`POST`}),` call. This is a great first point to review\nas part of the logic and methods are reused during updates.`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=f54b6c2d441512f42c690d8b25254a07`,alt:`create-new-entity`,\"data-og-width\":`883`,width:`883`,\"data-og-height\":`1096`,height:`1096`,\"data-path\":`public/images/main-concepts/high-level-design/create-new-entity.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=280\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=0f45a12136018d384426fc179a6b31b4 280w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=560\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=e9e0e8c8819afd902c11204865f0ce03 560w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=840\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=5c4a4bea53cfc26f66c247b66454462a 840w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=1100\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=85d36a9e69bc80a202407f01d41b8ef8 1100w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=1650\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=4104e56f02b01ed3e69c6eea8da7c6dd 1650w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-new-entity.png?w=2500\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=1cf64accf1fb11461b7e67c84556ca4d 2500w`}),`\n`,_jsx(Heading,{level:`4`,id:`create`,children:`Create`}),`\n`,_jsxs(_components.p,{children:[`As we already know, the recipient of the HTTP call will be the `,_jsx(_components.code,{children:`EntityResource`}),`. In there, we have the create function\nwith the @POST annotation and the description of the API endpoint and expected schemas.`]}),`\n`,_jsxs(_components.p,{children:[`The role of this first component is to receive the call and validate the request body and headers, but the real\nimplementation happens in the `,_jsx(_components.code,{children:`EntityRepository`}),`, which we already described as the `,_jsx(_components.strong,{children:`DAO`}),`. For the `,_jsx(_components.code,{children:`POST`}),` operation, the\ninternal flow is rather simple and is composed of two steps:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Prepare`}),`: Which validates the Entity data and computes some attributes at the server-side.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Store`}),`: This saves the Entity JSON and its Relationships to the backend DB.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`4`,id:`prepare`,children:`Prepare`}),`\n`,_jsxs(_components.p,{children:[`This method is used for validating an entity to be created during `,_jsx(_components.code,{children:`POST`}),`, `,_jsx(_components.code,{children:`PUT`}),`, and `,_jsx(_components.code,{children:`PATCH`}),` operations and preparing the\nentity with all the required attributes and relationships.`]}),`\n`,_jsx(_components.p,{children:`Here we handle, for example, the process of setting up the FQN of an Entity based on its hierarchy. While all Entities\nrequire an FQN, this is not an attribute we expect to receive in a request.`}),`\n`,_jsxs(_components.p,{children:[`Moreover, this checks that the received attributes are being correctly informed, e.g., we have a valid `,_jsx(_components.code,{children:`User`}),` as an `,_jsx(_components.code,{children:`owner`}),`\nor a valid `,_jsx(_components.code,{children:`Database`}),` for a `,_jsx(_components.code,{children:`Table`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`store`,children:`Store`}),`\n`,_jsx(_components.p,{children:`The storing process is divided into two different steps (as we have two tables holding the information).`}),`\n`,_jsxs(_components.p,{children:[`We strip the validated Entity from any `,_jsx(_components.code,{children:`href`}),` attribute (such as `,_jsx(_components.code,{children:`owner`}),` or `,_jsx(_components.code,{children:`tags`}),`) in order to just store a JSON document\nwith the Entity intrinsic values.`]}),`\n`,_jsx(_components.p,{children:`We then store the graph representation of the Relationships for the attributes omitted above.`}),`\n`,_jsx(_components.p,{children:`At the end of these calls, we end up with a validated Entity holding all the required attributes,\nwhich have been validated and stored accordingly. We can then return the created Entity to the caller.`}),`\n`,_jsx(Heading,{level:`3`,id:`create-or-update-an-entity-put`,children:`Create or Update an Entity - PUT`}),`\n`,_jsxs(_components.p,{children:[`Let’s now build on top of what we learned during the `,_jsx(_components.code,{children:`POST`}),` discussion, expanding the example to a `,_jsx(_components.code,{children:`PUT`}),` request handling.`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=38a1ae86e44d57f32c9224d1b6d50e3b`,alt:`create-update-entity`,\"data-og-width\":`1351`,width:`1351`,\"data-og-height\":`1046`,height:`1046`,\"data-path\":`public/images/main-concepts/high-level-design/create-or-update.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=280\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=ddcb26b37b31d339f7ae4d2d95276aa8 280w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=560\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=2255858331ebc20006fcbfd50b127eb4 560w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=840\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=13eed5f2bfc9718e6286f58a0843a455 840w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=1100\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=7b01e3b2c9d93541b9072aabf39d1ffa 1100w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=1650\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=994af83c3223e31f7aec14b931a1a999 1650w, https://mintcdn.com/openmetadata/m2dVw4ye-bGbm5O_/public/images/main-concepts/high-level-design/create-or-update.png?w=2500\u0026fit=max\u0026auto=format\u0026n=m2dVw4ye-bGbm5O_\u0026q=85\u0026s=aa10f6eb9d0ccdf18e093896e67196b4 2500w`}),`\n`,_jsx(_components.p,{children:`The first steps are fairly similar:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`We have a function in our `,_jsx(_components.code,{children:`Resource`}),` annotated as `,_jsx(_components.code,{children:`@PUT`}),` and handling headers, auth and schemas.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`Resource`}),` then calls the DAO at the Repository, bootstrapping the data-related logic.`]}),`\n`,_jsx(_components.li,{children:`We validate the Entity and cook some attributes during the prepare step.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`After processing and validating the Entity request, we then check if the Entity instance has already been stored,\nquerying the backend database by its FQN. If it has not, then we proceed with the same logic as the `,_jsx(_components.code,{children:`POST`}),`\noperation -> simple creation. Otherwise, we need to validate the updated fields.`]}),`\n`,_jsx(Heading,{level:`4`,id:`set-fields`,children:`Set Fields`}),`\n`,_jsxs(_components.p,{children:[`We cannot allow all fields to be updated for a given Entity instance. For example, the `,_jsx(_components.code,{children:`id`}),` or `,_jsx(_components.code,{children:`name`}),` stay immutable once\nthe instance is created, and the same thing happens to the `,_jsx(_components.code,{children:`Database`}),` of a `,_jsx(_components.code,{children:`Table`}),`.`]}),`\n`,_jsx(_components.p,{children:`The list of specified fields that can change is defined at each Entity’s Repository, and we should only allow changes\non those attributes that can naturally evolve throughout the lifecycle of the object.`}),`\n`,_jsxs(_components.p,{children:[`At this step, we set the fields to the Entity that are either required by the JSON schema definition (e.g.,\nthe algorithm for an `,_jsx(_components.code,{children:`MlModel`}),`) or, in the case of a `,_jsx(_components.code,{children:`GET`}),` operation, that are requested as\n`,_jsx(_components.code,{children:`GET \u003curl>/api/v1/\u003ccollectionName>/\u003cid>?fields=field1,field2...`})]}),`\n`,_jsx(Heading,{level:`4`,id:`update`,children:`Update`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.code,{children:`EntityRepository`}),` there is an abstract implementation of the `,_jsx(_components.code,{children:`EntityUpdater`}),` interface, which is in charge of\ndefining the generic update logic flow common for all the Entities.`]}),`\n`,_jsx(_components.p,{children:`The main steps handled in the update calls are:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1.`}),` Update the Entity `,_jsx(_components.strong,{children:`generic`}),` fields, such as the description or the owner.\n`,_jsx(_components.strong,{children:`2.`}),` Run Entity `,_jsx(_components.strong,{children:`specific`}),` updates, which are implemented by each Entity’s `,_jsx(_components.code,{children:`EntityUpdater`}),` extension.\n`,_jsx(_components.strong,{children:`3.`}),` `,_jsx(_components.strong,{children:`Store`}),` the updated Entity JSON doc to the Entity Table in MySQL.`]}),`\n`,_jsx(Heading,{level:`4`,id:`entity-specific-updates`,children:`Entity Specific Updates`}),`\n`,_jsxs(_components.p,{children:[`Each Entity has a set of attributes that define it. These attributes are going to have a very specific behaviour,\nso the implementation of the `,_jsx(_components.code,{children:`update`}),` logic falls to each Entity Repository.`]}),`\n`,_jsxs(_components.p,{children:[`For example, we can update the `,_jsx(_components.code,{children:`Columns`}),` of a `,_jsx(_components.code,{children:`Table`}),`, or the `,_jsx(_components.code,{children:`Dashboard`}),` holding the performance metrics of an `,_jsx(_components.code,{children:`MlModel`}),`.\nBoth of these changes are going to be treated differently, in terms of how the Entity performs internally the update,\nhow the Entity version gets affected, or the impact on the `,_jsx(_components.strong,{children:`Relationship`}),` data.`]}),`\n`,_jsx(_components.p,{children:`For the sake of discussion, we’ll follow a couple of update scenarios.`}),`\n`,_jsx(Heading,{level:`4`,id:`example-1-updating-columns-of-a-table`,children:`Example 1 - Updating Columns of a Table`}),`\n`,_jsxs(_components.p,{children:[`When updating `,_jsx(_components.code,{children:`Columns`}),`, we need to compare the existing set of columns in the original Entity vs. the incoming columns\nof the `,_jsx(_components.code,{children:`PUT`}),` request.`]}),`\n`,_jsx(_components.p,{children:`If we are receiving an existing column, we might need to update its description or tags. This change will be\nconsidered a minor change. Therefore, the version of the Entity will be bumped by 0.1, following the software\nrelease specification model.`}),`\n`,_jsxs(_components.p,{children:[`However, what happens if a stored column is not received in the updated instance? That would mean that such a column\nhas been deleted. This is a type of change that could possibly break integrations on top of the `,_jsx(_components.code,{children:`Table`}),`’s data.\nTherefore, we can mark this scenario as a major update. In this case, the version of the Entity will increase by `,_jsx(_components.code,{children:`1.0`}),`.`]}),`\n`,_jsx(_components.p,{children:`Checking the Change Events or visiting the Entity history will easily show us the evolution of an Entity instance,\nwhich will be immensely valuable when debugging data issues.`}),`\n`,_jsx(Heading,{level:`4`,id:`example-2-updating-the-dashboard-of-an-ml-model`,children:`Example 2 - Updating the Dashboard of an ML Model`}),`\n`,_jsxs(_components.p,{children:[`One of the attributes for an MlModel is the `,_jsx(_components.code,{children:`EntityReference`}),` to a `,_jsx(_components.code,{children:`Dashboard`}),` holding its performance metrics evolution.`]}),`\n`,_jsxs(_components.p,{children:[`As this attribute is a reference to another existing Entity, this data is not directly stored in the `,_jsx(_components.code,{children:`MlModel`}),` JSON doc,\nbut rather as a Relationship graph, as we have been discussing previously. Therefore, during the update step we will need to:`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1.`}),` Insert the relationship, if the original Entity had no `,_jsx(_components.code,{children:`Dashboard`}),` informed,\n`,_jsx(_components.strong,{children:`2.`}),` Delete the relationship if the `,_jsx(_components.code,{children:`Dashboard`}),` has been removed, or\n`,_jsx(_components.strong,{children:`3.`}),` Update the relationship if we now point to a different `,_jsx(_components.code,{children:`Dashboard`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Note how during the `,_jsx(_components.code,{children:`POST`}),` operation we needed to always call the `,_jsx(_components.code,{children:`storeRelationship`}),` function, as it was the first\ntime we were storing the instance’s information. During an update, we will just modify the Relationship data if the\nEntity’s specific attributes require it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`handling-events`,children:`Handling Events`}),`\n`,_jsxs(_components.p,{children:[`During all these discussions and examples we’ve been showing how the backend API handles HTTP requests and what the\nEntities’ data lifecycle is. Not only we’ve been focusing on the JSON docs and `,_jsx(_components.strong,{children:`Relationships`}),`, but from time to time we\nhave talked about Change Events.`]}),`\n`,_jsxs(_components.p,{children:[`Moreover, In the API Container Diagram we drew a Container representing the `,_jsx(_components.code,{children:`Table`}),` holding the Change Event data,\nbut yet, we have not found any Component accessing it.`]}),`\n`,_jsxs(_components.p,{children:[`This is because the API server is powered by Jetty, which means that luckily we do not need to make those calls ourselves!\nBy defining a `,_jsx(_components.code,{children:`ChangeEventHandler`}),` and registering it during the creation of the server, this postprocessing of the calls\nhappens transparently.`]}),`\n`,_jsxs(_components.p,{children:[`Our `,_jsx(_components.code,{children:`ChangeEventHandler`}),` will check if the Entity has been `,_jsx(_components.code,{children:`Created`}),`, `,_jsx(_components.code,{children:`Updated`}),` or `,_jsx(_components.code,{children:`Deleted`}),` and will store the appropriate\n`,_jsx(_components.code,{children:`ChangeEvent`}),` data from our response to the backend DB.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"High Level Design | OpenMetadata Architecture Overview","description":"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.","sidebarTitle":"High Level Design","href":"/v1.13.x/api-reference/main-concepts/high-level-design"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"High Level Design","slug":"high-level-design","depth":1,"children":[]},{"title":"System Context","slug":"system-context","depth":2,"children":[]},{"title":"JSON Schemas","slug":"json-schemas","depth":2,"children":[]},{"title":"API Container Diagram","slug":"api-container-diagram","depth":2,"children":[]},{"title":"Entity Resource","slug":"entity-resource","depth":2,"children":[]},{"title":"Entity Repository","slug":"entity-repository","depth":2,"children":[]},{"title":"Entity Storage Layer","slug":"entity-storage-layer","depth":2,"children":[]},{"title":"Entity and Relationship Store","slug":"entity-and-relationship-store","depth":2,"children":[]},{"title":"Change Events Store","slug":"change-events-store","depth":2,"children":[]},{"title":"API Component Diagram","slug":"api-component-diagram","depth":2,"children":[{"title":"Create a new Entity - POST","slug":"create-a-new-entity-post","depth":3,"children":[]},{"title":"Create","slug":"create","depth":4,"children":[]},{"title":"Prepare","slug":"prepare","depth":4,"children":[]},{"title":"Store","slug":"store","depth":4,"children":[]},{"title":"Create or Update an Entity - PUT","slug":"create-or-update-an-entity-put","depth":3,"children":[]},{"title":"Set Fields","slug":"set-fields","depth":4,"children":[]},{"title":"Update","slug":"update","depth":4,"children":[]},{"title":"Entity Specific Updates","slug":"entity-specific-updates","depth":4,"children":[]},{"title":"Example 1 - Updating Columns of a Table","slug":"example-1-updating-columns-of-a-table","depth":4,"children":[]},{"title":"Example 2 - Updating the Dashboard of an ML Model","slug":"example-2-updating-the-dashboard-of-an-ml-model","depth":4,"children":[]}]},{"title":"Handling Events","slug":"handling-events","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/openmetadata/193c43da98baa789/loader.js"],"subdomain":"openmetadata","siteName":"OpenMetadata Documentation","title":"High Level Design | OpenMetadata Architecture Overview - OpenMetadata Documentation","navMaps":{"firstHrefInVersion":{"v2.0.x":{"href":"/v2.0.x/api-reference/main-concepts/high-level-design","matchLevel":1},"v1.13.x":{"href":"/v1.13.x/api-reference/main-concepts/high-level-design","matchLevel":0},"v2.1.x-SNAPSHOT":{"href":"/v2.1.x-SNAPSHOT/api-reference/main-concepts/high-level-design","matchLevel":1}},"firstHrefInLanguage":{}},"lastModified":"2026-06-10T10:47:04.351Z","originalFileLocation":"v1.13.x/api-reference/main-concepts/high-level-design.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OpenMetadata Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"High Level Design | OpenMetadata Architecture Overview - OpenMetadata Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenMetadata Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://openmetadata.mintlify.app/_mintlify/api/og/v2?division=Main+Concepts\u0026amp;title=High+Level+Design+%7C+OpenMetadata+Architecture+Overview\u0026amp;description=Explore+high-level+architectural+design+to+understand+how+components+interact+across+storage%2C+processing%2C+and+access+layers.\u0026amp;theme=b72ba3b6733cb95c984de390\u0026amp;signature=15b2147f89f5317e67d40f36eeea58b3651130718a987279f8adbb3de06b8f24\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"High Level Design | OpenMetadata Architecture Overview - OpenMetadata Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://openmetadata.mintlify.app/_mintlify/api/og/v2?division=Main+Concepts\u0026amp;title=High+Level+Design+%7C+OpenMetadata+Architecture+Overview\u0026amp;description=Explore+high-level+architectural+design+to+understand+how+components+interact+across+storage%2C+processing%2C+and+access+layers.\u0026amp;theme=b72ba3b6733cb95c984de390\u0026amp;signature=15b2147f89f5317e67d40f36eeea58b3651130718a987279f8adbb3de06b8f24\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/openmetadata/6KJlWty2MOEAr7r6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OpenMetadata Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6938EF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v1.13.x/api-reference/main-concepts/high-level-design.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.open-metadata.org/#organization\",\"name\":\"OpenMetadata Documentation\",\"url\":\"https://docs.open-metadata.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/openmetadata/Z_Ib-0g05fLykSep/public/images/icons/omd.svg?fit=max\u0026auto=format\u0026n=Z_Ib-0g05fLykSep\u0026q=85\u0026s=8eb40986afc777e29ae395288a3983e8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.open-metadata.org#website\",\"name\":\"OpenMetadata Documentation\",\"url\":\"https://docs.open-metadata.org\",\"publisher\":{\"@id\":\"https://docs.open-metadata.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design#webpage\",\"url\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design\",\"name\":\"High Level Design | OpenMetadata Architecture Overview\",\"description\":\"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\",\"dateModified\":\"2026-06-10T10:47:04.351Z\",\"isPartOf\":{\"@id\":\"https://docs.open-metadata.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Main Concepts\",\"item\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"High Level Design | OpenMetadata Architecture Overview\",\"item\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design#article\",\"headline\":\"High Level Design | OpenMetadata Architecture Overview\",\"name\":\"High Level Design | OpenMetadata Architecture Overview\",\"description\":\"Explore high-level architectural design to understand how components interact across storage, processing, and access layers.\",\"url\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design\",\"mainEntityOfPage\":{\"@id\":\"https://docs.open-metadata.org/v1.13.x/api-reference/main-concepts/high-level-design#webpage\"},\"dateModified\":\"2026-06-10T10:47:04.351Z\",\"publisher\":{\"@id\":\"https://docs.open-metadata.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.open-metadata.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OpenMetadata Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OpenMetadata Documentation","nav":{"global":null,"versions":[{"version":"v2.0.x","pages":[{"title":"v2.0.x","href":"/v2.0.x/api-reference/main-concepts/high-level-design"}]},{"version":"v1.13.x","tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/v1.13.x"}]},{"tab":"Quickstart","pages":[{"title":"Quickstart","href":"/v1.13.x/quick-start"}]},{"tab":"Deployment","pages":[{"title":"Deployment","href":"/v1.13.x/deployment"}]},{"tab":"Connectors","pages":[{"title":"Connectors","href":"/v1.13.x/connectors"}]},{"tab":"How-to Guides","pages":[{"title":"How-to Guides","href":"/v1.13.x/how-to-guides"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/v1.13.x/how-to-guides/mcp"}]},{"tab":"Admin Guide","pages":[{"title":"Admin Guide","href":"/v1.13.x/how-to-guides/admin-guide"}]},{"tab":"Guide for Data Users","pages":[{"title":"Guide for Data Users","href":"/v1.13.x/how-to-guides/guide-for-data-users"}]},{"tab":"Data Discovery","pages":[{"title":"Data Discovery","href":"/v1.13.x/how-to-guides/data-discovery"}]},{"tab":"Data Contracts","pages":[{"title":"Data Contracts","href":"/v1.13.x/how-to-guides/data-contracts"}]},{"tab":"Data Collaboration","pages":[{"title":"Data Collaboration","href":"/v1.13.x/how-to-guides/data-collaboration"}]},{"tab":"Data Quality and Observability","pages":[{"title":"Data Quality and Observability","href":"/v1.13.x/how-to-guides/data-quality-observability"}]},{"tab":"Data Lineage","pages":[{"title":"Data Lineage","href":"/v1.13.x/how-to-guides/data-lineage"}]},{"tab":"Data Insights","pages":[{"title":"Data Insights","href":"/v1.13.x/how-to-guides/data-insights"}]},{"tab":"Data Marketplace","pages":[{"title":"Data Marketplace","href":"/v1.13.x/how-to-guides/data-marketplace"}]},{"tab":"Data Governance","pages":[{"title":"Data Governance","href":"/v1.13.x/how-to-guides/data-governance"}]},{"tab":"Releases","pages":[{"title":"Releases","href":"/v1.13.x/releases"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/v1.13.x/developers"}]},{"tab":"SDK \u0026 APIs","groups":[{"group":"API Reference","pages":[{"title":"OpenMetadata SDKs \u0026 APIs","sidebarTitle":"Introduction","href":"/v1.13.x/api-reference"},{"title":"Getting Started","sidebarTitle":"Getting Started","href":"/v1.13.x/api-reference/getting-started"},{"title":"Authentication","sidebarTitle":"Authentication","href":"/v1.13.x/api-reference/authentication"},{"title":"Errors","sidebarTitle":"Errors","mode":"wide","href":"/v1.13.x/api-reference/errors"},{"title":"Pagination","sidebarTitle":"Pagination","mode":"wide","href":"/v1.13.x/api-reference/pagination"}]},{"group":"Data Assets","pages":[{"title":"Data Assets","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets"},{"title":"Databases","sidebarTitle":"Databases","href":"/v1.13.x/api-reference/data-assets/databases-overview"},{"group":"Api Collections","pages":[{"title":"API Collections","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/api-collections"},{"title":"Create an API Collection","sidebarTitle":"Create an API Collection","api":"POST /v1/apiCollections","href":"/v1.13.x/api-reference/data-assets/api-collections/create"},{"title":"Delete an API Collection","sidebarTitle":"Delete an API Collection","api":"DELETE /v1/apiCollections/{id}","href":"/v1.13.x/api-reference/data-assets/api-collections/delete"},{"title":"List API Collections","sidebarTitle":"List API Collections","api":"GET /v1/apiCollections","href":"/v1.13.x/api-reference/data-assets/api-collections/list"},{"title":"Retrieve an API Collection","sidebarTitle":"Retrieve an API Collection","api":"GET /v1/apiCollections/{id}","href":"/v1.13.x/api-reference/data-assets/api-collections/retrieve"},{"title":"Update an API Collection","sidebarTitle":"Update an API Collection","api":"PUT /v1/apiCollections","href":"/v1.13.x/api-reference/data-assets/api-collections/update"},{"title":"API Collection Versions","sidebarTitle":"API Collection Versions","api":"GET /v1/apiCollections/{id}/versions","href":"/v1.13.x/api-reference/data-assets/api-collections/versions"}]},{"group":"Api Endpoints","pages":[{"title":"API Endpoints","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/api-endpoints"},{"title":"Create an API Endpoint","sidebarTitle":"Create an API Endpoint","api":"POST /v1/apiEndpoints","href":"/v1.13.x/api-reference/data-assets/api-endpoints/create"},{"title":"Delete an API Endpoint","sidebarTitle":"Delete an API Endpoint","api":"DELETE /v1/apiEndpoints/{id}","href":"/v1.13.x/api-reference/data-assets/api-endpoints/delete"},{"title":"List API Endpoints","sidebarTitle":"List API Endpoints","api":"GET /v1/apiEndpoints","href":"/v1.13.x/api-reference/data-assets/api-endpoints/list"},{"title":"Retrieve an API Endpoint","sidebarTitle":"Retrieve an API Endpoint","api":"GET /v1/apiEndpoints/{id}","href":"/v1.13.x/api-reference/data-assets/api-endpoints/retrieve"},{"title":"Update an API Endpoint","sidebarTitle":"Update an API Endpoint","api":"PUT /v1/apiEndpoints","href":"/v1.13.x/api-reference/data-assets/api-endpoints/update"},{"title":"API Endpoint Versions","sidebarTitle":"API Endpoint Versions","api":"GET /v1/apiEndpoints/{id}/versions","href":"/v1.13.x/api-reference/data-assets/api-endpoints/versions"}]},{"group":"Charts","pages":[{"title":"Charts","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/charts"},{"title":"Create a Chart","sidebarTitle":"Create a Chart","api":"POST /v1/charts","href":"/v1.13.x/api-reference/data-assets/charts/create"},{"title":"Delete a Chart","sidebarTitle":"Delete a Chart","api":"DELETE /v1/charts/{id}","href":"/v1.13.x/api-reference/data-assets/charts/delete"},{"title":"List Charts","sidebarTitle":"List Charts","api":"GET /v1/charts","href":"/v1.13.x/api-reference/data-assets/charts/list"},{"title":"Retrieve a Chart","sidebarTitle":"Retrieve a Chart","api":"GET /v1/charts/{id}","href":"/v1.13.x/api-reference/data-assets/charts/retrieve"},{"title":"Update a Chart","sidebarTitle":"Update a Chart","api":"PUT /v1/charts","href":"/v1.13.x/api-reference/data-assets/charts/update"},{"title":"Chart Versions","sidebarTitle":"Chart Versions","api":"GET /v1/charts/{id}/versions","href":"/v1.13.x/api-reference/data-assets/charts/versions"}]},{"group":"Containers","pages":[{"title":"Containers","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/containers"},{"title":"Create a Container","sidebarTitle":"Create a Container","api":"POST /v1/containers","href":"/v1.13.x/api-reference/data-assets/containers/create"},{"title":"Delete a Container","sidebarTitle":"Delete a Container","api":"DELETE /v1/containers/{id}","href":"/v1.13.x/api-reference/data-assets/containers/delete"},{"title":"List Containers","sidebarTitle":"List Containers","api":"GET /v1/containers","href":"/v1.13.x/api-reference/data-assets/containers/list"},{"title":"Retrieve a Container","sidebarTitle":"Retrieve a Container","api":"GET /v1/containers/{id}","href":"/v1.13.x/api-reference/data-assets/containers/retrieve"},{"title":"Update a Container","sidebarTitle":"Update a Container","api":"PUT /v1/containers","href":"/v1.13.x/api-reference/data-assets/containers/update"},{"title":"Container Versions","sidebarTitle":"Container Versions","api":"GET /v1/containers/{id}/versions","href":"/v1.13.x/api-reference/data-assets/containers/versions"}]},{"group":"Dashboard Services","pages":[{"title":"Dashboard Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/dashboard-services"},{"title":"Create a Dashboard Service","sidebarTitle":"Create a Dashboard Service","api":"POST /v1/services/dashboardServices","href":"/v1.13.x/api-reference/data-assets/dashboard-services/create"},{"title":"Delete a Dashboard Service","sidebarTitle":"Delete a Dashboard Service","api":"DELETE /v1/services/dashboardServices/{id}","href":"/v1.13.x/api-reference/data-assets/dashboard-services/delete"},{"title":"Import \u0026 Export Dashboard Services","sidebarTitle":"Import \u0026 Export Dashboard Services","api":"GET /v1/services/dashboardServices/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/dashboard-services/import-export"},{"title":"List Dashboard Services","sidebarTitle":"List Dashboard Services","api":"GET /v1/services/dashboardServices","href":"/v1.13.x/api-reference/data-assets/dashboard-services/list"},{"title":"Retrieve a Dashboard Service","sidebarTitle":"Retrieve a Dashboard Service","api":"GET /v1/services/dashboardServices/{id}","href":"/v1.13.x/api-reference/data-assets/dashboard-services/retrieve"},{"title":"Update a Dashboard Service","sidebarTitle":"Update a Dashboard Service","api":"PUT /v1/services/dashboardServices","href":"/v1.13.x/api-reference/data-assets/dashboard-services/update"},{"title":"Dashboard Service Versions","sidebarTitle":"Dashboard Service Versions","api":"GET /v1/services/dashboardServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/dashboard-services/versions"}]},{"group":"Dashboards","pages":[{"title":"Dashboards","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/dashboards"},{"title":"Create a Dashboard","sidebarTitle":"Create a Dashboard","api":"POST /v1/dashboards","href":"/v1.13.x/api-reference/data-assets/dashboards/create"},{"title":"Delete a Dashboard","sidebarTitle":"Delete a Dashboard","api":"DELETE /v1/dashboards/{id}","href":"/v1.13.x/api-reference/data-assets/dashboards/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/dashboards/{id}/followers","href":"/v1.13.x/api-reference/data-assets/dashboards/followers-votes"},{"title":"List Dashboards","sidebarTitle":"List Dashboards","api":"GET /v1/dashboards","href":"/v1.13.x/api-reference/data-assets/dashboards/list"},{"title":"Retrieve a Dashboard","sidebarTitle":"Retrieve a Dashboard","api":"GET /v1/dashboards/{id}","href":"/v1.13.x/api-reference/data-assets/dashboards/retrieve"},{"title":"Update a Dashboard","sidebarTitle":"Update a Dashboard","api":"PUT /v1/dashboards","href":"/v1.13.x/api-reference/data-assets/dashboards/update"},{"title":"Dashboard Versions","sidebarTitle":"Dashboard Versions","api":"GET /v1/dashboards/{id}/versions","href":"/v1.13.x/api-reference/data-assets/dashboards/versions"}]},{"group":"Database Schemas","pages":[{"title":"Database Schemas","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/database-schemas"},{"title":"Advanced Database Schema Operations","sidebarTitle":"Advanced Database Schema Operations","api":"PUT /v1/databaseSchemas/{id}/followers","href":"/v1.13.x/api-reference/data-assets/database-schemas/advanced"},{"title":"Create a Database Schema","sidebarTitle":"Create a Database Schema","api":"POST /v1/databaseSchemas","href":"/v1.13.x/api-reference/data-assets/database-schemas/create"},{"title":"Delete a Database Schema","sidebarTitle":"Delete a Database Schema","api":"DELETE /v1/databaseSchemas/{id}","href":"/v1.13.x/api-reference/data-assets/database-schemas/delete"},{"title":"Import \u0026 Export Database Schemas","sidebarTitle":"Import \u0026 Export Database Schemas","api":"GET /v1/databaseSchemas/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/database-schemas/import-export"},{"title":"List Database Schemas","sidebarTitle":"List Database Schemas","api":"GET /v1/databaseSchemas","href":"/v1.13.x/api-reference/data-assets/database-schemas/list"},{"title":"Retrieve a Database Schema","sidebarTitle":"Retrieve a Database Schema","api":"GET /v1/databaseSchemas/{id}","href":"/v1.13.x/api-reference/data-assets/database-schemas/retrieve"},{"title":"Update a Database Schema","sidebarTitle":"Update a Database Schema","api":"PUT /v1/databaseSchemas","href":"/v1.13.x/api-reference/data-assets/database-schemas/update"},{"title":"Database Schema Versions","sidebarTitle":"Database Schema Versions","api":"GET /v1/databaseSchemas/{id}/versions","href":"/v1.13.x/api-reference/data-assets/database-schemas/versions"}]},{"group":"Database Services","pages":[{"title":"Database Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/database-services"},{"title":"Create a Database Service","sidebarTitle":"Create a Database Service","api":"POST /v1/services/databaseServices","href":"/v1.13.x/api-reference/data-assets/database-services/create"},{"title":"Delete a Database Service","sidebarTitle":"Delete a Database Service","api":"DELETE /v1/services/databaseServices/{id}","href":"/v1.13.x/api-reference/data-assets/database-services/delete"},{"title":"Import \u0026 Export Database Services","sidebarTitle":"Import \u0026 Export Database Services","api":"GET /v1/services/databaseServices/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/database-services/import-export"},{"title":"List Database Services","sidebarTitle":"List Database Services","api":"GET /v1/services/databaseServices","href":"/v1.13.x/api-reference/data-assets/database-services/list"},{"title":"Retrieve a Database Service","sidebarTitle":"Retrieve a Database Service","api":"GET /v1/services/databaseServices/{id}","href":"/v1.13.x/api-reference/data-assets/database-services/retrieve"},{"title":"Update a Database Service","sidebarTitle":"Update a Database Service","api":"PUT /v1/services/databaseServices","href":"/v1.13.x/api-reference/data-assets/database-services/update"},{"title":"Database Service Versions","sidebarTitle":"Database Service Versions","api":"GET /v1/services/databaseServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/database-services/versions"}]},{"group":"Databases","pages":[{"title":"Databases","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/databases"},{"title":"Advanced Database Operations","sidebarTitle":"Advanced Database Operations","api":"PUT /v1/databases/{id}/followers","href":"/v1.13.x/api-reference/data-assets/databases/advanced"},{"title":"Create a Database","sidebarTitle":"Create a Database","api":"POST /v1/databases","href":"/v1.13.x/api-reference/data-assets/databases/create"},{"title":"Delete a Database","sidebarTitle":"Delete a Database","api":"DELETE /v1/databases/{id}","href":"/v1.13.x/api-reference/data-assets/databases/delete"},{"title":"Import \u0026 Export Databases","sidebarTitle":"Import \u0026 Export Databases","api":"GET /v1/databases/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/databases/import-export"},{"title":"List Databases","sidebarTitle":"List Databases","api":"GET /v1/databases","href":"/v1.13.x/api-reference/data-assets/databases/list"},{"title":"Retrieve a Database","sidebarTitle":"Retrieve a Database","api":"GET /v1/databases/{id}","href":"/v1.13.x/api-reference/data-assets/databases/retrieve"},{"title":"Update a Database","sidebarTitle":"Update a Database","api":"PUT /v1/databases","href":"/v1.13.x/api-reference/data-assets/databases/update"},{"title":"Database Versions","sidebarTitle":"Database Versions","api":"GET /v1/databases/{id}/versions","href":"/v1.13.x/api-reference/data-assets/databases/versions"}]},{"group":"Messaging Services","pages":[{"title":"Messaging Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/messaging-services"},{"title":"Create a Messaging Service","sidebarTitle":"Create a Messaging Service","api":"POST /v1/services/messagingServices","href":"/v1.13.x/api-reference/data-assets/messaging-services/create"},{"title":"Delete a Messaging Service","sidebarTitle":"Delete a Messaging Service","api":"DELETE /v1/services/messagingServices/{id}","href":"/v1.13.x/api-reference/data-assets/messaging-services/delete"},{"title":"Import \u0026 Export Messaging Services","sidebarTitle":"Import \u0026 Export Messaging Services","api":"GET /v1/services/messagingServices/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/messaging-services/import-export"},{"title":"List Messaging Services","sidebarTitle":"List Messaging Services","api":"GET /v1/services/messagingServices","href":"/v1.13.x/api-reference/data-assets/messaging-services/list"},{"title":"Retrieve a Messaging Service","sidebarTitle":"Retrieve a Messaging Service","api":"GET /v1/services/messagingServices/{id}","href":"/v1.13.x/api-reference/data-assets/messaging-services/retrieve"},{"title":"Update a Messaging Service","sidebarTitle":"Update a Messaging Service","api":"PUT /v1/services/messagingServices","href":"/v1.13.x/api-reference/data-assets/messaging-services/update"},{"title":"Messaging Service Versions","sidebarTitle":"Messaging Service Versions","api":"GET /v1/services/messagingServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/messaging-services/versions"}]},{"group":"Mlmodel Services","pages":[{"title":"ML Model Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/mlmodel-services"},{"title":"Create an ML Model Service","sidebarTitle":"Create an ML Model Service","api":"POST /v1/services/mlmodelServices","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/create"},{"title":"Delete an ML Model Service","sidebarTitle":"Delete an ML Model Service","api":"DELETE /v1/services/mlmodelServices/{id}","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/delete"},{"title":"List ML Model Services","sidebarTitle":"List ML Model Services","api":"GET /v1/services/mlmodelServices","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/list"},{"title":"Retrieve an ML Model Service","sidebarTitle":"Retrieve an ML Model Service","api":"GET /v1/services/mlmodelServices/{id}","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/retrieve"},{"title":"Update an ML Model Service","sidebarTitle":"Update an ML Model Service","api":"PUT /v1/services/mlmodelServices","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/update"},{"title":"ML Model Service Versions","sidebarTitle":"ML Model Service Versions","api":"GET /v1/services/mlmodelServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/mlmodel-services/versions"}]},{"group":"Mlmodels","pages":[{"title":"ML Models","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/mlmodels"},{"title":"Create an ML Model","sidebarTitle":"Create an ML Model","api":"POST /v1/mlmodels","href":"/v1.13.x/api-reference/data-assets/mlmodels/create"},{"title":"Delete an ML Model","sidebarTitle":"Delete an ML Model","api":"DELETE /v1/mlmodels/{id}","href":"/v1.13.x/api-reference/data-assets/mlmodels/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/mlmodels/{id}/followers","href":"/v1.13.x/api-reference/data-assets/mlmodels/followers-votes"},{"title":"List ML Models","sidebarTitle":"List ML Models","api":"GET /v1/mlmodels","href":"/v1.13.x/api-reference/data-assets/mlmodels/list"},{"title":"Retrieve an ML Model","sidebarTitle":"Retrieve an ML Model","api":"GET /v1/mlmodels/{id}","href":"/v1.13.x/api-reference/data-assets/mlmodels/retrieve"},{"title":"Update an ML Model","sidebarTitle":"Update an ML Model","api":"PUT /v1/mlmodels","href":"/v1.13.x/api-reference/data-assets/mlmodels/update"},{"title":"ML Model Versions","sidebarTitle":"ML Model Versions","api":"GET /v1/mlmodels/{id}/versions","href":"/v1.13.x/api-reference/data-assets/mlmodels/versions"}]},{"group":"Pipeline Services","pages":[{"title":"Pipeline Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/pipeline-services"},{"title":"Create a Pipeline Service","sidebarTitle":"Create a Pipeline Service","api":"POST /v1/services/pipelineServices","href":"/v1.13.x/api-reference/data-assets/pipeline-services/create"},{"title":"Delete a Pipeline Service","sidebarTitle":"Delete a Pipeline Service","api":"DELETE /v1/services/pipelineServices/{id}","href":"/v1.13.x/api-reference/data-assets/pipeline-services/delete"},{"title":"Import \u0026 Export Pipeline Services","sidebarTitle":"Import \u0026 Export Pipeline Services","api":"GET /v1/services/pipelineServices/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/pipeline-services/import-export"},{"title":"List Pipeline Services","sidebarTitle":"List Pipeline Services","api":"GET /v1/services/pipelineServices","href":"/v1.13.x/api-reference/data-assets/pipeline-services/list"},{"title":"Retrieve a Pipeline Service","sidebarTitle":"Retrieve a Pipeline Service","api":"GET /v1/services/pipelineServices/{id}","href":"/v1.13.x/api-reference/data-assets/pipeline-services/retrieve"},{"title":"Update a Pipeline Service","sidebarTitle":"Update a Pipeline Service","api":"PUT /v1/services/pipelineServices","href":"/v1.13.x/api-reference/data-assets/pipeline-services/update"},{"title":"Pipeline Service Versions","sidebarTitle":"Pipeline Service Versions","api":"GET /v1/services/pipelineServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/pipeline-services/versions"}]},{"group":"Pipelines","pages":[{"title":"Pipelines","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/pipelines"},{"title":"Create a Pipeline","sidebarTitle":"Create a Pipeline","api":"POST /v1/pipelines","href":"/v1.13.x/api-reference/data-assets/pipelines/create"},{"title":"Delete a Pipeline","sidebarTitle":"Delete a Pipeline","api":"DELETE /v1/pipelines/{id}","href":"/v1.13.x/api-reference/data-assets/pipelines/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/pipelines/{id}/followers","href":"/v1.13.x/api-reference/data-assets/pipelines/followers-votes"},{"title":"List Pipelines","sidebarTitle":"List Pipelines","api":"GET /v1/pipelines","href":"/v1.13.x/api-reference/data-assets/pipelines/list"},{"title":"Retrieve a Pipeline","sidebarTitle":"Retrieve a Pipeline","api":"GET /v1/pipelines/{id}","href":"/v1.13.x/api-reference/data-assets/pipelines/retrieve"},{"title":"Update a Pipeline","sidebarTitle":"Update a Pipeline","api":"PUT /v1/pipelines","href":"/v1.13.x/api-reference/data-assets/pipelines/update"},{"title":"Pipeline Versions","sidebarTitle":"Pipeline Versions","api":"GET /v1/pipelines/{id}/versions","href":"/v1.13.x/api-reference/data-assets/pipelines/versions"}]},{"group":"Search Indexes","pages":[{"title":"Search Indexes","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/search-indexes"},{"title":"Create a Search Index","sidebarTitle":"Create a Search Index","api":"POST /v1/searchIndexes","href":"/v1.13.x/api-reference/data-assets/search-indexes/create"},{"title":"Delete a Search Index","sidebarTitle":"Delete a Search Index","api":"DELETE /v1/searchIndexes/{id}","href":"/v1.13.x/api-reference/data-assets/search-indexes/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/searchIndexes/{id}/followers","href":"/v1.13.x/api-reference/data-assets/search-indexes/followers-votes"},{"title":"List Search Indexes","sidebarTitle":"List Search Indexes","api":"GET /v1/searchIndexes","href":"/v1.13.x/api-reference/data-assets/search-indexes/list"},{"title":"Retrieve a Search Index","sidebarTitle":"Retrieve a Search Index","api":"GET /v1/searchIndexes/{id}","href":"/v1.13.x/api-reference/data-assets/search-indexes/retrieve"},{"title":"Update a Search Index","sidebarTitle":"Update a Search Index","api":"PUT /v1/searchIndexes","href":"/v1.13.x/api-reference/data-assets/search-indexes/update"},{"title":"Search Index Versions","sidebarTitle":"Search Index Versions","api":"GET /v1/searchIndexes/{id}/versions","href":"/v1.13.x/api-reference/data-assets/search-indexes/versions"}]},{"group":"Storage Services","pages":[{"title":"Storage Services","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/storage-services"},{"title":"Create a Storage Service","sidebarTitle":"Create a Storage Service","api":"POST /v1/services/storageServices","href":"/v1.13.x/api-reference/data-assets/storage-services/create"},{"title":"Delete a Storage Service","sidebarTitle":"Delete a Storage Service","api":"DELETE /v1/services/storageServices/{id}","href":"/v1.13.x/api-reference/data-assets/storage-services/delete"},{"title":"List Storage Services","sidebarTitle":"List Storage Services","api":"GET /v1/services/storageServices","href":"/v1.13.x/api-reference/data-assets/storage-services/list"},{"title":"Retrieve a Storage Service","sidebarTitle":"Retrieve a Storage Service","api":"GET /v1/services/storageServices/{id}","href":"/v1.13.x/api-reference/data-assets/storage-services/retrieve"},{"title":"Update a Storage Service","sidebarTitle":"Update a Storage Service","api":"PUT /v1/services/storageServices","href":"/v1.13.x/api-reference/data-assets/storage-services/update"},{"title":"Storage Service Versions","sidebarTitle":"Storage Service Versions","api":"GET /v1/services/storageServices/{id}/versions","href":"/v1.13.x/api-reference/data-assets/storage-services/versions"}]},{"group":"Stored Procedures","pages":[{"title":"Stored Procedures","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/stored-procedures"},{"title":"Create a Stored Procedure","sidebarTitle":"Create a Stored Procedure","api":"POST /v1/storedProcedures","href":"/v1.13.x/api-reference/data-assets/stored-procedures/create"},{"title":"Delete a Stored Procedure","sidebarTitle":"Delete a Stored Procedure","api":"DELETE /v1/storedProcedures/{id}","href":"/v1.13.x/api-reference/data-assets/stored-procedures/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/storedProcedures/{id}/followers","href":"/v1.13.x/api-reference/data-assets/stored-procedures/followers-votes"},{"title":"List Stored Procedures","sidebarTitle":"List Stored Procedures","api":"GET /v1/storedProcedures","href":"/v1.13.x/api-reference/data-assets/stored-procedures/list"},{"title":"Retrieve a Stored Procedure","sidebarTitle":"Retrieve a Stored Procedure","api":"GET /v1/storedProcedures/{id}","href":"/v1.13.x/api-reference/data-assets/stored-procedures/retrieve"},{"title":"Update a Stored Procedure","sidebarTitle":"Update a Stored Procedure","api":"PUT /v1/storedProcedures","href":"/v1.13.x/api-reference/data-assets/stored-procedures/update"},{"title":"Stored Procedure Versions","sidebarTitle":"Stored Procedure Versions","api":"GET /v1/storedProcedures/{id}/versions","href":"/v1.13.x/api-reference/data-assets/stored-procedures/versions"}]},{"group":"Tables","pages":[{"title":"Tables","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/tables"},{"title":"Create a Table","sidebarTitle":"Create a Table","api":"POST /v1/tables","href":"/v1.13.x/api-reference/data-assets/tables/create"},{"title":"Custom Metrics","sidebarTitle":"Custom Metrics","api":"PUT /v1/tables/{id}/customMetric","href":"/v1.13.x/api-reference/data-assets/tables/custom-metrics"},{"title":"Delete a Table","sidebarTitle":"Delete a Table","api":"DELETE /v1/tables/{id}","href":"/v1.13.x/api-reference/data-assets/tables/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/tables/{id}/followers","href":"/v1.13.x/api-reference/data-assets/tables/followers-votes"},{"title":"Import \u0026 Export Tables","sidebarTitle":"Import \u0026 Export Tables","api":"GET /v1/tables/name/{fqn}/export","href":"/v1.13.x/api-reference/data-assets/tables/import-export"},{"title":"List Tables","sidebarTitle":"List Tables","api":"GET /v1/tables","href":"/v1.13.x/api-reference/data-assets/tables/list"},{"title":"Pipeline Observability","sidebarTitle":"Pipeline Observability","api":"GET /v1/tables/{id}/pipelineObservability","href":"/v1.13.x/api-reference/data-assets/tables/observability"},{"title":"Table Profiler","sidebarTitle":"Table Profiler","api":"GET /v1/tables/{id}/tableProfilerConfig","href":"/v1.13.x/api-reference/data-assets/tables/profiler"},{"title":"Table Relationships","sidebarTitle":"Table Relationships","api":"PUT /v1/tables/{id}/joins","href":"/v1.13.x/api-reference/data-assets/tables/relationships"},{"title":"Retrieve a Table","sidebarTitle":"Retrieve a Table","api":"GET /v1/tables/{id}","href":"/v1.13.x/api-reference/data-assets/tables/retrieve"},{"title":"Table Sample Data","sidebarTitle":"Table Sample Data","api":"GET /v1/tables/{id}/sampleData","href":"/v1.13.x/api-reference/data-assets/tables/sample-data"},{"title":"Update a Table","sidebarTitle":"Update a Table","api":"PUT /v1/tables","href":"/v1.13.x/api-reference/data-assets/tables/update"},{"title":"Table Versions","sidebarTitle":"Table Versions","api":"GET /v1/tables/{id}/versions","href":"/v1.13.x/api-reference/data-assets/tables/versions"}]},{"group":"Topics","pages":[{"title":"Topics","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-assets/topics"},{"title":"Create a Topic","sidebarTitle":"Create a Topic","api":"POST /v1/topics","href":"/v1.13.x/api-reference/data-assets/topics/create"},{"title":"Delete a Topic","sidebarTitle":"Delete a Topic","api":"DELETE /v1/topics/{id}","href":"/v1.13.x/api-reference/data-assets/topics/delete"},{"title":"Followers \u0026 Votes","sidebarTitle":"Followers \u0026 Votes","api":"PUT /v1/topics/{id}/followers","href":"/v1.13.x/api-reference/data-assets/topics/followers-votes"},{"title":"List Topics","sidebarTitle":"List Topics","api":"GET /v1/topics","href":"/v1.13.x/api-reference/data-assets/topics/list"},{"title":"Retrieve a Topic","sidebarTitle":"Retrieve a Topic","api":"GET /v1/topics/{id}","href":"/v1.13.x/api-reference/data-assets/topics/retrieve"},{"title":"Update a Topic","sidebarTitle":"Update a Topic","api":"PUT /v1/topics","href":"/v1.13.x/api-reference/data-assets/topics/update"},{"title":"Topic Versions","sidebarTitle":"Topic Versions","api":"GET /v1/topics/{id}/versions","href":"/v1.13.x/api-reference/data-assets/topics/versions"}]}]},{"group":"AI SDK","pages":[{"title":"AI SDK","sidebarTitle":"AI SDK","href":"/v1.13.x/sdk/ai-sdk"}]},{"group":"SDK","pages":[{"title":"OpenMetadata SDK | OpenMetadata Software Development Kit","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk"},{"title":"OpenMetadata Standards","href":"/v1.13.x/api-reference/sdk/openmetadata-standards"},{"group":"Go SDK","pages":[{"title":"Go SDK","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/go"},{"title":"Go SDK - API Methods","sidebarTitle":"API Methods","href":"/v1.13.x/api-reference/sdk/go-api-methods"}]},{"group":"Python","pages":[{"title":"Python SDK | OpenMetadata Python SDK Documentation","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/python"},{"title":"Python SDK Overview","sidebarTitle":"Original Client and SDK 2.0","href":"/v1.13.x/api-reference/sdk/python/overview"},{"group":"API Reference","pages":[{"title":"Overview","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/python/api-reference"},{"title":"Aut Provider","sidebarTitle":"Auth Provider","href":"/v1.13.x/api-reference/sdk/python/api-reference/auth-provider"},{"title":"Client Utils","sidebarTitle":"Client Utils","href":"/v1.13.x/api-reference/sdk/python/api-reference/client-utils"},{"title":"Client","sidebarTitle":"Client","href":"/v1.13.x/api-reference/sdk/python/api-reference/client"},{"title":"Credentials","sidebarTitle":"Credentials","href":"/v1.13.x/api-reference/sdk/python/api-reference/credentials"},{"title":"Dashboard Mixin","sidebarTitle":"Dashboard Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/dashboard-mixin"},{"title":"Data Insight Mixin","sidebarTitle":"Data Insight Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/data-insight-mixin"},{"title":"ES Mixin","sidebarTitle":"ES Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/es-mixin"},{"title":"Ingestion Pipeline Mixin","sidebarTitle":"Ingestion Pipeline Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/ingestion-pipeline-mixin"},{"title":"Lineage Mixin","sidebarTitle":"Lineage Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/lineage-mixin"},{"title":"ML Model Mixin","sidebarTitle":"ML Model Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/mlmodel-mixin"},{"title":"Models","sidebarTitle":"Models","href":"/v1.13.x/api-reference/sdk/python/api-reference/models"},{"title":"Ometa API","sidebarTitle":"Ometa API","href":"/v1.13.x/api-reference/sdk/python/api-reference/ometa-api"},{"title":"Patch Mixin Utils","sidebarTitle":"Patch Mixin Utils","href":"/v1.13.x/api-reference/sdk/python/api-reference/patch-mixin-utils"},{"title":"Patch Mixin","sidebarTitle":"Patch mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/patch-mixin"},{"title":"Pipeline Mixin","sidebarTitle":"Pipeline mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/pipeline-mixin"},{"title":"Provider Registry","sidebarTitle":"Provider Registry","href":"/v1.13.x/api-reference/sdk/python/api-reference/provider-registry"},{"title":"Query Mixin","sidebarTitle":"Query Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/query-mixin"},{"title":"Role Policy Mixin","sidebarTitle":"Role policy mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/role-policy-mixin"},{"title":"Routes","sidebarTitle":"Routes","href":"/v1.13.x/api-reference/sdk/python/api-reference/routes"},{"title":"Search Index Mixin","sidebarTitle":"Search Index Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/search-index-mixin"},{"title":"Server Mixin","sidebarTitle":"Server Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/server-mixin"},{"title":"Service Mixin","sidebarTitle":"Service Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/service-mixin"},{"title":"Table Mixin","sidebarTitle":"Table Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/table-mixin"},{"title":"Test Mixin","sidebarTitle":"Tests Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/tests-mixin"},{"title":"Topic Mixin","sidebarTitle":"Topic Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/topic-mixin"},{"title":"User Mixin","sidebarTitle":"User Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/user-mixin"},{"title":"Utils","sidebarTitle":"Utils Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/utils"},{"title":"version Mixin","sidebarTitle":"Version Mixin","href":"/v1.13.x/api-reference/sdk/python/api-reference/version-mixin"}]},{"group":"Build Connector","pages":[{"title":"Build a Connector","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/python/build-connector"},{"title":"Bulk Sink","sidebarTitle":"Bulk Sink","href":"/v1.13.x/api-reference/sdk/python/build-connector/bulk-sink"},{"title":"Sink","sidebarTitle":"Sink","href":"/v1.13.x/api-reference/sdk/python/build-connector/sink"},{"title":"Source","sidebarTitle":"Source","href":"/v1.13.x/api-reference/sdk/python/build-connector/source"},{"title":"Stage","sidebarTitle":"Stage","href":"/v1.13.x/api-reference/sdk/python/build-connector/stage"}]},{"group":"Entities","pages":[{"title":"Python SDK Entities | OpenMetadata Python Entities","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/python/entities"},{"title":"ML Model | OpenMetadata Machine Learning Model SDK","sidebarTitle":"ML Model","href":"/v1.13.x/api-reference/sdk/python/entities/ml-model"}]},{"group":"Ingestion","pages":[{"title":"Python SDK Ingestion","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/sdk/python/ingestion"},{"title":"Python SDK for Lineage","sidebarTitle":"Lineage","href":"/v1.13.x/api-reference/sdk/python/ingestion/lineage"},{"title":"Python SDK for Tags","sidebarTitle":"Tags","href":"/v1.13.x/api-reference/sdk/python/ingestion/tags"}]}]}]},{"group":"Discovery","pages":[{"title":"Discovery","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/discovery"},{"title":"Field Query","sidebarTitle":"Field Query","api":"GET /v1/search/fieldQuery","href":"/v1.13.x/api-reference/discovery/field-query"},{"title":"Search Entities","sidebarTitle":"Search Entities","api":"GET /v1/search/query","href":"/v1.13.x/api-reference/discovery/search"}]},{"group":"Lineage","pages":[{"title":"Lineage","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/lineage/index"},{"title":"Get Lineage","sidebarTitle":"Get Lineage","api":"GET /v1/lineage/{entityType}/{id}","href":"/v1.13.x/api-reference/lineage/get"},{"title":"Add Lineage","sidebarTitle":"Add Lineage","api":"PUT /v1/lineage","href":"/v1.13.x/api-reference/lineage/add"},{"title":"Delete Lineage","sidebarTitle":"Delete Lineage","api":"DELETE /v1/lineage/{fromEntity}/{fromId}/{toEntity}/{toId}","href":"/v1.13.x/api-reference/lineage/delete"},{"title":"Export Lineage","sidebarTitle":"Export Lineage","api":"GET /v1/lineage/export","href":"/v1.13.x/api-reference/lineage/export"}]},{"group":"Data Contracts","pages":[{"title":"Data Contracts","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-contracts"},{"title":"Create a Data Contract","sidebarTitle":"Create a Data Contract","api":"POST /v1/dataContracts","href":"/v1.13.x/api-reference/data-contracts/create"},{"title":"Delete a Data Contract","sidebarTitle":"Delete a Data Contract","api":"DELETE /v1/dataContracts/{id}","href":"/v1.13.x/api-reference/data-contracts/delete"},{"title":"List Data Contracts","sidebarTitle":"List Data Contracts","api":"GET /v1/dataContracts","href":"/v1.13.x/api-reference/data-contracts/list"},{"title":"Import \u0026 Export","sidebarTitle":"Import \u0026 Export","api":"GET /v1/dataContracts/{id}/odcs","href":"/v1.13.x/api-reference/data-contracts/odcs"},{"title":"Retrieve a Data Contract","sidebarTitle":"Retrieve a Data Contract","api":"GET /v1/dataContracts/{id}","href":"/v1.13.x/api-reference/data-contracts/retrieve"},{"title":"Update a Data Contract","sidebarTitle":"Update a Data Contract","api":"PUT /v1/dataContracts","href":"/v1.13.x/api-reference/data-contracts/update"},{"title":"Validate \u0026 Results","sidebarTitle":"Validate \u0026 Results","api":"POST /v1/dataContracts/{id}/validate","href":"/v1.13.x/api-reference/data-contracts/validate"},{"title":"Data Contract Versions","sidebarTitle":"Data Contract Versions","api":"GET /v1/dataContracts/{id}/versions","href":"/v1.13.x/api-reference/data-contracts/versions"}]},{"group":"Teams And Users","pages":[{"title":"Teams \u0026 Users","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/teams-and-users"},{"group":"Teams","pages":[{"title":"Teams","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/teams-and-users/teams"},{"title":"Create a Team","sidebarTitle":"Create a Team","api":"POST /v1/teams","href":"/v1.13.x/api-reference/teams-and-users/teams/create"},{"title":"Delete a Team","sidebarTitle":"Delete a Team","api":"DELETE /v1/teams/{id}","href":"/v1.13.x/api-reference/teams-and-users/teams/delete"},{"title":"List Teams","sidebarTitle":"List Teams","api":"GET /v1/teams","href":"/v1.13.x/api-reference/teams-and-users/teams/list"},{"title":"Retrieve a Team","sidebarTitle":"Retrieve a Team","api":"GET /v1/teams/{id}","href":"/v1.13.x/api-reference/teams-and-users/teams/retrieve"},{"title":"Update a Team","sidebarTitle":"Update a Team","api":"PUT /v1/teams","href":"/v1.13.x/api-reference/teams-and-users/teams/update"},{"title":"Team Versions","sidebarTitle":"Team Versions","api":"GET /v1/teams/{id}/versions","href":"/v1.13.x/api-reference/teams-and-users/teams/versions"}]},{"group":"Users","pages":[{"title":"Users","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/teams-and-users/users"},{"title":"Create a User","sidebarTitle":"Create a User","api":"POST /v1/users","href":"/v1.13.x/api-reference/teams-and-users/users/create"},{"title":"Delete a User","sidebarTitle":"Delete a User","api":"DELETE /v1/users/{id}","href":"/v1.13.x/api-reference/teams-and-users/users/delete"},{"title":"List Users","sidebarTitle":"List Users","api":"GET /v1/users","href":"/v1.13.x/api-reference/teams-and-users/users/list"},{"title":"Retrieve a User","sidebarTitle":"Retrieve a User","api":"GET /v1/users/{id}","href":"/v1.13.x/api-reference/teams-and-users/users/retrieve"},{"title":"Update a User","sidebarTitle":"Update a User","api":"PUT /v1/users","href":"/v1.13.x/api-reference/teams-and-users/users/update"},{"title":"User Versions","sidebarTitle":"User Versions","api":"GET /v1/users/{id}/versions","href":"/v1.13.x/api-reference/teams-and-users/users/versions"}]}]},{"group":"Data Governance","pages":[{"title":"Governance","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance"},{"group":"Classifications","pages":[{"title":"Classifications","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/classifications"},{"title":"Create a Classification","sidebarTitle":"Create a Classification","api":"POST /v1/classifications","href":"/v1.13.x/api-reference/governance/classifications/create"},{"title":"Delete a Classification","sidebarTitle":"Delete a Classification","api":"DELETE /v1/classifications/{id}","href":"/v1.13.x/api-reference/governance/classifications/delete"},{"title":"List Classifications","sidebarTitle":"List Classifications","api":"GET /v1/classifications","href":"/v1.13.x/api-reference/governance/classifications/list"},{"title":"Retrieve a Classification","sidebarTitle":"Retrieve a Classification","api":"GET /v1/classifications/{id}","href":"/v1.13.x/api-reference/governance/classifications/retrieve"},{"title":"Update a Classification","sidebarTitle":"Update a Classification","api":"PUT /v1/classifications","href":"/v1.13.x/api-reference/governance/classifications/update"},{"title":"Classification Versions","sidebarTitle":"Classification Versions","api":"GET /v1/classifications/{id}/versions","href":"/v1.13.x/api-reference/governance/classifications/versions"}]},{"group":"Data Products","pages":[{"title":"Data Products","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/data-products"},{"title":"Create a Data Product","sidebarTitle":"Create a Data Product","api":"POST /v1/dataProducts","href":"/v1.13.x/api-reference/governance/data-products/create"},{"title":"Delete a Data Product","sidebarTitle":"Delete a Data Product","api":"DELETE /v1/dataProducts/{id}","href":"/v1.13.x/api-reference/governance/data-products/delete"},{"title":"List Data Products","sidebarTitle":"List Data Products","api":"GET /v1/dataProducts","href":"/v1.13.x/api-reference/governance/data-products/list"},{"title":"Ports \u0026 Assets","sidebarTitle":"Ports \u0026 Assets","api":"PUT /v1/dataProducts/{fqn}/assets/add","href":"/v1.13.x/api-reference/governance/data-products/ports-assets"},{"title":"Retrieve a Data Product","sidebarTitle":"Retrieve a Data Product","api":"GET /v1/dataProducts/{id}","href":"/v1.13.x/api-reference/governance/data-products/retrieve"},{"title":"Update a Data Product","sidebarTitle":"Update a Data Product","api":"PUT /v1/dataProducts","href":"/v1.13.x/api-reference/governance/data-products/update"},{"title":"Data Product Versions","sidebarTitle":"Data Product Versions","api":"GET /v1/dataProducts/{id}/versions","href":"/v1.13.x/api-reference/governance/data-products/versions"}]},{"group":"Domains","pages":[{"title":"Domains","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/domains"},{"title":"Create a Domain","sidebarTitle":"Create a Domain","api":"POST /v1/domains","href":"/v1.13.x/api-reference/governance/domains/create"},{"title":"Delete a Domain","sidebarTitle":"Delete a Domain","api":"DELETE /v1/domains/{id}","href":"/v1.13.x/api-reference/governance/domains/delete"},{"title":"List Domains","sidebarTitle":"List Domains","api":"GET /v1/domains","href":"/v1.13.x/api-reference/governance/domains/list"},{"title":"Retrieve a Domain","sidebarTitle":"Retrieve a Domain","api":"GET /v1/domains/{id}","href":"/v1.13.x/api-reference/governance/domains/retrieve"},{"title":"Update a Domain","sidebarTitle":"Update a Domain","api":"PUT /v1/domains","href":"/v1.13.x/api-reference/governance/domains/update"},{"title":"Domain Versions","sidebarTitle":"Domain Versions","api":"GET /v1/domains/{id}/versions","href":"/v1.13.x/api-reference/governance/domains/versions"}]},{"group":"Glossaries","pages":[{"title":"Glossaries","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/glossaries"},{"title":"Create a Glossary","sidebarTitle":"Create a Glossary","api":"POST /v1/glossaries","href":"/v1.13.x/api-reference/governance/glossaries/create"},{"title":"Delete a Glossary","sidebarTitle":"Delete a Glossary","api":"DELETE /v1/glossaries/{id}","href":"/v1.13.x/api-reference/governance/glossaries/delete"},{"title":"List Glossaries","sidebarTitle":"List Glossaries","api":"GET /v1/glossaries","href":"/v1.13.x/api-reference/governance/glossaries/list"},{"title":"Retrieve a Glossary","sidebarTitle":"Retrieve a Glossary","api":"GET /v1/glossaries/{id}","href":"/v1.13.x/api-reference/governance/glossaries/retrieve"},{"title":"Update a Glossary","sidebarTitle":"Update a Glossary","api":"PUT /v1/glossaries","href":"/v1.13.x/api-reference/governance/glossaries/update"},{"title":"Glossary Versions","sidebarTitle":"Glossary Versions","api":"GET /v1/glossaries/{id}/versions","href":"/v1.13.x/api-reference/governance/glossaries/versions"}]},{"group":"Glossary Terms","pages":[{"title":"Glossary Terms","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/glossary-terms"},{"title":"Create a Glossary Term","sidebarTitle":"Create a Glossary Term","api":"POST /v1/glossaryTerms","href":"/v1.13.x/api-reference/governance/glossary-terms/create"},{"title":"Delete a Glossary Term","sidebarTitle":"Delete a Glossary Term","api":"DELETE /v1/glossaryTerms/{id}","href":"/v1.13.x/api-reference/governance/glossary-terms/delete"},{"title":"List Glossary Terms","sidebarTitle":"List Glossary Terms","api":"GET /v1/glossaryTerms","href":"/v1.13.x/api-reference/governance/glossary-terms/list"},{"title":"Retrieve a Glossary Term","sidebarTitle":"Retrieve a Glossary Term","api":"GET /v1/glossaryTerms/{id}","href":"/v1.13.x/api-reference/governance/glossary-terms/retrieve"},{"title":"Update a Glossary Term","sidebarTitle":"Update a Glossary Term","api":"PUT /v1/glossaryTerms","href":"/v1.13.x/api-reference/governance/glossary-terms/update"},{"title":"Glossary Term Versions","sidebarTitle":"Glossary Term Versions","api":"GET /v1/glossaryTerms/{id}/versions","href":"/v1.13.x/api-reference/governance/glossary-terms/versions"}]},{"group":"Tags","pages":[{"title":"Tags","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/governance/tags"},{"title":"Create a Tag","sidebarTitle":"Create a Tag","api":"POST /v1/tags","href":"/v1.13.x/api-reference/governance/tags/create"},{"title":"Delete a Tag","sidebarTitle":"Delete a Tag","api":"DELETE /v1/tags/{id}","href":"/v1.13.x/api-reference/governance/tags/delete"},{"title":"List Tags","sidebarTitle":"List Tags","api":"GET /v1/tags","href":"/v1.13.x/api-reference/governance/tags/list"},{"title":"Retrieve a Tag","sidebarTitle":"Retrieve a Tag","api":"GET /v1/tags/{id}","href":"/v1.13.x/api-reference/governance/tags/retrieve"},{"title":"Update a Tag","sidebarTitle":"Update a Tag","api":"PUT /v1/tags","href":"/v1.13.x/api-reference/governance/tags/update"},{"title":"Tag Versions","sidebarTitle":"Tag Versions","api":"GET /v1/tags/{id}/versions","href":"/v1.13.x/api-reference/governance/tags/versions"}]}]},{"group":"Data Quality","pages":[{"title":"Data Quality","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-quality"},{"group":"Test Cases","pages":[{"title":"Test Cases","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-quality/test-cases"},{"title":"Create a Test Case","sidebarTitle":"Create a Test Case","api":"POST /v1/dataQuality/testCases","href":"/v1.13.x/api-reference/data-quality/test-cases/create"},{"title":"Delete a Test Case","sidebarTitle":"Delete a Test Case","api":"DELETE /v1/dataQuality/testCases/{id}","href":"/v1.13.x/api-reference/data-quality/test-cases/delete"},{"title":"List Test Cases","sidebarTitle":"List Test Cases","api":"GET /v1/dataQuality/testCases","href":"/v1.13.x/api-reference/data-quality/test-cases/list"},{"title":"Test Case Results","sidebarTitle":"Test Case Results","api":"GET /v1/dataQuality/testCases/testCaseResults/{fqn}","href":"/v1.13.x/api-reference/data-quality/test-cases/results"},{"title":"Retrieve a Test Case","sidebarTitle":"Retrieve a Test Case","api":"GET /v1/dataQuality/testCases/{id}","href":"/v1.13.x/api-reference/data-quality/test-cases/retrieve"},{"title":"Update a Test Case","sidebarTitle":"Update a Test Case","api":"PUT /v1/dataQuality/testCases","href":"/v1.13.x/api-reference/data-quality/test-cases/update"},{"title":"Test Case Versions","sidebarTitle":"Test Case Versions","api":"GET /v1/dataQuality/testCases/{id}/versions","href":"/v1.13.x/api-reference/data-quality/test-cases/versions"}]},{"group":"Test Definitions","pages":[{"title":"Test Definitions","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-quality/test-definitions"},{"title":"Create a Test Definition","sidebarTitle":"Create a Test Definition","api":"POST /v1/dataQuality/testDefinitions","href":"/v1.13.x/api-reference/data-quality/test-definitions/create"},{"title":"List Test Definitions","sidebarTitle":"List Test Definitions","api":"GET /v1/dataQuality/testDefinitions","href":"/v1.13.x/api-reference/data-quality/test-definitions/list"},{"title":"Retrieve a Test Definition","sidebarTitle":"Retrieve a Test Definition","api":"GET /v1/dataQuality/testDefinitions/{id}","href":"/v1.13.x/api-reference/data-quality/test-definitions/retrieve"}]},{"group":"Test Suites","pages":[{"title":"Test Suites","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/data-quality/test-suites"},{"title":"Create a Test Suite","sidebarTitle":"Create a Test Suite","api":"POST /v1/dataQuality/testSuites","href":"/v1.13.x/api-reference/data-quality/test-suites/create"},{"title":"Delete a Test Suite","sidebarTitle":"Delete a Test Suite","api":"DELETE /v1/dataQuality/testSuites/{id}","href":"/v1.13.x/api-reference/data-quality/test-suites/delete"},{"title":"List Test Suites","sidebarTitle":"List Test Suites","api":"GET /v1/dataQuality/testSuites","href":"/v1.13.x/api-reference/data-quality/test-suites/list"},{"title":"Retrieve a Test Suite","sidebarTitle":"Retrieve a Test Suite","api":"GET /v1/dataQuality/testSuites/{id}","href":"/v1.13.x/api-reference/data-quality/test-suites/retrieve"},{"title":"Update a Test Suite","sidebarTitle":"Update a Test Suite","api":"PUT /v1/dataQuality/testSuites","href":"/v1.13.x/api-reference/data-quality/test-suites/update"},{"title":"Test Suite Versions","sidebarTitle":"Test Suite Versions","api":"GET /v1/dataQuality/testSuites/{id}/versions","href":"/v1.13.x/api-reference/data-quality/test-suites/versions"}]}]},{"group":"Main Concepts","pages":[{"title":"Main Concepts | OpenMetadata Core Concepts Overview","description":"Connect Main Concepts to enable streamlined access, monitoring, or search of enterprise data using secure and scalable integrations.","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/main-concepts"},{"title":"High Level Design | OpenMetadata Architecture Overview","sidebarTitle":"High Level Design","href":"/v1.13.x/api-reference/main-concepts/high-level-design"},{"title":"Backend DB","sidebarTitle":"Backend DB","description":null,"href":"/v1.13.x/api-reference/main-concepts/backend-db"},{"group":"Metadata Standard","pages":[{"title":"Metadata Standard | OpenMetadata Core Schema Guide","sidebarTitle":"Overview","href":"/v1.13.x/api-reference/main-concepts/metadata-standard"},{"title":"APIs | OpenMetadata Metadata Standard APIs","sidebarTitle":"APIs","href":"/v1.13.x/api-reference/main-concepts/metadata-standard/apis"}]}]}]}]},{"version":"v2.1.x-SNAPSHOT","pages":[{"title":"v2.1.x-SNAPSHOT","href":"/v2.1.x-SNAPSHOT/api-reference/main-concepts/high-level-design"}]}]},"title":"High Level Design | OpenMetadata Architecture Overview - OpenMetadata Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BNnMwe0F.js","lightbox-handle-r17bVUz3.js"]}