mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-10-31 02:29:03 +00:00 
			
		
		
		
	11287 Task - Add retention period and customer properties to Database, Schema, and Tables (#11511)
This commit is contained in:
		
							parent
							
								
									944a07cbd5
								
							
						
					
					
						commit
						14b622efd0
					
				| @ -82,7 +82,7 @@ public class TypeRegistry { | |||||||
|     for (CustomProperty property : listOrEmpty(type.getCustomProperties())) { |     for (CustomProperty property : listOrEmpty(type.getCustomProperties())) { | ||||||
|       if (TYPES.get(property.getPropertyType().getName()) == null) { |       if (TYPES.get(property.getPropertyType().getName()) == null) { | ||||||
|         throw EntityNotFoundException.byMessage( |         throw EntityNotFoundException.byMessage( | ||||||
|             CatalogExceptionMessage.entityNotFound(Entity.TYPE, property.getPropertyType().getId())); |             CatalogExceptionMessage.entityNotFound(Entity.TYPE, property.getPropertyType().getName())); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -28,7 +28,7 @@ import org.openmetadata.service.util.EntityUtil.Fields; | |||||||
| import org.openmetadata.service.util.FullyQualifiedName; | import org.openmetadata.service.util.FullyQualifiedName; | ||||||
| 
 | 
 | ||||||
| public class DatabaseRepository extends EntityRepository<Database> { | public class DatabaseRepository extends EntityRepository<Database> { | ||||||
|   private static final String DATABASE_UPDATE_FIELDS = "owner,tags"; |   private static final String DATABASE_UPDATE_FIELDS = "owner,tags,extension"; | ||||||
|   private static final String DATABASE_PATCH_FIELDS = DATABASE_UPDATE_FIELDS; |   private static final String DATABASE_PATCH_FIELDS = DATABASE_UPDATE_FIELDS; | ||||||
| 
 | 
 | ||||||
|   public DatabaseRepository(CollectionDAO dao) { |   public DatabaseRepository(CollectionDAO dao) { | ||||||
| @ -98,9 +98,25 @@ public class DatabaseRepository extends EntityRepository<Database> { | |||||||
|         .withId(original.getId()); |         .withId(original.getId()); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Override | ||||||
|  |   public EntityRepository<Database>.EntityUpdater getUpdater(Database original, Database updated, Operation operation) { | ||||||
|  |     return new DatabaseUpdater(original, updated, operation); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private void populateService(Database database) throws IOException { |   private void populateService(Database database) throws IOException { | ||||||
|     DatabaseService service = Entity.getEntity(database.getService(), "", Include.NON_DELETED); |     DatabaseService service = Entity.getEntity(database.getService(), "", Include.NON_DELETED); | ||||||
|     database.setService(service.getEntityReference()); |     database.setService(service.getEntityReference()); | ||||||
|     database.setServiceType(service.getServiceType()); |     database.setServiceType(service.getServiceType()); | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   public class DatabaseUpdater extends EntityUpdater { | ||||||
|  |     public DatabaseUpdater(Database original, Database updated, Operation operation) { | ||||||
|  |       super(original, updated, operation); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void entitySpecificUpdate() throws IOException { | ||||||
|  |       recordChange("retentionPeriod", original.getRetentionPeriod(), updated.getRetentionPeriod()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ import static org.openmetadata.service.Entity.FIELD_OWNER; | |||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import java.util.UUID; | ||||||
| import org.openmetadata.schema.entity.data.Database; | import org.openmetadata.schema.entity.data.Database; | ||||||
| import org.openmetadata.schema.entity.data.DatabaseSchema; | import org.openmetadata.schema.entity.data.DatabaseSchema; | ||||||
| import org.openmetadata.schema.type.EntityReference; | import org.openmetadata.schema.type.EntityReference; | ||||||
| @ -32,7 +33,7 @@ import org.openmetadata.service.util.EntityUtil.Fields; | |||||||
| import org.openmetadata.service.util.FullyQualifiedName; | import org.openmetadata.service.util.FullyQualifiedName; | ||||||
| 
 | 
 | ||||||
| public class DatabaseSchemaRepository extends EntityRepository<DatabaseSchema> { | public class DatabaseSchemaRepository extends EntityRepository<DatabaseSchema> { | ||||||
|   private static final String DATABASE_SCHEMA_UPDATE_FIELDS = "owner,tags"; |   private static final String DATABASE_SCHEMA_UPDATE_FIELDS = "owner,tags,extension"; | ||||||
|   private static final String DATABASE_SCHEMA_PATCH_FIELDS = DATABASE_SCHEMA_UPDATE_FIELDS; |   private static final String DATABASE_SCHEMA_PATCH_FIELDS = DATABASE_SCHEMA_UPDATE_FIELDS; | ||||||
| 
 | 
 | ||||||
|   public DatabaseSchemaRepository(CollectionDAO dao) { |   public DatabaseSchemaRepository(CollectionDAO dao) { | ||||||
| @ -102,6 +103,21 @@ public class DatabaseSchemaRepository extends EntityRepository<DatabaseSchema> { | |||||||
|     schema.withDatabase(databaseRef).withService(database.getService()); |     schema.withDatabase(databaseRef).withService(database.getService()); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Override | ||||||
|  |   public void setInheritedFields(DatabaseSchema schema) throws IOException { | ||||||
|  |     Database database = Entity.getEntity(schema.getDatabase(), "owner", Include.ALL); | ||||||
|  |     setInheritedProperties(schema, schema.getDatabase().getId()); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void setInheritedProperties(DatabaseSchema schema, UUID databaseId) throws IOException { | ||||||
|  |     Database database = null; | ||||||
|  |     // If schema does not have its own retention period, then inherit parent database retention period | ||||||
|  |     if (schema.getRetentionPeriod() == null) { | ||||||
|  |       database = database == null ? Entity.getEntity(Entity.DATABASE, databaseId, "", ALL) : database; | ||||||
|  |       schema.withRetentionPeriod(database.getRetentionPeriod()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   @Override |   @Override | ||||||
|   public void restorePatchAttributes(DatabaseSchema original, DatabaseSchema updated) { |   public void restorePatchAttributes(DatabaseSchema original, DatabaseSchema updated) { | ||||||
|     // Patch can't make changes to following fields. Ignore the changes |     // Patch can't make changes to following fields. Ignore the changes | ||||||
| @ -112,6 +128,12 @@ public class DatabaseSchemaRepository extends EntityRepository<DatabaseSchema> { | |||||||
|         .withId(original.getId()); |         .withId(original.getId()); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Override | ||||||
|  |   public EntityRepository<DatabaseSchema>.EntityUpdater getUpdater( | ||||||
|  |       DatabaseSchema original, DatabaseSchema updated, Operation operation) { | ||||||
|  |     return new DatabaseSchemaUpdater(original, updated, operation); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private void populateDatabase(DatabaseSchema schema) throws IOException { |   private void populateDatabase(DatabaseSchema schema) throws IOException { | ||||||
|     Database database = Entity.getEntity(schema.getDatabase(), "owner", ALL); |     Database database = Entity.getEntity(schema.getDatabase(), "owner", ALL); | ||||||
|     schema |     schema | ||||||
| @ -124,4 +146,15 @@ public class DatabaseSchemaRepository extends EntityRepository<DatabaseSchema> { | |||||||
|       schema.withOwner(database.getOwner().withDescription("inherited")); |       schema.withOwner(database.getOwner().withDescription("inherited")); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   public class DatabaseSchemaUpdater extends EntityUpdater { | ||||||
|  |     public DatabaseSchemaUpdater(DatabaseSchema original, DatabaseSchema updated, Operation operation) { | ||||||
|  |       super(original, updated, operation); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void entitySpecificUpdate() throws IOException { | ||||||
|  |       recordChange("retentionPeriod", original.getRetentionPeriod(), updated.getRetentionPeriod()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -244,6 +244,16 @@ public abstract class EntityRepository<T extends EntityInterface> { | |||||||
|    */ |    */ | ||||||
|   public abstract void storeRelationships(T entity) throws IOException; |   public abstract void storeRelationships(T entity) throws IOException; | ||||||
| 
 | 
 | ||||||
|  |   /** | ||||||
|  |    * This method is called to set inherited property that an entity inherits from its parent. | ||||||
|  |    * | ||||||
|  |    * @see TableRepository#setInheritedFields(Table) for an example implementation | ||||||
|  |    */ | ||||||
|  |   @SuppressWarnings("unused") | ||||||
|  |   public void setInheritedFields(T entity) throws IOException { | ||||||
|  |     // Override to set inherited properties | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   /** |   /** | ||||||
|    * PATCH operations can't overwrite certain fields, such as entity ID, fullyQualifiedNames etc. Instead of throwing an |    * PATCH operations can't overwrite certain fields, such as entity ID, fullyQualifiedNames etc. Instead of throwing an | ||||||
|    * error, we take lenient approach of ignoring the user error and restore those attributes based on what is already |    * error, we take lenient approach of ignoring the user error and restore those attributes based on what is already | ||||||
| @ -518,6 +528,7 @@ public abstract class EntityRepository<T extends EntityInterface> { | |||||||
|     entity.setTags(fields.contains(FIELD_TAGS) ? getTags(entity.getFullyQualifiedName()) : null); |     entity.setTags(fields.contains(FIELD_TAGS) ? getTags(entity.getFullyQualifiedName()) : null); | ||||||
|     entity.setExtension(fields.contains(FIELD_EXTENSION) ? getExtension(entity) : null); |     entity.setExtension(fields.contains(FIELD_EXTENSION) ? getExtension(entity) : null); | ||||||
|     setFields(entity, fields); |     setFields(entity, fields); | ||||||
|  |     setInheritedFields(entity); | ||||||
|     return entity; |     return entity; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -574,6 +585,7 @@ public abstract class EntityRepository<T extends EntityInterface> { | |||||||
|     EntityUpdater entityUpdater = getUpdater(original, updated, Operation.PUT); |     EntityUpdater entityUpdater = getUpdater(original, updated, Operation.PUT); | ||||||
|     entityUpdater.update(); |     entityUpdater.update(); | ||||||
|     String change = entityUpdater.fieldsChanged() ? RestUtil.ENTITY_UPDATED : RestUtil.ENTITY_NO_CHANGE; |     String change = entityUpdater.fieldsChanged() ? RestUtil.ENTITY_UPDATED : RestUtil.ENTITY_NO_CHANGE; | ||||||
|  |     setInheritedFields(updated); | ||||||
|     return new PutResponse<>(Status.OK, withHref(uriInfo, updated), change); |     return new PutResponse<>(Status.OK, withHref(uriInfo, updated), change); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -595,6 +607,7 @@ public abstract class EntityRepository<T extends EntityInterface> { | |||||||
|     EntityUpdater entityUpdater = getUpdater(original, updated, Operation.PATCH); |     EntityUpdater entityUpdater = getUpdater(original, updated, Operation.PATCH); | ||||||
|     entityUpdater.update(); |     entityUpdater.update(); | ||||||
|     String change = entityUpdater.fieldsChanged() ? RestUtil.ENTITY_UPDATED : RestUtil.ENTITY_NO_CHANGE; |     String change = entityUpdater.fieldsChanged() ? RestUtil.ENTITY_UPDATED : RestUtil.ENTITY_NO_CHANGE; | ||||||
|  |     setInheritedFields(updated); | ||||||
|     return new PatchResponse<>(Status.OK, withHref(uriInfo, updated), change); |     return new PatchResponse<>(Status.OK, withHref(uriInfo, updated), change); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -837,6 +850,7 @@ public abstract class EntityRepository<T extends EntityInterface> { | |||||||
|     storeEntity(entity, false); |     storeEntity(entity, false); | ||||||
|     storeExtension(entity); |     storeExtension(entity); | ||||||
|     storeRelationships(entity); |     storeRelationships(entity); | ||||||
|  |     setInheritedFields(entity); | ||||||
|     return entity; |     return entity; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -136,6 +136,19 @@ public class TableRepository extends EntityRepository<Table> { | |||||||
|     return table; |     return table; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Override | ||||||
|  |   public void setInheritedFields(Table table) throws IOException { | ||||||
|  |     setInheritedProperties(table, table.getDatabaseSchema().getId()); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public void setInheritedProperties(Table table, UUID schemaId) throws IOException { | ||||||
|  |     // If table does not have retention period, then inherit it from parent databaseSchema | ||||||
|  |     if (table.getRetentionPeriod() == null) { | ||||||
|  |       DatabaseSchema schema = Entity.getEntity(DATABASE_SCHEMA, schemaId, "", ALL); | ||||||
|  |       table.withRetentionPeriod(schema.getRetentionPeriod()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private void setDefaultFields(Table table) throws IOException { |   private void setDefaultFields(Table table) throws IOException { | ||||||
|     EntityReference schemaRef = getContainer(table.getId()); |     EntityReference schemaRef = getContainer(table.getId()); | ||||||
|     DatabaseSchema schema = Entity.getEntity(schemaRef, "", ALL); |     DatabaseSchema schema = Entity.getEntity(schemaRef, "", ALL); | ||||||
|  | |||||||
| @ -86,7 +86,7 @@ public class DatabaseResource extends EntityResource<Database, DatabaseRepositor | |||||||
|     DatabaseList() {} |     DatabaseList() {} | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static final String FIELDS = "owner,databaseSchemas,usageSummary,location,tags"; |   static final String FIELDS = "owner,databaseSchemas,usageSummary,location,tags,extension"; | ||||||
| 
 | 
 | ||||||
|   @GET |   @GET | ||||||
|   @Operation( |   @Operation( | ||||||
| @ -384,6 +384,7 @@ public class DatabaseResource extends EntityResource<Database, DatabaseRepositor | |||||||
| 
 | 
 | ||||||
|   private Database getDatabase(CreateDatabase create, String user) throws IOException { |   private Database getDatabase(CreateDatabase create, String user) throws IOException { | ||||||
|     return copy(new Database(), create, user) |     return copy(new Database(), create, user) | ||||||
|         .withService(getEntityReference(Entity.DATABASE_SERVICE, create.getService())); |         .withService(getEntityReference(Entity.DATABASE_SERVICE, create.getService())) | ||||||
|  |         .withRetentionPeriod(create.getRetentionPeriod()); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -86,7 +86,7 @@ public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, Datab | |||||||
|     DatabaseSchemaList() {} |     DatabaseSchemaList() {} | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static final String FIELDS = "owner,tables,usageSummary,tags"; |   static final String FIELDS = "owner,tables,usageSummary,tags,extension"; | ||||||
| 
 | 
 | ||||||
|   @GET |   @GET | ||||||
|   @Operation( |   @Operation( | ||||||
| @ -388,6 +388,7 @@ public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, Datab | |||||||
|   private DatabaseSchema getDatabaseSchema(CreateDatabaseSchema create, String user) throws IOException { |   private DatabaseSchema getDatabaseSchema(CreateDatabaseSchema create, String user) throws IOException { | ||||||
|     return copy(new DatabaseSchema(), create, user) |     return copy(new DatabaseSchema(), create, user) | ||||||
|         .withDatabase(getEntityReference(Entity.DATABASE, create.getDatabase())) |         .withDatabase(getEntityReference(Entity.DATABASE, create.getDatabase())) | ||||||
|         .withTags(create.getTags()); |         .withTags(create.getTags()) | ||||||
|  |         .withRetentionPeriod(create.getRetentionPeriod()); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -907,15 +907,16 @@ public class TableResource extends EntityResource<Table, TableRepository> { | |||||||
| 
 | 
 | ||||||
|   private Table getTable(CreateTable create, String user) throws IOException { |   private Table getTable(CreateTable create, String user) throws IOException { | ||||||
|     return validateNewTable( |     return validateNewTable( | ||||||
|         copy(new Table(), create, user) |             copy(new Table(), create, user) | ||||||
|             .withColumns(create.getColumns()) |                 .withColumns(create.getColumns()) | ||||||
|             .withTableConstraints(create.getTableConstraints()) |                 .withTableConstraints(create.getTableConstraints()) | ||||||
|             .withTablePartition(create.getTablePartition()) |                 .withTablePartition(create.getTablePartition()) | ||||||
|             .withTableType(create.getTableType()) |                 .withTableType(create.getTableType()) | ||||||
|             .withTags(create.getTags()) |                 .withTags(create.getTags()) | ||||||
|             .withViewDefinition(create.getViewDefinition()) |                 .withViewDefinition(create.getViewDefinition()) | ||||||
|             .withTableProfilerConfig(create.getTableProfilerConfig()) |                 .withTableProfilerConfig(create.getTableProfilerConfig()) | ||||||
|             .withDatabaseSchema(getEntityReference(Entity.DATABASE_SCHEMA, create.getDatabaseSchema()))); |                 .withDatabaseSchema(getEntityReference(Entity.DATABASE_SCHEMA, create.getDatabaseSchema()))) | ||||||
|  |         .withRetentionPeriod(create.getRetentionPeriod()); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private CustomMetric getCustomMetric(SecurityContext securityContext, CreateCustomMetric create) { |   private CustomMetric getCustomMetric(SecurityContext securityContext, CreateCustomMetric create) { | ||||||
|  | |||||||
| @ -253,9 +253,6 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr | |||||||
| 
 | 
 | ||||||
|   public static EntityReference S3_OBJECT_STORE_SERVICE_REFERENCE; |   public static EntityReference S3_OBJECT_STORE_SERVICE_REFERENCE; | ||||||
| 
 | 
 | ||||||
|   public static EntityReference AWS_STORAGE_SERVICE_REFERENCE; |  | ||||||
|   public static EntityReference GCP_STORAGE_SERVICE_REFERENCE; |  | ||||||
| 
 |  | ||||||
|   public static EntityReference AMUNDSEN_SERVICE_REFERENCE; |   public static EntityReference AMUNDSEN_SERVICE_REFERENCE; | ||||||
|   public static EntityReference ATLAS_SERVICE_REFERENCE; |   public static EntityReference ATLAS_SERVICE_REFERENCE; | ||||||
| 
 | 
 | ||||||
| @ -1470,7 +1467,7 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr | |||||||
|     assertResponse( |     assertResponse( | ||||||
|         () -> typeResourceTest.patchEntity(id, json1, finalEntity, ADMIN_AUTH_HEADERS), |         () -> typeResourceTest.patchEntity(id, json1, finalEntity, ADMIN_AUTH_HEADERS), | ||||||
|         NOT_FOUND, |         NOT_FOUND, | ||||||
|         CatalogExceptionMessage.entityNotFound(Entity.TYPE, invalidType.getId())); |         CatalogExceptionMessage.entityNotFound(Entity.TYPE, invalidType.getName())); | ||||||
| 
 | 
 | ||||||
|     // Now POST an entity with extension that includes custom field intA |     // Now POST an entity with extension that includes custom field intA | ||||||
|     ObjectMapper mapper = new ObjectMapper(); |     ObjectMapper mapper = new ObjectMapper(); | ||||||
|  | |||||||
| @ -1724,6 +1724,33 @@ public class TableResourceTest extends EntityResourceTest<Table, CreateTable> { | |||||||
|     assertReference(USER2_REF, schema.getOwner()); // Owner remains the same |     assertReference(USER2_REF, schema.getOwner()); // Owner remains the same | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @Test | ||||||
|  |   void test_retentionPeriod(TestInfo test) throws HttpResponseException { | ||||||
|  |     DatabaseResourceTest databaseTest = new DatabaseResourceTest(); | ||||||
|  |     CreateDatabase createDatabase = databaseTest.createRequest(getEntityName(test)).withRetentionPeriod("P30D"); | ||||||
|  |     Database database = databaseTest.createEntity(createDatabase, ADMIN_AUTH_HEADERS); | ||||||
|  |     assertEquals("P30D", database.getRetentionPeriod()); | ||||||
|  | 
 | ||||||
|  |     // Ensure database schema retention period is carried over from the parent database | ||||||
|  |     DatabaseSchemaResourceTest schemaResourceTest = new DatabaseSchemaResourceTest(); | ||||||
|  |     CreateDatabaseSchema createDatabaseSchema = | ||||||
|  |         schemaResourceTest.createRequest(test).withDatabase(database.getFullyQualifiedName()); | ||||||
|  |     DatabaseSchema schema = | ||||||
|  |         schemaResourceTest | ||||||
|  |             .createEntity(createDatabaseSchema, ADMIN_AUTH_HEADERS) | ||||||
|  |             .withDatabase(database.getEntityReference()); | ||||||
|  |     assertEquals("P30D", schema.getRetentionPeriod()); | ||||||
|  |     schema = schemaResourceTest.getEntity(schema.getId(), "", ADMIN_AUTH_HEADERS); | ||||||
|  |     assertEquals("P30D", schema.getRetentionPeriod()); | ||||||
|  | 
 | ||||||
|  |     // Ensure table retention period is carried over from the parent database schema | ||||||
|  |     CreateTable createTable = createRequest(test).withDatabaseSchema(schema.getFullyQualifiedName()); | ||||||
|  |     Table table = createEntity(createTable, ADMIN_AUTH_HEADERS).withDatabase(database.getEntityReference()); | ||||||
|  |     assertEquals("P30D", table.getRetentionPeriod()); | ||||||
|  |     table = getEntity(table.getId(), "", ADMIN_AUTH_HEADERS); | ||||||
|  |     assertEquals("P30D", table.getRetentionPeriod()); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   void assertFields(List<Table> tableList, String fieldsParam) { |   void assertFields(List<Table> tableList, String fieldsParam) { | ||||||
|     tableList.forEach(t -> assertFields(t, fieldsParam)); |     tableList.forEach(t -> assertFields(t, fieldsParam)); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -40,6 +40,14 @@ | |||||||
|       "description": "Some databases don't support a database/catalog in the hierarchy and use default database. For example, `MySql`. For such databases, set this flag to true to indicate that this is a default database.", |       "description": "Some databases don't support a database/catalog in the hierarchy and use default database. For example, `MySql`. For such databases, set this flag to true to indicate that this is a default database.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|  |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|  |     "extension": { | ||||||
|  |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "required": ["name", "service"], |   "required": ["name", "service"], | ||||||
|  | |||||||
| @ -36,6 +36,14 @@ | |||||||
|         "$ref": "../../type/tagLabel.json" |         "$ref": "../../type/tagLabel.json" | ||||||
|       }, |       }, | ||||||
|       "default": null |       "default": null | ||||||
|  |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|  |     "extension": { | ||||||
|  |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "required": [ |   "required": [ | ||||||
|  | |||||||
| @ -66,6 +66,10 @@ | |||||||
|       "$ref": "../../type/basic.json#/definitions/sqlQuery", |       "$ref": "../../type/basic.json#/definitions/sqlQuery", | ||||||
|       "default": null |       "default": null | ||||||
|     }, |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|     "extension": { |     "extension": { | ||||||
|       "description": "Entity extension data with custom attributes added to the entity.", |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|       "$ref": "../../type/basic.json#/definitions/entityExtension" |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
|   "$id": "https://open-metadata.org/schema/entity/data/database.json", |   "$id": "https://open-metadata.org/schema/entity/data/database.json", | ||||||
|   "$schema": "http://json-schema.org/draft-07/schema#", |   "$schema": "http://json-schema.org/draft-07/schema#", | ||||||
|   "title": "Database", |   "title": "Database", | ||||||
|  |   "$comment": "@om-entity-type", | ||||||
|   "description": "This schema defines the Database entity. A database also referred to as Database Catalog is a collection of schemas.", |   "description": "This schema defines the Database entity. A database also referred to as Database Catalog is a collection of schemas.", | ||||||
|   "type": "object", |   "type": "object", | ||||||
|   "javaType": "org.openmetadata.schema.entity.data.Database", |   "javaType": "org.openmetadata.schema.entity.data.Database", | ||||||
| @ -98,6 +99,14 @@ | |||||||
|       "description": "When `true` indicates the entity has been soft deleted.", |       "description": "When `true` indicates the entity has been soft deleted.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|  |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the database. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|  |     "extension": { | ||||||
|  |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "required": ["name", "service"], |   "required": ["name", "service"], | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
|   "$id": "https://open-metadata.org/schema/entity/data/databaseSchema.json", |   "$id": "https://open-metadata.org/schema/entity/data/databaseSchema.json", | ||||||
|   "$schema": "http://json-schema.org/draft-07/schema#", |   "$schema": "http://json-schema.org/draft-07/schema#", | ||||||
|   "title": "Database Schema", |   "title": "Database Schema", | ||||||
|  |   "$comment": "@om-entity-type", | ||||||
|   "description": "This schema defines the Database Schema entity. A `Database Schema` is collection of tables, views, stored procedures, and other database objects.", |   "description": "This schema defines the Database Schema entity. A `Database Schema` is collection of tables, views, stored procedures, and other database objects.", | ||||||
|   "type": "object", |   "type": "object", | ||||||
|   "javaType": "org.openmetadata.schema.entity.data.DatabaseSchema", |   "javaType": "org.openmetadata.schema.entity.data.DatabaseSchema", | ||||||
| @ -93,6 +94,14 @@ | |||||||
|       "description": "When `true` indicates the entity has been soft deleted.", |       "description": "When `true` indicates the entity has been soft deleted.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|  |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the database schema. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`. When not set, the retention period is inherited from the parent database, if it exists.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|  |     "extension": { | ||||||
|  |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "required": ["name", "database", "service"], |   "required": ["name", "database", "service"], | ||||||
|  | |||||||
| @ -982,6 +982,10 @@ | |||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|     }, |     }, | ||||||
|  |     "retentionPeriod" : { | ||||||
|  |       "description": "Retention period of the data in the table. Period is expressed as duration in ISO 8601 format in UTC. Example - `P23DT23H`. When not set, the retention period is inherited from the parent database schema, if it exists.", | ||||||
|  |       "$ref": "../../type/basic.json#/definitions/duration" | ||||||
|  |     }, | ||||||
|     "extension": { |     "extension": { | ||||||
|       "description": "Entity extension data with custom attributes added to the entity.", |       "description": "Entity extension data with custom attributes added to the entity.", | ||||||
|       "$ref": "../../type/basic.json#/definitions/entityExtension" |       "$ref": "../../type/basic.json#/definitions/entityExtension" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Suresh Srinivas
						Suresh Srinivas