mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-11-04 04:29:13 +00:00 
			
		
		
		
	
		
			
	
	
		
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								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, let’s 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.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Let’s 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"
							 | 
						|||
| 
								 | 
							
								  }
							 | 
						|||
| 
								 | 
							
								]
							 | 
						|||
| 
								 | 
							
								```
							 |