mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-30 18:17:53 +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