mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-10-31 02:29:03 +00:00 
			
		
		
		
	* feat: added exporter app config * refactor: added entityprofile resource & added backward compatibility to existing API * feat: added tests to get_profile_data_by_type * feat: remove non supported event types * chore: added migrations to 1.9.7 * chore: added application creation readme * feat: implemented backend support for agent runner for external applications * chore: move migrations to 1.9.8 * Update generated TypeScript types * fix: added setIngestionRunner method to serviceEntityInterface interface * Update generated TypeScript types * fix: remove service instanceof MetadataService in deploy endpoint --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> (cherry picked from commit 568baab4267186490f88237f623cf886ce75b1b8)
This commit is contained in:
		
							parent
							
								
									14607042b6
								
							
						
					
					
						commit
						4159a2345c
					
				| @ -9,6 +9,7 @@ import javax.validation.ConstraintViolationException; | |||||||
| import org.openmetadata.common.utils.CommonUtil; | import org.openmetadata.common.utils.CommonUtil; | ||||||
| import org.openmetadata.schema.entity.app.App; | import org.openmetadata.schema.entity.app.App; | ||||||
| import org.openmetadata.schema.entity.app.AppMarketPlaceDefinition; | import org.openmetadata.schema.entity.app.AppMarketPlaceDefinition; | ||||||
|  | import org.openmetadata.schema.entity.app.AppType; | ||||||
| import org.openmetadata.schema.entity.app.CreateApp; | import org.openmetadata.schema.entity.app.CreateApp; | ||||||
| import org.openmetadata.schema.type.EntityReference; | import org.openmetadata.schema.type.EntityReference; | ||||||
| import org.openmetadata.schema.type.Include; | import org.openmetadata.schema.type.Include; | ||||||
| @ -30,6 +31,9 @@ public class AppMapper implements EntityMapper<App, CreateApp> { | |||||||
|             null, |             null, | ||||||
|             createAppRequest.getName(), |             createAppRequest.getName(), | ||||||
|             new EntityUtil.Fields(appMarketPlaceRepository.getAllowedFields())); |             new EntityUtil.Fields(appMarketPlaceRepository.getAllowedFields())); | ||||||
|  |     Boolean supportsIngestionRunner = | ||||||
|  |         !marketPlaceDefinition.getAppType().equals(AppType.Internal) | ||||||
|  |             && marketPlaceDefinition.getSupportsIngestionRunner(); | ||||||
|     List<EntityReference> owners = validateOwners(createAppRequest.getOwners()); |     List<EntityReference> owners = validateOwners(createAppRequest.getOwners()); | ||||||
|     App app = |     App app = | ||||||
|         new App() |         new App() | ||||||
| @ -59,7 +63,12 @@ public class AppMapper implements EntityMapper<App, CreateApp> { | |||||||
|             .withAllowConfiguration(marketPlaceDefinition.getAllowConfiguration()) |             .withAllowConfiguration(marketPlaceDefinition.getAllowConfiguration()) | ||||||
|             .withSystem(marketPlaceDefinition.getSystem()) |             .withSystem(marketPlaceDefinition.getSystem()) | ||||||
|             .withSupportsInterrupt(marketPlaceDefinition.getSupportsInterrupt()) |             .withSupportsInterrupt(marketPlaceDefinition.getSupportsInterrupt()) | ||||||
|             .withFullyQualifiedName(marketPlaceDefinition.getFullyQualifiedName()); |             .withFullyQualifiedName(marketPlaceDefinition.getFullyQualifiedName()) | ||||||
|  |             .withSupportsIngestionRunner(supportsIngestionRunner) | ||||||
|  |             .withIngestionRunner( | ||||||
|  |                 supportsIngestionRunner.equals(true) | ||||||
|  |                     ? createAppRequest.getIngestionRunner() | ||||||
|  |                     : null); | ||||||
| 
 | 
 | ||||||
|     // validate Bot if provided |     // validate Bot if provided | ||||||
|     validateAndAddBot(app, createAppRequest.getBot()); |     validateAndAddBot(app, createAppRequest.getBot()); | ||||||
|  | |||||||
| @ -44,7 +44,8 @@ public class AppMarketPlaceMapper | |||||||
|             .withAllowConfiguration(create.getAllowConfiguration()) |             .withAllowConfiguration(create.getAllowConfiguration()) | ||||||
|             .withSystem(create.getSystem()) |             .withSystem(create.getSystem()) | ||||||
|             .withSupportsInterrupt(create.getSupportsInterrupt()) |             .withSupportsInterrupt(create.getSupportsInterrupt()) | ||||||
|             .withEventSubscriptions(create.getEventSubscriptions()); |             .withEventSubscriptions(create.getEventSubscriptions()) | ||||||
|  |             .withSupportsIngestionRunner(create.getSupportsIngestionRunner()); | ||||||
| 
 | 
 | ||||||
|     // Validate App |     // Validate App | ||||||
|     validateApplication(app); |     validateApplication(app); | ||||||
|  | |||||||
| @ -1080,6 +1080,11 @@ public class AppResource extends EntityResource<App, AppRepository> { | |||||||
|         IngestionPipeline ingestionPipeline = getIngestionPipeline(uriInfo, securityContext, app); |         IngestionPipeline ingestionPipeline = getIngestionPipeline(uriInfo, securityContext, app); | ||||||
|         ServiceEntityInterface service = |         ServiceEntityInterface service = | ||||||
|             Entity.getEntity(ingestionPipeline.getService(), "", Include.NON_DELETED); |             Entity.getEntity(ingestionPipeline.getService(), "", Include.NON_DELETED); | ||||||
|  | 
 | ||||||
|  |         if (app.getSupportsIngestionRunner()) { | ||||||
|  |           service.setIngestionRunner(app.getIngestionRunner()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         PipelineServiceClientResponse response = |         PipelineServiceClientResponse response = | ||||||
|             pipelineServiceClient.runPipeline(ingestionPipeline, service, configPayload); |             pipelineServiceClient.runPipeline(ingestionPipeline, service, configPayload); | ||||||
|         return Response.status(response.getCode()).entity(response).build(); |         return Response.status(response.getCode()).entity(response).build(); | ||||||
| @ -1165,6 +1170,11 @@ public class AppResource extends EntityResource<App, AppRepository> { | |||||||
|         IngestionPipeline ingestionPipeline = getIngestionPipeline(uriInfo, securityContext, app); |         IngestionPipeline ingestionPipeline = getIngestionPipeline(uriInfo, securityContext, app); | ||||||
|         ServiceEntityInterface service = |         ServiceEntityInterface service = | ||||||
|             Entity.getEntity(ingestionPipeline.getService(), "", Include.NON_DELETED); |             Entity.getEntity(ingestionPipeline.getService(), "", Include.NON_DELETED); | ||||||
|  | 
 | ||||||
|  |         if (app.getSupportsIngestionRunner()) { | ||||||
|  |           service.setIngestionRunner(app.getIngestionRunner()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         PipelineServiceClientResponse status = |         PipelineServiceClientResponse status = | ||||||
|             pipelineServiceClient.deployPipeline(ingestionPipeline, service); |             pipelineServiceClient.deployPipeline(ingestionPipeline, service); | ||||||
|         if (status.getCode() == 200) { |         if (status.getCode() == 200) { | ||||||
|  | |||||||
| @ -29,6 +29,8 @@ public interface ServiceEntityInterface extends EntityInterface { | |||||||
| 
 | 
 | ||||||
|   void setPipelines(List<EntityReference> pipelines); |   void setPipelines(List<EntityReference> pipelines); | ||||||
| 
 | 
 | ||||||
|  |   void setIngestionRunner(EntityReference ingestionRunner); | ||||||
|  | 
 | ||||||
|   void setTestConnectionResult(TestConnectionResult testConnectionResult); |   void setTestConnectionResult(TestConnectionResult testConnectionResult); | ||||||
| 
 | 
 | ||||||
|   EnumInterface getServiceType(); |   EnumInterface getServiceType(); | ||||||
|  | |||||||
| @ -304,6 +304,15 @@ | |||||||
|     "eventSubscriptions": { |     "eventSubscriptions": { | ||||||
|       "description": "Event Subscriptions for the Application.", |       "description": "Event Subscriptions for the Application.", | ||||||
|       "$ref": "../../type/entityReferenceList.json" |       "$ref": "../../type/entityReferenceList.json" | ||||||
|  |     }, | ||||||
|  |     "supportsIngestionRunner": { | ||||||
|  |       "description": "If the app support execution through the external runner.", | ||||||
|  |       "type": "boolean", | ||||||
|  |       "default": false | ||||||
|  |     }, | ||||||
|  |     "ingestionRunner" : { | ||||||
|  |       "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.", | ||||||
|  |       "$ref": "../../type/entityReference.json" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "additionalProperties": false, |   "additionalProperties": false, | ||||||
|  | |||||||
| @ -46,6 +46,10 @@ | |||||||
|       "description": "If the app run can be interrupted as part of the execution.", |       "description": "If the app run can be interrupted as part of the execution.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|  |     }, | ||||||
|  |     "ingestionRunner" : { | ||||||
|  |       "description": "The ingestion agent responsible for executing the ingestion pipeline. It will be defined at runtime based on the Ingestion Agent of the service.", | ||||||
|  |       "$ref": "../../type/entityReference.json" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "additionalProperties": false |   "additionalProperties": false | ||||||
|  | |||||||
| @ -165,6 +165,11 @@ | |||||||
|       "items": { |       "items": { | ||||||
|         "$ref": "../../../events/api/createEventSubscription.json" |         "$ref": "../../../events/api/createEventSubscription.json" | ||||||
|       } |       } | ||||||
|  |     }, | ||||||
|  |     "supportsIngestionRunner": { | ||||||
|  |       "description": "If the app support execution through the external runner.", | ||||||
|  |       "type": "boolean", | ||||||
|  |       "default": false | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "additionalProperties": false, |   "additionalProperties": false, | ||||||
|  | |||||||
| @ -131,6 +131,11 @@ | |||||||
|       "description": "The app will be installable only if this flag is set to true.", |       "description": "The app will be installable only if this flag is set to true.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": true |       "default": true | ||||||
|  |     }, | ||||||
|  |     "supportsIngestionRunner": { | ||||||
|  |       "description": "If the app support execution through the external runner.", | ||||||
|  |       "type": "boolean", | ||||||
|  |       "default": false | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "additionalProperties": false, |   "additionalProperties": false, | ||||||
|  | |||||||
| @ -175,6 +175,10 @@ | |||||||
|       "description": "Indicates if the test suite is inherited from a parent entity.", |       "description": "Indicates if the test suite is inherited from a parent entity.", | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "default": false |       "default": false | ||||||
|  |     }, | ||||||
|  |     "ingestionRunner": { | ||||||
|  |       "description": "Link to the ingestion pipeline that ingested this entity.", | ||||||
|  |       "$ref": "../type/entityReference.json" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "required": [ |   "required": [ | ||||||
|  | |||||||
| @ -0,0 +1,251 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Request schema for creating an entity profile for a table. | ||||||
|  |  */ | ||||||
|  | export interface CreateEntityProfile { | ||||||
|  |     /** | ||||||
|  |      * Type of entity for which the profile is created. For example, 'table'. | ||||||
|  |      */ | ||||||
|  |     entityType:  string; | ||||||
|  |     profileData: Profile; | ||||||
|  |     /** | ||||||
|  |      * type of profile | ||||||
|  |      */ | ||||||
|  |     profileType?: ProfileTypeEnum; | ||||||
|  |     /** | ||||||
|  |      * Timestamp when the profile is created. | ||||||
|  |      */ | ||||||
|  |     timestamp?: number; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * This schema defines the type to capture the table's data profile. | ||||||
|  |  * | ||||||
|  |  * This schema defines the type to capture the table's column profile. | ||||||
|  |  * | ||||||
|  |  * This schema defines the System Profile object holding profile data from system tables. | ||||||
|  |  */ | ||||||
|  | export interface Profile { | ||||||
|  |     /** | ||||||
|  |      * No.of columns in the table. | ||||||
|  |      */ | ||||||
|  |     columnCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Table creation time. | ||||||
|  |      */ | ||||||
|  |     createDateTime?: Date; | ||||||
|  |     /** | ||||||
|  |      * Custom Metrics profile list bound to a column. | ||||||
|  |      */ | ||||||
|  |     customMetrics?: CustomMetricProfile[]; | ||||||
|  |     /** | ||||||
|  |      * Percentage of data or no. of rows we want to execute the profiler and tests on | ||||||
|  |      */ | ||||||
|  |     profileSample?:     number; | ||||||
|  |     profileSampleType?: ProfileSampleType; | ||||||
|  |     /** | ||||||
|  |      * No.of rows in the table. This is always executed on the whole table. | ||||||
|  |      */ | ||||||
|  |     rowCount?:           number; | ||||||
|  |     samplingMethodType?: SamplingMethodType; | ||||||
|  |     /** | ||||||
|  |      * Table size in GB | ||||||
|  |      */ | ||||||
|  |     sizeInByte?: number; | ||||||
|  |     /** | ||||||
|  |      * Timestamp on which profile is taken. | ||||||
|  |      */ | ||||||
|  |     timestamp?: number; | ||||||
|  |     /** | ||||||
|  |      * Number of values that contain distinct values. | ||||||
|  |      */ | ||||||
|  |     distinctCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Proportion of distinct values in a column. | ||||||
|  |      */ | ||||||
|  |     distinctProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of Rows that contain duplicates in a column. | ||||||
|  |      */ | ||||||
|  |     duplicateCount?: number; | ||||||
|  |     /** | ||||||
|  |      * First quartile of a column. | ||||||
|  |      */ | ||||||
|  |     firstQuartile?: number; | ||||||
|  |     /** | ||||||
|  |      * Histogram of a column. | ||||||
|  |      */ | ||||||
|  |     histogram?: any[] | boolean | HistogramClass | number | number | null | string; | ||||||
|  |     /** | ||||||
|  |      * Inter quartile range of a column. | ||||||
|  |      */ | ||||||
|  |     interQuartileRange?: number; | ||||||
|  |     /** | ||||||
|  |      * Maximum value in a column. | ||||||
|  |      */ | ||||||
|  |     max?: number | string; | ||||||
|  |     /** | ||||||
|  |      * Maximum string length in a column. | ||||||
|  |      */ | ||||||
|  |     maxLength?: number; | ||||||
|  |     /** | ||||||
|  |      * Avg value in a column. | ||||||
|  |      */ | ||||||
|  |     mean?: number; | ||||||
|  |     /** | ||||||
|  |      * Median of a column. | ||||||
|  |      */ | ||||||
|  |     median?: number; | ||||||
|  |     /** | ||||||
|  |      * Minimum value in a column. | ||||||
|  |      */ | ||||||
|  |     min?: number | string; | ||||||
|  |     /** | ||||||
|  |      * Minimum string length in a column. | ||||||
|  |      */ | ||||||
|  |     minLength?: number; | ||||||
|  |     /** | ||||||
|  |      * Missing count is calculated by subtracting valuesCount - validCount. | ||||||
|  |      */ | ||||||
|  |     missingCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Missing Percentage is calculated by taking percentage of validCount/valuesCount. | ||||||
|  |      */ | ||||||
|  |     missingPercentage?: number; | ||||||
|  |     /** | ||||||
|  |      * Column Name. | ||||||
|  |      */ | ||||||
|  |     name?: string; | ||||||
|  |     /** | ||||||
|  |      * Non parametric skew of a column. | ||||||
|  |      */ | ||||||
|  |     nonParametricSkew?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of null values in a column. | ||||||
|  |      */ | ||||||
|  |     nullCount?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of null value proportion in columns. | ||||||
|  |      */ | ||||||
|  |     nullProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * Standard deviation of a column. | ||||||
|  |      */ | ||||||
|  |     stddev?: number; | ||||||
|  |     /** | ||||||
|  |      * Median value in a column. | ||||||
|  |      */ | ||||||
|  |     sum?: number; | ||||||
|  |     /** | ||||||
|  |      * First quartile of a column. | ||||||
|  |      */ | ||||||
|  |     thirdQuartile?: number; | ||||||
|  |     /** | ||||||
|  |      * No. of unique values in the column. | ||||||
|  |      */ | ||||||
|  |     uniqueCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Proportion of number of unique values in a column. | ||||||
|  |      */ | ||||||
|  |     uniqueProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * Total count of valid values in this column. | ||||||
|  |      */ | ||||||
|  |     validCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Total count of the values in this column. | ||||||
|  |      */ | ||||||
|  |     valuesCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Percentage of values in this column with respect to row count. | ||||||
|  |      */ | ||||||
|  |     valuesPercentage?: number; | ||||||
|  |     /** | ||||||
|  |      * Variance of a column. | ||||||
|  |      */ | ||||||
|  |     variance?: number; | ||||||
|  |     /** | ||||||
|  |      * Operation performed. | ||||||
|  |      */ | ||||||
|  |     operation?: DMLOperationType; | ||||||
|  |     /** | ||||||
|  |      * Number of rows affected. | ||||||
|  |      */ | ||||||
|  |     rowsAffected?: number; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Profiling results of a Custom Metric. | ||||||
|  |  */ | ||||||
|  | export interface CustomMetricProfile { | ||||||
|  |     /** | ||||||
|  |      * Custom metric name. | ||||||
|  |      */ | ||||||
|  |     name?: string; | ||||||
|  |     /** | ||||||
|  |      * Profiling results for the metric. | ||||||
|  |      */ | ||||||
|  |     value?: number; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export interface HistogramClass { | ||||||
|  |     /** | ||||||
|  |      * Boundaries of Histogram. | ||||||
|  |      */ | ||||||
|  |     boundaries?: any[]; | ||||||
|  |     /** | ||||||
|  |      * Frequencies of Histogram. | ||||||
|  |      */ | ||||||
|  |     frequencies?: any[]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Operation performed. | ||||||
|  |  * | ||||||
|  |  * This schema defines the type of DML operation. | ||||||
|  |  */ | ||||||
|  | export enum DMLOperationType { | ||||||
|  |     Delete = "DELETE", | ||||||
|  |     Insert = "INSERT", | ||||||
|  |     Update = "UPDATE", | ||||||
|  |     Write = "WRITE", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Type of Profile Sample (percentage or rows) | ||||||
|  |  */ | ||||||
|  | export enum ProfileSampleType { | ||||||
|  |     Percentage = "PERCENTAGE", | ||||||
|  |     Rows = "ROWS", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Type of Sampling Method (BERNOULLI or SYSTEM) | ||||||
|  |  */ | ||||||
|  | export enum SamplingMethodType { | ||||||
|  |     Bernoulli = "BERNOULLI", | ||||||
|  |     System = "SYSTEM", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * type of profile | ||||||
|  |  * | ||||||
|  |  * profile type | ||||||
|  |  */ | ||||||
|  | export enum ProfileTypeEnum { | ||||||
|  |     Column = "column", | ||||||
|  |     System = "system", | ||||||
|  |     Table = "table", | ||||||
|  | } | ||||||
| @ -104,6 +104,11 @@ export interface App { | |||||||
|      * Change that lead to this version of the entity. |      * Change that lead to this version of the entity. | ||||||
|      */ |      */ | ||||||
|     incrementalChangeDescription?: ChangeDescription; |     incrementalChangeDescription?: ChangeDescription; | ||||||
|  |     /** | ||||||
|  |      * The ingestion agent responsible for executing the ingestion pipeline. It will be defined | ||||||
|  |      * at runtime based on the Ingestion Agent of the service. | ||||||
|  |      */ | ||||||
|  |     ingestionRunner?: EntityReference; | ||||||
|     /** |     /** | ||||||
|      * Name of the Application. |      * Name of the Application. | ||||||
|      */ |      */ | ||||||
| @ -153,6 +158,10 @@ export interface App { | |||||||
|      * Support Email for the application |      * Support Email for the application | ||||||
|      */ |      */ | ||||||
|     supportEmail?: string; |     supportEmail?: string; | ||||||
|  |     /** | ||||||
|  |      * If the app support execution through the external runner. | ||||||
|  |      */ | ||||||
|  |     supportsIngestionRunner?: boolean; | ||||||
|     /** |     /** | ||||||
|      * If the app run can be interrupted as part of the execution. |      * If the app run can be interrupted as part of the execution. | ||||||
|      */ |      */ | ||||||
| @ -547,6 +556,9 @@ export interface Action { | |||||||
|  * the relationship of a table `belongs to a` database. |  * the relationship of a table `belongs to a` database. | ||||||
|  * |  * | ||||||
|  * Bot User Associated with this application. |  * Bot User Associated with this application. | ||||||
|  |  * | ||||||
|  |  * The ingestion agent responsible for executing the ingestion pipeline. It will be defined | ||||||
|  |  * at runtime based on the Ingestion Agent of the service. | ||||||
|  */ |  */ | ||||||
| export interface EntityReference { | export interface EntityReference { | ||||||
|     /** |     /** | ||||||
| @ -646,6 +658,9 @@ export enum MetadataAttribute { | |||||||
|  * the relationship of a table `belongs to a` database. |  * the relationship of a table `belongs to a` database. | ||||||
|  * |  * | ||||||
|  * Bot User Associated with this application. |  * Bot User Associated with this application. | ||||||
|  |  * | ||||||
|  |  * The ingestion agent responsible for executing the ingestion pipeline. It will be defined | ||||||
|  |  * at runtime based on the Ingestion Agent of the service. | ||||||
|  */ |  */ | ||||||
| export interface TagLabel { | export interface TagLabel { | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -0,0 +1,186 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Configuration for the Metadata Exporter Application. | ||||||
|  |  */ | ||||||
|  | export interface MetadataExporterAppConfig { | ||||||
|  |     /** | ||||||
|  |      * Enable backfill for the exporter to process historical data. This will only work on the | ||||||
|  |      * very first run of the exporter. | ||||||
|  |      */ | ||||||
|  |     backfill?: boolean; | ||||||
|  |     /** | ||||||
|  |      * Connection details for the Metadata Exporter Application. | ||||||
|  |      */ | ||||||
|  |     connectionConfig: SnowflakeConnection; | ||||||
|  |     /** | ||||||
|  |      * List of event types to export. | ||||||
|  |      */ | ||||||
|  |     eventTypes?: EventType[]; | ||||||
|  |     /** | ||||||
|  |      * Range of data to export. Options are 'ALL' for all data, 'LATEST' for the latest data, or | ||||||
|  |      * a specific date range. | ||||||
|  |      */ | ||||||
|  |     exportRange: ExportRangeConfiguration; | ||||||
|  |     /** | ||||||
|  |      * Configuration for the table to export the data to. | ||||||
|  |      */ | ||||||
|  |     tableConfiguration: ConfigurationForTheTableToExportTheDataTo; | ||||||
|  |     /** | ||||||
|  |      * Application Type | ||||||
|  |      */ | ||||||
|  |     type?: MetadataExporterAppType; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Connection details for the Metadata Exporter Application. | ||||||
|  |  * | ||||||
|  |  * Snowflake Connection Config | ||||||
|  |  */ | ||||||
|  | export interface SnowflakeConnection { | ||||||
|  |     /** | ||||||
|  |      * If the Snowflake URL is https://xyz1234.us-east-1.gcp.snowflakecomputing.com, then the
 | ||||||
|  |      * account is xyz1234.us-east-1.gcp | ||||||
|  |      */ | ||||||
|  |     account: string; | ||||||
|  |     /** | ||||||
|  |      * Optional configuration for ingestion to keep the client session active in case the | ||||||
|  |      * ingestion process runs for longer durations. | ||||||
|  |      */ | ||||||
|  |     clientSessionKeepAlive?: boolean; | ||||||
|  |     connectionArguments?:    { [key: string]: any }; | ||||||
|  |     connectionOptions?:      { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * Database of the data source. This is optional parameter, if you would like to restrict | ||||||
|  |      * the metadata reading to a single database. When left blank, OpenMetadata Ingestion | ||||||
|  |      * attempts to scan all the databases. | ||||||
|  |      */ | ||||||
|  |     database?: string; | ||||||
|  |     /** | ||||||
|  |      * Password to connect to Snowflake. | ||||||
|  |      */ | ||||||
|  |     password?: string; | ||||||
|  |     /** | ||||||
|  |      * Connection to Snowflake instance via Private Key | ||||||
|  |      */ | ||||||
|  |     privateKey?: string; | ||||||
|  |     /** | ||||||
|  |      * Session query tag used to monitor usage on snowflake. To use a query tag snowflake user | ||||||
|  |      * should have enough privileges to alter the session. | ||||||
|  |      */ | ||||||
|  |     queryTag?: string; | ||||||
|  |     /** | ||||||
|  |      * Snowflake Role. | ||||||
|  |      */ | ||||||
|  |     role?: string; | ||||||
|  |     /** | ||||||
|  |      * SQLAlchemy driver scheme options. | ||||||
|  |      */ | ||||||
|  |     scheme?: SnowflakeScheme; | ||||||
|  |     /** | ||||||
|  |      * Snowflake Passphrase Key used with Private Key | ||||||
|  |      */ | ||||||
|  |     snowflakePrivatekeyPassphrase?: string; | ||||||
|  |     /** | ||||||
|  |      * Service Type | ||||||
|  |      */ | ||||||
|  |     type?: SnowflakeType; | ||||||
|  |     /** | ||||||
|  |      * Username to connect to Snowflake. This user should have privileges to read all the | ||||||
|  |      * metadata in Snowflake. | ||||||
|  |      */ | ||||||
|  |     username: string; | ||||||
|  |     /** | ||||||
|  |      * Snowflake warehouse. | ||||||
|  |      */ | ||||||
|  |     warehouse: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SQLAlchemy driver scheme options. | ||||||
|  |  */ | ||||||
|  | export enum SnowflakeScheme { | ||||||
|  |     Snowflake = "snowflake", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service Type | ||||||
|  |  * | ||||||
|  |  * Service type. | ||||||
|  |  */ | ||||||
|  | export enum SnowflakeType { | ||||||
|  |     Snowflake = "Snowflake", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export enum EventType { | ||||||
|  |     Profile = "PROFILE", | ||||||
|  |     TestCaseResults = "TEST_CASE_RESULTS", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Range of data to export. Options are 'ALL' for all data, 'LATEST' for the latest data, or | ||||||
|  |  * a specific date range. | ||||||
|  |  * | ||||||
|  |  * Configuration for the export range of data. | ||||||
|  |  */ | ||||||
|  | export interface ExportRangeConfiguration { | ||||||
|  |     /** | ||||||
|  |      * Interval for the export range, applicable when rangeType is 'DATE_RANGE'. | ||||||
|  |      */ | ||||||
|  |     interval?: number; | ||||||
|  |     /** | ||||||
|  |      * Type of range for data export. | ||||||
|  |      */ | ||||||
|  |     rangeType: RangeType; | ||||||
|  |     /** | ||||||
|  |      * Unit of time for the export range. | ||||||
|  |      */ | ||||||
|  |     unit?: Unit; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Type of range for data export. | ||||||
|  |  */ | ||||||
|  | export enum RangeType { | ||||||
|  |     All = "ALL", | ||||||
|  |     DateRange = "DATE_RANGE", | ||||||
|  |     Latest = "LATEST", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Unit of time for the export range. | ||||||
|  |  */ | ||||||
|  | export enum Unit { | ||||||
|  |     Days = "DAYS", | ||||||
|  |     Hours = "HOURS", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Configuration for the table to export the data to. | ||||||
|  |  */ | ||||||
|  | export interface ConfigurationForTheTableToExportTheDataTo { | ||||||
|  |     databaseName: string; | ||||||
|  |     schemaName:   string; | ||||||
|  |     tableName:    string; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Application Type | ||||||
|  |  * | ||||||
|  |  * Application type. | ||||||
|  |  */ | ||||||
|  | export enum MetadataExporterAppType { | ||||||
|  |     MetadataExporter = "MetadataExporter", | ||||||
|  | } | ||||||
| @ -0,0 +1,188 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Google BigQuery Connection Config | ||||||
|  |  */ | ||||||
|  | export interface BigQueryConnection { | ||||||
|  |     /** | ||||||
|  |      * Billing Project ID | ||||||
|  |      */ | ||||||
|  |     billingProjectId?:    string; | ||||||
|  |     connectionArguments?: { [key: string]: any }; | ||||||
|  |     connectionOptions?:   { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * GCP Credentials | ||||||
|  |      */ | ||||||
|  |     credentials: GCPCredentials; | ||||||
|  |     /** | ||||||
|  |      * BigQuery APIs URL. | ||||||
|  |      */ | ||||||
|  |     hostPort?: string; | ||||||
|  |     /** | ||||||
|  |      * SQLAlchemy driver scheme options. | ||||||
|  |      */ | ||||||
|  |     scheme?: BigqueryScheme; | ||||||
|  |     /** | ||||||
|  |      * Taxonomy location used to fetch policy tags | ||||||
|  |      */ | ||||||
|  |     taxonomyLocation?: string; | ||||||
|  |     /** | ||||||
|  |      * Project IDs used to fetch policy tags | ||||||
|  |      */ | ||||||
|  |     taxonomyProjectID?: string[]; | ||||||
|  |     /** | ||||||
|  |      * Service Type | ||||||
|  |      */ | ||||||
|  |     type?: BigqueryType; | ||||||
|  |     /** | ||||||
|  |      * Location used to query INFORMATION_SCHEMA.JOBS_BY_PROJECT to fetch usage data. You can | ||||||
|  |      * pass multi-regions, such as `us` or `eu`, or you specific region. Australia and Asia | ||||||
|  |      * multi-regions are not yet in GA. | ||||||
|  |      */ | ||||||
|  |     usageLocation?: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * GCP Credentials | ||||||
|  |  * | ||||||
|  |  * GCP credentials configs. | ||||||
|  |  */ | ||||||
|  | export interface GCPCredentials { | ||||||
|  |     /** | ||||||
|  |      * We support two ways of authenticating to GCP i.e via GCP Credentials Values or GCP | ||||||
|  |      * Credentials Path | ||||||
|  |      */ | ||||||
|  |     gcpConfig: GCPCredentialsConfiguration; | ||||||
|  |     /** | ||||||
|  |      * we enable the authenticated service account to impersonate another service account | ||||||
|  |      */ | ||||||
|  |     gcpImpersonateServiceAccount?: GCPImpersonateServiceAccountValues; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * We support two ways of authenticating to GCP i.e via GCP Credentials Values or GCP | ||||||
|  |  * Credentials Path | ||||||
|  |  * | ||||||
|  |  * Pass the raw credential values provided by GCP | ||||||
|  |  * | ||||||
|  |  * Pass the path of file containing the GCP credentials info | ||||||
|  |  * | ||||||
|  |  * Use the application default credentials | ||||||
|  |  */ | ||||||
|  | export interface GCPCredentialsConfiguration { | ||||||
|  |     /** | ||||||
|  |      * Google Cloud auth provider certificate. | ||||||
|  |      */ | ||||||
|  |     authProviderX509CertUrl?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud auth uri. | ||||||
|  |      */ | ||||||
|  |     authUri?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud email. | ||||||
|  |      */ | ||||||
|  |     clientEmail?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud Client ID. | ||||||
|  |      */ | ||||||
|  |     clientId?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud client certificate uri. | ||||||
|  |      */ | ||||||
|  |     clientX509CertUrl?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud private key. | ||||||
|  |      */ | ||||||
|  |     privateKey?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud private key id. | ||||||
|  |      */ | ||||||
|  |     privateKeyId?: string; | ||||||
|  |     /** | ||||||
|  |      * Project ID | ||||||
|  |      * | ||||||
|  |      * GCP Project ID to parse metadata from | ||||||
|  |      */ | ||||||
|  |     projectId?: string[] | string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud token uri. | ||||||
|  |      */ | ||||||
|  |     tokenUri?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud Platform account type. | ||||||
|  |      * | ||||||
|  |      * Google Cloud Platform ADC ( Application Default Credentials ) | ||||||
|  |      */ | ||||||
|  |     type?: string; | ||||||
|  |     /** | ||||||
|  |      * Path of the file containing the GCP credentials info | ||||||
|  |      */ | ||||||
|  |     path?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Security Token Service audience which contains the resource name for the workload | ||||||
|  |      * identity pool and the provider identifier in that pool. | ||||||
|  |      */ | ||||||
|  |     audience?: string; | ||||||
|  |     /** | ||||||
|  |      * This object defines the mechanism used to retrieve the external credential from the local | ||||||
|  |      * environment so that it can be exchanged for a GCP access token via the STS endpoint | ||||||
|  |      */ | ||||||
|  |     credentialSource?: { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * Google Cloud Platform account type. | ||||||
|  |      */ | ||||||
|  |     externalType?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Security Token Service subject token type based on the OAuth 2.0 token exchange | ||||||
|  |      * spec. | ||||||
|  |      */ | ||||||
|  |     subjectTokenType?: string; | ||||||
|  |     /** | ||||||
|  |      * Google Security Token Service token exchange endpoint. | ||||||
|  |      */ | ||||||
|  |     tokenURL?: string; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * we enable the authenticated service account to impersonate another service account | ||||||
|  |  * | ||||||
|  |  * Pass the values to impersonate a service account of Google Cloud | ||||||
|  |  */ | ||||||
|  | export interface GCPImpersonateServiceAccountValues { | ||||||
|  |     /** | ||||||
|  |      * The impersonated service account email | ||||||
|  |      */ | ||||||
|  |     impersonateServiceAccount?: string; | ||||||
|  |     /** | ||||||
|  |      * Number of seconds the delegated credential should be valid | ||||||
|  |      */ | ||||||
|  |     lifetime?: number; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SQLAlchemy driver scheme options. | ||||||
|  |  */ | ||||||
|  | export enum BigqueryScheme { | ||||||
|  |     Bigquery = "bigquery", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service Type | ||||||
|  |  * | ||||||
|  |  * Service type. | ||||||
|  |  */ | ||||||
|  | export enum BigqueryType { | ||||||
|  |     BigQuery = "BigQuery", | ||||||
|  | } | ||||||
| @ -0,0 +1,73 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Databricks Connection Config | ||||||
|  |  */ | ||||||
|  | export interface DatabricksConnection { | ||||||
|  |     /** | ||||||
|  |      * Catalog of the data source(Example: hive_metastore). This is optional parameter, if you | ||||||
|  |      * would like to restrict the metadata reading to a single catalog. When left blank, | ||||||
|  |      * OpenMetadata Ingestion attempts to scan all the catalog. | ||||||
|  |      */ | ||||||
|  |     catalog?:             string; | ||||||
|  |     connectionArguments?: { [key: string]: any }; | ||||||
|  |     connectionOptions?:   { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * The maximum amount of time (in seconds) to wait for a successful connection to the data | ||||||
|  |      * source. If the connection attempt takes longer than this timeout period, an error will be | ||||||
|  |      * returned. | ||||||
|  |      */ | ||||||
|  |     connectionTimeout?: number; | ||||||
|  |     /** | ||||||
|  |      * Database Schema of the data source. This is optional parameter, if you would like to | ||||||
|  |      * restrict the metadata reading to a single schema. When left blank, OpenMetadata Ingestion | ||||||
|  |      * attempts to scan all the schemas. | ||||||
|  |      */ | ||||||
|  |     databaseSchema?: string; | ||||||
|  |     /** | ||||||
|  |      * Host and port of the Databricks service. | ||||||
|  |      */ | ||||||
|  |     hostPort: string; | ||||||
|  |     /** | ||||||
|  |      * Databricks compute resources URL. | ||||||
|  |      */ | ||||||
|  |     httpPath: string; | ||||||
|  |     /** | ||||||
|  |      * SQLAlchemy driver scheme options. | ||||||
|  |      */ | ||||||
|  |     scheme?: DatabricksScheme; | ||||||
|  |     /** | ||||||
|  |      * Generated Token to connect to Databricks. | ||||||
|  |      */ | ||||||
|  |     token: string; | ||||||
|  |     /** | ||||||
|  |      * Service Type | ||||||
|  |      */ | ||||||
|  |     type?: DatabricksType; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SQLAlchemy driver scheme options. | ||||||
|  |  */ | ||||||
|  | export enum DatabricksScheme { | ||||||
|  |     DatabricksConnector = "databricks+connector", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service Type | ||||||
|  |  * | ||||||
|  |  * Service type. | ||||||
|  |  */ | ||||||
|  | export enum DatabricksType { | ||||||
|  |     Databricks = "Databricks", | ||||||
|  | } | ||||||
| @ -0,0 +1,95 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Redshift  Connection Config | ||||||
|  |  */ | ||||||
|  | export interface RedshiftConnection { | ||||||
|  |     connectionArguments?: { [key: string]: any }; | ||||||
|  |     connectionOptions?:   { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * Initial Redshift database to connect to. If you want to ingest all databases, set | ||||||
|  |      * ingestAllDatabases to true. | ||||||
|  |      */ | ||||||
|  |     database: string; | ||||||
|  |     /** | ||||||
|  |      * Host and port of the Redshift service. | ||||||
|  |      */ | ||||||
|  |     hostPort: string; | ||||||
|  |     /** | ||||||
|  |      * Password to connect to Redshift. | ||||||
|  |      */ | ||||||
|  |     password?: string; | ||||||
|  |     /** | ||||||
|  |      * SQLAlchemy driver scheme options. | ||||||
|  |      */ | ||||||
|  |     scheme?:    RedshiftScheme; | ||||||
|  |     sslConfig?: Config; | ||||||
|  |     sslMode?:   SSLMode; | ||||||
|  |     /** | ||||||
|  |      * Service Type | ||||||
|  |      */ | ||||||
|  |     type?: RedshiftType; | ||||||
|  |     /** | ||||||
|  |      * Username to connect to Redshift. This user should have privileges to read all the | ||||||
|  |      * metadata in Redshift. | ||||||
|  |      */ | ||||||
|  |     username: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SQLAlchemy driver scheme options. | ||||||
|  |  */ | ||||||
|  | export enum RedshiftScheme { | ||||||
|  |     RedshiftPsycopg2 = "redshift+psycopg2", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Client SSL configuration | ||||||
|  |  * | ||||||
|  |  * OpenMetadata Client configured to validate SSL certificates. | ||||||
|  |  */ | ||||||
|  | export interface Config { | ||||||
|  |     /** | ||||||
|  |      * The CA certificate used for SSL validation. | ||||||
|  |      */ | ||||||
|  |     caCertificate?: string; | ||||||
|  |     /** | ||||||
|  |      * The SSL certificate used for client authentication. | ||||||
|  |      */ | ||||||
|  |     sslCertificate?: string; | ||||||
|  |     /** | ||||||
|  |      * The private key associated with the SSL certificate. | ||||||
|  |      */ | ||||||
|  |     sslKey?: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SSL Mode to connect to database. | ||||||
|  |  */ | ||||||
|  | export enum SSLMode { | ||||||
|  |     Allow = "allow", | ||||||
|  |     Disable = "disable", | ||||||
|  |     Prefer = "prefer", | ||||||
|  |     Require = "require", | ||||||
|  |     VerifyCA = "verify-ca", | ||||||
|  |     VerifyFull = "verify-full", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service Type | ||||||
|  |  * | ||||||
|  |  * Service type. | ||||||
|  |  */ | ||||||
|  | export enum RedshiftType { | ||||||
|  |     Redshift = "Redshift", | ||||||
|  | } | ||||||
| @ -0,0 +1,89 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * Snowflake Connection Config | ||||||
|  |  */ | ||||||
|  | export interface SnowflakeConnection { | ||||||
|  |     /** | ||||||
|  |      * If the Snowflake URL is https://xyz1234.us-east-1.gcp.snowflakecomputing.com, then the
 | ||||||
|  |      * account is xyz1234.us-east-1.gcp | ||||||
|  |      */ | ||||||
|  |     account: string; | ||||||
|  |     /** | ||||||
|  |      * Optional configuration for ingestion to keep the client session active in case the | ||||||
|  |      * ingestion process runs for longer durations. | ||||||
|  |      */ | ||||||
|  |     clientSessionKeepAlive?: boolean; | ||||||
|  |     connectionArguments?:    { [key: string]: any }; | ||||||
|  |     connectionOptions?:      { [key: string]: string }; | ||||||
|  |     /** | ||||||
|  |      * Database of the data source. This is optional parameter, if you would like to restrict | ||||||
|  |      * the metadata reading to a single database. When left blank, OpenMetadata Ingestion | ||||||
|  |      * attempts to scan all the databases. | ||||||
|  |      */ | ||||||
|  |     database?: string; | ||||||
|  |     /** | ||||||
|  |      * Password to connect to Snowflake. | ||||||
|  |      */ | ||||||
|  |     password?: string; | ||||||
|  |     /** | ||||||
|  |      * Connection to Snowflake instance via Private Key | ||||||
|  |      */ | ||||||
|  |     privateKey?: string; | ||||||
|  |     /** | ||||||
|  |      * Session query tag used to monitor usage on snowflake. To use a query tag snowflake user | ||||||
|  |      * should have enough privileges to alter the session. | ||||||
|  |      */ | ||||||
|  |     queryTag?: string; | ||||||
|  |     /** | ||||||
|  |      * Snowflake Role. | ||||||
|  |      */ | ||||||
|  |     role?: string; | ||||||
|  |     /** | ||||||
|  |      * SQLAlchemy driver scheme options. | ||||||
|  |      */ | ||||||
|  |     scheme?: SnowflakeScheme; | ||||||
|  |     /** | ||||||
|  |      * Snowflake Passphrase Key used with Private Key | ||||||
|  |      */ | ||||||
|  |     snowflakePrivatekeyPassphrase?: string; | ||||||
|  |     /** | ||||||
|  |      * Service Type | ||||||
|  |      */ | ||||||
|  |     type?: SnowflakeType; | ||||||
|  |     /** | ||||||
|  |      * Username to connect to Snowflake. This user should have privileges to read all the | ||||||
|  |      * metadata in Snowflake. | ||||||
|  |      */ | ||||||
|  |     username: string; | ||||||
|  |     /** | ||||||
|  |      * Snowflake warehouse. | ||||||
|  |      */ | ||||||
|  |     warehouse: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * SQLAlchemy driver scheme options. | ||||||
|  |  */ | ||||||
|  | export enum SnowflakeScheme { | ||||||
|  |     Snowflake = "snowflake", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service Type | ||||||
|  |  * | ||||||
|  |  * Service type. | ||||||
|  |  */ | ||||||
|  | export enum SnowflakeType { | ||||||
|  |     Snowflake = "Snowflake", | ||||||
|  | } | ||||||
| @ -35,6 +35,11 @@ export interface CreateAppRequest { | |||||||
|      * Fully qualified names of the domains the Application belongs to. |      * Fully qualified names of the domains the Application belongs to. | ||||||
|      */ |      */ | ||||||
|     domains?: string[]; |     domains?: string[]; | ||||||
|  |     /** | ||||||
|  |      * The ingestion agent responsible for executing the ingestion pipeline. It will be defined | ||||||
|  |      * at runtime based on the Ingestion Agent of the service. | ||||||
|  |      */ | ||||||
|  |     ingestionRunner?: EntityReference; | ||||||
|     /** |     /** | ||||||
|      * Name of the Application. |      * Name of the Application. | ||||||
|      */ |      */ | ||||||
| @ -70,14 +75,17 @@ export enum ScheduleTimeline { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Owners of this workflow. |  * The ingestion agent responsible for executing the ingestion pipeline. It will be defined | ||||||
|  |  * at runtime based on the Ingestion Agent of the service. | ||||||
|  * |  * | ||||||
|  * This schema defines the EntityReferenceList type used for referencing an entity. |  * This schema defines the EntityReference type used for referencing an entity. | ||||||
|  * EntityReference is used for capturing relationships from one entity to another. For |  * EntityReference is used for capturing relationships from one entity to another. For | ||||||
|  * example, a table has an attribute called database of type EntityReference that captures |  * example, a table has an attribute called database of type EntityReference that captures | ||||||
|  * the relationship of a table `belongs to a` database. |  * the relationship of a table `belongs to a` database. | ||||||
|  * |  * | ||||||
|  * This schema defines the EntityReference type used for referencing an entity. |  * Owners of this workflow. | ||||||
|  |  * | ||||||
|  |  * This schema defines the EntityReferenceList type used for referencing an entity. | ||||||
|  * EntityReference is used for capturing relationships from one entity to another. For |  * EntityReference is used for capturing relationships from one entity to another. For | ||||||
|  * example, a table has an attribute called database of type EntityReference that captures |  * example, a table has an attribute called database of type EntityReference that captures | ||||||
|  * the relationship of a table `belongs to a` database. |  * the relationship of a table `belongs to a` database. | ||||||
|  | |||||||
| @ -135,6 +135,10 @@ export interface AppMarketPlaceDefinition { | |||||||
|      * Support Email for the application |      * Support Email for the application | ||||||
|      */ |      */ | ||||||
|     supportEmail?: string; |     supportEmail?: string; | ||||||
|  |     /** | ||||||
|  |      * If the app support execution through the external runner. | ||||||
|  |      */ | ||||||
|  |     supportsIngestionRunner?: boolean; | ||||||
|     /** |     /** | ||||||
|      * If the app run can be interrupted as part of the execution. |      * If the app run can be interrupted as part of the execution. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -109,6 +109,10 @@ export interface CreateAppMarketPlaceDefinitionReq { | |||||||
|      * Support Email for the application |      * Support Email for the application | ||||||
|      */ |      */ | ||||||
|     supportEmail?: string; |     supportEmail?: string; | ||||||
|  |     /** | ||||||
|  |      * If the app support execution through the external runner. | ||||||
|  |      */ | ||||||
|  |     supportsIngestionRunner?: boolean; | ||||||
|     /** |     /** | ||||||
|      * If the app run can be interrupted as part of the execution. |      * If the app run can be interrupted as part of the execution. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -223,6 +223,8 @@ export interface FieldChange { | |||||||
|  * Reference to the data contract that this test suite is associated with. |  * Reference to the data contract that this test suite is associated with. | ||||||
|  * |  * | ||||||
|  * DEPRECATED in 1.6.2: Use 'basicEntityReference'. |  * DEPRECATED in 1.6.2: Use 'basicEntityReference'. | ||||||
|  |  * | ||||||
|  |  * Link to the ingestion pipeline that ingested this entity. | ||||||
|  */ |  */ | ||||||
| export interface EntityReference { | export interface EntityReference { | ||||||
|     /** |     /** | ||||||
| @ -557,6 +559,10 @@ export interface TestSuite { | |||||||
|      * Change that lead to this version of the entity. |      * Change that lead to this version of the entity. | ||||||
|      */ |      */ | ||||||
|     incrementalChangeDescription?: ChangeDescription; |     incrementalChangeDescription?: ChangeDescription; | ||||||
|  |     /** | ||||||
|  |      * Link to the ingestion pipeline that ingested this entity. | ||||||
|  |      */ | ||||||
|  |     ingestionRunner?: EntityReference; | ||||||
|     /** |     /** | ||||||
|      * Indicates if the test suite is inherited from a parent entity. |      * Indicates if the test suite is inherited from a parent entity. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -78,6 +78,10 @@ export interface TestSuite { | |||||||
|      * Change that lead to this version of the entity. |      * Change that lead to this version of the entity. | ||||||
|      */ |      */ | ||||||
|     incrementalChangeDescription?: ChangeDescription; |     incrementalChangeDescription?: ChangeDescription; | ||||||
|  |     /** | ||||||
|  |      * Link to the ingestion pipeline that ingested this entity. | ||||||
|  |      */ | ||||||
|  |     ingestionRunner?: EntityReference; | ||||||
|     /** |     /** | ||||||
|      * Indicates if the test suite is inherited from a parent entity. |      * Indicates if the test suite is inherited from a parent entity. | ||||||
|      */ |      */ | ||||||
| @ -151,6 +155,8 @@ export interface TestSuite { | |||||||
|  * the relationship of a table `belongs to a` database. |  * the relationship of a table `belongs to a` database. | ||||||
|  * |  * | ||||||
|  * DEPRECATED in 1.6.2: Use 'basicEntityReference'. |  * DEPRECATED in 1.6.2: Use 'basicEntityReference'. | ||||||
|  |  * | ||||||
|  |  * Link to the ingestion pipeline that ingested this entity. | ||||||
|  */ |  */ | ||||||
| export interface EntityReference { | export interface EntityReference { | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -0,0 +1,311 @@ | |||||||
|  | /* | ||||||
|  |  *  Copyright 2025 Collate. | ||||||
|  |  *  Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  *  you may not use this file except in compliance with the License. | ||||||
|  |  *  You may obtain a copy of the License at | ||||||
|  |  *  http://www.apache.org/licenses/LICENSE-2.0
 | ||||||
|  |  *  Unless required by applicable law or agreed to in writing, software | ||||||
|  |  *  distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  *  See the License for the specific language governing permissions and | ||||||
|  |  *  limitations under the License. | ||||||
|  |  */ | ||||||
|  | /** | ||||||
|  |  * This schema defines the type to capture the full table Entity profile. | ||||||
|  |  */ | ||||||
|  | export interface EntityProfile { | ||||||
|  |     /** | ||||||
|  |      * Reference to the entity for which this profile is created. | ||||||
|  |      */ | ||||||
|  |     entityReference: EntityReference; | ||||||
|  |     /** | ||||||
|  |      * Unique identifier of this profile instance | ||||||
|  |      */ | ||||||
|  |     id: string; | ||||||
|  |     /** | ||||||
|  |      * Profile data specific to the entity type. | ||||||
|  |      */ | ||||||
|  |     profileData: Profile; | ||||||
|  |     /** | ||||||
|  |      * type of profile | ||||||
|  |      */ | ||||||
|  |     profileType?: ProfileTypeEnum; | ||||||
|  |     /** | ||||||
|  |      * Data one which test case result is taken. | ||||||
|  |      */ | ||||||
|  |     timestamp: number; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Reference to the entity for which this profile is created. | ||||||
|  |  * | ||||||
|  |  * This schema defines the EntityReference type used for referencing an entity. | ||||||
|  |  * EntityReference is used for capturing relationships from one entity to another. For | ||||||
|  |  * example, a table has an attribute called database of type EntityReference that captures | ||||||
|  |  * the relationship of a table `belongs to a` database. | ||||||
|  |  */ | ||||||
|  | export interface EntityReference { | ||||||
|  |     /** | ||||||
|  |      * If true the entity referred to has been soft-deleted. | ||||||
|  |      */ | ||||||
|  |     deleted?: boolean; | ||||||
|  |     /** | ||||||
|  |      * Optional description of entity. | ||||||
|  |      */ | ||||||
|  |     description?: string; | ||||||
|  |     /** | ||||||
|  |      * Display Name that identifies this entity. | ||||||
|  |      */ | ||||||
|  |     displayName?: string; | ||||||
|  |     /** | ||||||
|  |      * Fully qualified name of the entity instance. For entities such as tables, databases | ||||||
|  |      * fullyQualifiedName is returned in this field. For entities that don't have name hierarchy | ||||||
|  |      * such as `user` and `team` this will be same as the `name` field. | ||||||
|  |      */ | ||||||
|  |     fullyQualifiedName?: string; | ||||||
|  |     /** | ||||||
|  |      * Link to the entity resource. | ||||||
|  |      */ | ||||||
|  |     href?: string; | ||||||
|  |     /** | ||||||
|  |      * Unique identifier that identifies an entity instance. | ||||||
|  |      */ | ||||||
|  |     id: string; | ||||||
|  |     /** | ||||||
|  |      * If true the relationship indicated by this entity reference is inherited from the parent | ||||||
|  |      * entity. | ||||||
|  |      */ | ||||||
|  |     inherited?: boolean; | ||||||
|  |     /** | ||||||
|  |      * Name of the entity instance. | ||||||
|  |      */ | ||||||
|  |     name?: string; | ||||||
|  |     /** | ||||||
|  |      * Entity type/class name - Examples: `database`, `table`, `metrics`, `databaseService`, | ||||||
|  |      * `dashboardService`... | ||||||
|  |      */ | ||||||
|  |     type: string; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Profile data specific to the entity type. | ||||||
|  |  * | ||||||
|  |  * This schema defines the type to capture the table's data profile. | ||||||
|  |  * | ||||||
|  |  * This schema defines the type to capture the table's column profile. | ||||||
|  |  * | ||||||
|  |  * This schema defines the System Profile object holding profile data from system tables. | ||||||
|  |  */ | ||||||
|  | export interface Profile { | ||||||
|  |     /** | ||||||
|  |      * No.of columns in the table. | ||||||
|  |      */ | ||||||
|  |     columnCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Table creation time. | ||||||
|  |      */ | ||||||
|  |     createDateTime?: Date; | ||||||
|  |     /** | ||||||
|  |      * Custom Metrics profile list bound to a column. | ||||||
|  |      */ | ||||||
|  |     customMetrics?: CustomMetricProfile[]; | ||||||
|  |     /** | ||||||
|  |      * Percentage of data or no. of rows we want to execute the profiler and tests on | ||||||
|  |      */ | ||||||
|  |     profileSample?:     number; | ||||||
|  |     profileSampleType?: ProfileSampleType; | ||||||
|  |     /** | ||||||
|  |      * No.of rows in the table. This is always executed on the whole table. | ||||||
|  |      */ | ||||||
|  |     rowCount?:           number; | ||||||
|  |     samplingMethodType?: SamplingMethodType; | ||||||
|  |     /** | ||||||
|  |      * Table size in GB | ||||||
|  |      */ | ||||||
|  |     sizeInByte?: number; | ||||||
|  |     /** | ||||||
|  |      * Timestamp on which profile is taken. | ||||||
|  |      */ | ||||||
|  |     timestamp?: number; | ||||||
|  |     /** | ||||||
|  |      * Number of values that contain distinct values. | ||||||
|  |      */ | ||||||
|  |     distinctCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Proportion of distinct values in a column. | ||||||
|  |      */ | ||||||
|  |     distinctProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of Rows that contain duplicates in a column. | ||||||
|  |      */ | ||||||
|  |     duplicateCount?: number; | ||||||
|  |     /** | ||||||
|  |      * First quartile of a column. | ||||||
|  |      */ | ||||||
|  |     firstQuartile?: number; | ||||||
|  |     /** | ||||||
|  |      * Histogram of a column. | ||||||
|  |      */ | ||||||
|  |     histogram?: any[] | boolean | HistogramClass | number | number | null | string; | ||||||
|  |     /** | ||||||
|  |      * Inter quartile range of a column. | ||||||
|  |      */ | ||||||
|  |     interQuartileRange?: number; | ||||||
|  |     /** | ||||||
|  |      * Maximum value in a column. | ||||||
|  |      */ | ||||||
|  |     max?: number | string; | ||||||
|  |     /** | ||||||
|  |      * Maximum string length in a column. | ||||||
|  |      */ | ||||||
|  |     maxLength?: number; | ||||||
|  |     /** | ||||||
|  |      * Avg value in a column. | ||||||
|  |      */ | ||||||
|  |     mean?: number; | ||||||
|  |     /** | ||||||
|  |      * Median of a column. | ||||||
|  |      */ | ||||||
|  |     median?: number; | ||||||
|  |     /** | ||||||
|  |      * Minimum value in a column. | ||||||
|  |      */ | ||||||
|  |     min?: number | string; | ||||||
|  |     /** | ||||||
|  |      * Minimum string length in a column. | ||||||
|  |      */ | ||||||
|  |     minLength?: number; | ||||||
|  |     /** | ||||||
|  |      * Missing count is calculated by subtracting valuesCount - validCount. | ||||||
|  |      */ | ||||||
|  |     missingCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Missing Percentage is calculated by taking percentage of validCount/valuesCount. | ||||||
|  |      */ | ||||||
|  |     missingPercentage?: number; | ||||||
|  |     /** | ||||||
|  |      * Column Name. | ||||||
|  |      */ | ||||||
|  |     name?: string; | ||||||
|  |     /** | ||||||
|  |      * Non parametric skew of a column. | ||||||
|  |      */ | ||||||
|  |     nonParametricSkew?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of null values in a column. | ||||||
|  |      */ | ||||||
|  |     nullCount?: number; | ||||||
|  |     /** | ||||||
|  |      * No.of null value proportion in columns. | ||||||
|  |      */ | ||||||
|  |     nullProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * Standard deviation of a column. | ||||||
|  |      */ | ||||||
|  |     stddev?: number; | ||||||
|  |     /** | ||||||
|  |      * Median value in a column. | ||||||
|  |      */ | ||||||
|  |     sum?: number; | ||||||
|  |     /** | ||||||
|  |      * First quartile of a column. | ||||||
|  |      */ | ||||||
|  |     thirdQuartile?: number; | ||||||
|  |     /** | ||||||
|  |      * No. of unique values in the column. | ||||||
|  |      */ | ||||||
|  |     uniqueCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Proportion of number of unique values in a column. | ||||||
|  |      */ | ||||||
|  |     uniqueProportion?: number; | ||||||
|  |     /** | ||||||
|  |      * Total count of valid values in this column. | ||||||
|  |      */ | ||||||
|  |     validCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Total count of the values in this column. | ||||||
|  |      */ | ||||||
|  |     valuesCount?: number; | ||||||
|  |     /** | ||||||
|  |      * Percentage of values in this column with respect to row count. | ||||||
|  |      */ | ||||||
|  |     valuesPercentage?: number; | ||||||
|  |     /** | ||||||
|  |      * Variance of a column. | ||||||
|  |      */ | ||||||
|  |     variance?: number; | ||||||
|  |     /** | ||||||
|  |      * Operation performed. | ||||||
|  |      */ | ||||||
|  |     operation?: DMLOperationType; | ||||||
|  |     /** | ||||||
|  |      * Number of rows affected. | ||||||
|  |      */ | ||||||
|  |     rowsAffected?: number; | ||||||
|  |     [property: string]: any; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Profiling results of a Custom Metric. | ||||||
|  |  */ | ||||||
|  | export interface CustomMetricProfile { | ||||||
|  |     /** | ||||||
|  |      * Custom metric name. | ||||||
|  |      */ | ||||||
|  |     name?: string; | ||||||
|  |     /** | ||||||
|  |      * Profiling results for the metric. | ||||||
|  |      */ | ||||||
|  |     value?: number; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export interface HistogramClass { | ||||||
|  |     /** | ||||||
|  |      * Boundaries of Histogram. | ||||||
|  |      */ | ||||||
|  |     boundaries?: any[]; | ||||||
|  |     /** | ||||||
|  |      * Frequencies of Histogram. | ||||||
|  |      */ | ||||||
|  |     frequencies?: any[]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Operation performed. | ||||||
|  |  * | ||||||
|  |  * This schema defines the type of DML operation. | ||||||
|  |  */ | ||||||
|  | export enum DMLOperationType { | ||||||
|  |     Delete = "DELETE", | ||||||
|  |     Insert = "INSERT", | ||||||
|  |     Update = "UPDATE", | ||||||
|  |     Write = "WRITE", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Type of Profile Sample (percentage or rows) | ||||||
|  |  */ | ||||||
|  | export enum ProfileSampleType { | ||||||
|  |     Percentage = "PERCENTAGE", | ||||||
|  |     Rows = "ROWS", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Type of Sampling Method (BERNOULLI or SYSTEM) | ||||||
|  |  */ | ||||||
|  | export enum SamplingMethodType { | ||||||
|  |     Bernoulli = "BERNOULLI", | ||||||
|  |     System = "SYSTEM", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * type of profile | ||||||
|  |  * | ||||||
|  |  * profile type | ||||||
|  |  */ | ||||||
|  | export enum ProfileTypeEnum { | ||||||
|  |     Column = "column", | ||||||
|  |     System = "system", | ||||||
|  |     Table = "table", | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Teddy
						Teddy