2024-12-10 19:09:00 +01:00

131 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: How to Add a Custom Property to an Entity with API
slug: /developers/how-to-add-custom-property-to-an-entity
---
# How to Add a Custom Property to an Entity with API
This tutorial will create a custom property for a `table` entity.
Let's assume in your organization you want to keep track of table size, so to achieve that you will be creating a custom property for table entities and then providing a value to that property for each table.
### Step 1: Get the table entity type.
All OpenMetadata APIs are secured so make sure to add the proper headers.
```commandline
curl -X GET http://localhost:8585/api/v1/metadata/types/name/table
```
After the API call, you will get a response like this.
```json
{
"id": "7f0b032f-cdc8-4573-abb0-22165dcd8e07",
"name": "table",
}
```
Now take the `id` from above response `7f0b032f-cdc8-4573-abb0-22165dcd8e07`.
### Step 2: Get the field types with `category=field`
> From UI OpenMetadata only supports three field types
>
> - String
> - Markdown
> - Integer
```commandline
curl -X GET http://localhost:8585/api/v1/metadata/types?category=field
```
This API will return all the available field types, for this tutorial grab the id of the `string` field type. i.e `7531f881-c37c-4e39-9154-4bdf0802e05e`
### Step 3: Make a PUT call to create the custom property for the table entity
```commandline
curl -X PUT http://localhost:8585/api/v1/metadata/types/7f0b032f-cdc8-4573-abb0-22165dcd8e07
```
**Payload**
```json
{
"description": "Property for tracking the tableSize.",
"name": "tableSize",
"propertyType": {
"id": "7531f881-c37c-4e39-9154-4bdf0802e05e",
"type": "type"
}
}
```
### Step 4: Get the custom properties for the table entity
```commandline
curl -X GET http://localhost:8585/api/v1/metadata/types/name/table?fields=customProperties
```
**Response**
```json
{
"id": "7f0b032f-cdc8-4573-abb0-22165dcd8e07",
"name": "table",
"customProperties": [
{
"name": "tableSize",
"description": "Property for tracking the tableSize.",
"propertyType": {
"id": "7531f881-c37c-4e39-9154-4bdf0802e05e",
"type": "type",
"name": "string",
"fullyQualifiedName": "string",
"description": "\"A String type.\"",
"displayName": "string",
"href": "http://localhost:8585/api/v1/metadata/types/7531f881-c37c-4e39-9154-4bdf0802e05e"
}
}
]
}
```
So for all table entities, we have `tableSize` custom property available now, lets add the value for it for the `raw_product_catalog` table.
### Step 5: Add/Edit the value of the custom property for the entity.
All the custom properties value for the entity will be stored in the `extension` attribute.
Lets assume you have `raw_product_catalog` table and its id is `208598fc-bd5f-458c-bf98-59224e1620c7` so our PATCH API request will be like this.
```commandline
curl -X PATCH http://localhost:8585/api/v1/tables/208598fc-bd5f-458c-bf98-59224e1620c7 -H 'Content-Type: application/json-patch+json'
```
For the first time if we want to add the value to the custom property then the payload should be like this.
```json
[
{
"op": "add",
"path": "/extension",
"value": {
"tableSize": "50GB"
}
}
]
```
When Changing the value of the custom property payload should be like this,
```json
[
{
"op": "replace",
"path": "/extension/tableSize",
"value": "60GB"
}
]
```