{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "id": "https://json.schemastore.org/datahub-ingestion",
    "title": "Datahub Ingestion",
    "description": "Root schema of Datahub Ingestion",
    "definitions": {
        "console_sink": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "console"
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "file_sink": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "file"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/file_sink_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "file_sink_config": {
            "type": "object",
            "properties": {
                "filename": {
                    "description": "Path to file to write to.",
                    "type": "string"
                }
            },
            "required": [
                "filename"
            ],
            "additionalProperties": false
        },
        "datahub_rest_sink": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "datahub-rest"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/datahub_rest_sink_config"
                }
            },
            "required": [
                "type",
                "config"
            ],
            "additionalProperties": false
        },
        "datahub_rest_sink_config": {
            "type": "object",
            "properties": {
                "ca_certificate_path": {
                    "type": "string",
                    "description": "Path to server's CA certificate for verification of HTTPS communications"
                },
                "client_certificate_path": {
                    "type": "string",
                    "descritption": "Path to client's CA certificate for HTTPS communications"
                },
                "max_threads": {
                    "type": "number",
                    "description": "Experimental: Max parallelism for REST API calls",
                    "default": 15
                },
                "retry_status_codes": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "description": "Retry HTTP request also on these status codes",
                    "default": [
                        429,
                        502,
                        503,
                        504
                    ]
                },
                "server": {
                    "type": "string",
                    "description": "URL of DataHub GMS endpoint."
                },
                "timeout_sec": {
                    "type": "number",
                    "description": "Per-HTTP request timeout.",
                    "default": 30
                },
                "token": {
                    "type": "string",
                    "description": "Bearer token used for authentication."
                },
                "extra_headers": {
                    "type": "string",
                    "description": "Extra headers which will be added to the request."
                },
                "disable_ssl_verification": {
                    "type": "boolean",
                    "description": "Disable SSL verification for HTTPS communications.",
                    "default": false
                }
            },
            "required": [
                "server"
            ],
            "additionalProperties": false
        },
        "datahub_kafka_sink": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "datahub-kafka"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/datahub_kafka_sink_config"
                }
            },
            "required": [
                "type",
                "config"
            ],
            "additionalProperties": false
        },
        "datahub_kafka_sink_config": {
            "type": "object",
            "properties": {
                "connection": {
                    "type": "object",
                    "properties": {
                        "bootstrap": {
                            "type": "string",
                            "description": "Kafka bootstrap URL.",
                            "default": "localhost:9092"
                        },
                        "producer_config": {
                            "type": "object",
                            "description": "Passed to https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#confluent_kafka.SerializingProducer"
                        },
                        "schema_registry_url": {
                            "type": "string",
                            "description": "URL of schema registry being used.",
                            "default": "http://localhost:8081"
                        },
                        "schema_registry_config": {
                            "type": "object",
                            "description": "Passed to https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#confluent_kafka.schema_registry.SchemaRegistryClient"
                        }
                    },
                    "additionalProperties": false,
                    "required": [
                        "bootstrap",
                        "schema_registry_url"
                    ]
                },
                "topic_routes": {
                    "type": "object",
                    "properties": {
                        "MetadataChangeEvent": {
                            "type": "string",
                            "description": "Overridden Kafka topic name for the MetadataChangeEvent",
                            "default": "MetadataChangeEvent"
                        },
                        "MetadataChangeProposal": {
                            "type": "string",
                            "description": "Overridden Kafka topic name for the MetadataChangeProposal",
                            "default": "MetadataChangeProposal"
                        }
                    },
                    "additionalProperties": false
                }
            },
            "required": [
                "connection"
            ],
            "additionalProperties": false
        },
        "mysql": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "mysql"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/mysql_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "mysql_config": {
            "title": "MySQLConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Deprecated in favour of database_pattern.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "MySQL host URL.",
                    "default": "localhost:3306",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "mysql+pymysql",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "oracle": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "oracle"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/oracle_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "oracle_config": {
            "title": "OracleConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "If using, omit `service_name`.",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "description": "Will be set automatically to default value.",
                    "default": "oracle+cx_oracle",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "service_name": {
                    "title": "Service Name",
                    "description": "Oracle service name. If using, omit `database`.",
                    "type": "string"
                },
                "add_database_name_to_urn": {
                    "title": "Add Database Name To Urn",
                    "description": "Add oracle database name to urn, default urn is schema.table",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "powerbi-report-server": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "powerbi-report-server"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/powerbi-report-server_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "powerbi-report-server_config": {
            "title": "PowerBiReportServerDashboardSourceConfig",
            "description": "Any source that produces dataset urns in a single environment should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Windows account username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Windows account password",
                    "type": "string"
                },
                "workstation_name": {
                    "title": "Workstation Name",
                    "description": "Workstation name",
                    "default": "localhost",
                    "type": "string"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "Power BI Report Server host URL",
                    "type": "string"
                },
                "server_alias": {
                    "title": "Server Alias",
                    "description": "Alias for Power BI Report Server host URL",
                    "default": "",
                    "type": "string"
                },
                "graphql_url": {
                    "title": "Graphql Url",
                    "description": "[deprecated] Not used",
                    "type": "string"
                },
                "report_virtual_directory_name": {
                    "title": "Report Virtual Directory Name",
                    "description": "Report Virtual Directory URL name",
                    "type": "string"
                },
                "report_server_virtual_directory_name": {
                    "title": "Report Server Virtual Directory Name",
                    "description": "Report Server Virtual Directory URL name",
                    "type": "string"
                },
                "extract_ownership": {
                    "title": "Extract Ownership",
                    "description": "Whether ownership should be ingested",
                    "default": true,
                    "type": "boolean"
                },
                "ownership_type": {
                    "title": "Ownership Type",
                    "description": "Ownership type of owner",
                    "default": "NONE",
                    "type": "string"
                },
                "platform_name": {
                    "title": "Platform Name",
                    "default": "powerbi",
                    "type": "string"
                },
                "platform_urn": {
                    "title": "Platform Urn",
                    "default": "urn:li:dataPlatform:powerbi",
                    "type": "string"
                },
                "report_pattern": {
                    "title": "Report Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "chart_pattern": {
                    "title": "Chart Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                }
            },
            "required": [
                "username",
                "password",
                "host_port",
                "report_virtual_directory_name",
                "report_server_virtual_directory_name"
            ],
            "additionalProperties": false
        },
        "datahub": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "datahub"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/datahub_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "datahub_config": {
            "title": "DataHubSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Stateful Ingestion Config",
                    "default": {
                        "enabled": true,
                        "max_checkpoint_state_size": 16777216,
                        "state_provider": {
                            "type": "datahub",
                            "config": null
                        },
                        "ignore_old_state": false,
                        "ignore_new_state": false
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulIngestionConfig"
                        }
                    ]
                },
                "mysql_connection": {
                    "title": "Mysql Connection",
                    "description": "MySQL connection config",
                    "default": {
                        "username": null,
                        "host_port": "localhost:3306",
                        "database": null,
                        "database_alias": null,
                        "scheme": "mysql+pymysql",
                        "sqlalchemy_uri": null,
                        "options": {}
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/MySQLConnectionConfig"
                        }
                    ]
                },
                "kafka_connection": {
                    "title": "Kafka Connection",
                    "description": "Kafka connection config",
                    "default": {
                        "bootstrap": "localhost:9092",
                        "schema_registry_url": "http://localhost:8080/schema-registry/api/",
                        "schema_registry_config": {},
                        "client_timeout_seconds": 60,
                        "consumer_config": {}
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/KafkaConsumerConnectionConfig"
                        }
                    ]
                },
                "include_all_versions": {
                    "title": "Include All Versions",
                    "description": "If enabled, include all versions of each aspect. Otherwise, only include the latest version of each aspect.",
                    "default": false,
                    "type": "boolean"
                },
                "mysql_batch_size": {
                    "title": "Mysql Batch Size",
                    "description": "Number of records to fetch from MySQL at a time",
                    "default": 10000,
                    "type": "integer"
                },
                "mysql_table_name": {
                    "title": "Mysql Table Name",
                    "description": "Name of MySQL table containing all versioned aspects",
                    "default": "metadata_aspect_v2",
                    "type": "string"
                },
                "kafka_topic_name": {
                    "title": "Kafka Topic Name",
                    "description": "Name of kafka topic containing timeseries MCLs",
                    "default": "MetadataChangeLog_Timeseries_v1",
                    "type": "string"
                },
                "commit_state_interval": {
                    "title": "Commit State Interval",
                    "description": "Number of records to process before committing state",
                    "default": 1000,
                    "type": "integer"
                },
                "commit_with_parse_errors": {
                    "title": "Commit With Parse Errors",
                    "description": "Whether to update createdon timestamp and kafka offset despite parse errors. Enable if you want to ignore the errors.",
                    "default": false,
                    "type": "boolean"
                }
            }
        },
        "bigquery": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "bigquery"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/bigquery_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "bigquery_config": {
            "title": "BigQueryV2Config",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "store_last_profiling_timestamps": {
                    "title": "Store Last Profiling Timestamps",
                    "description": "Enable storing last profile timestamp in store.",
                    "default": false,
                    "type": "boolean"
                },
                "incremental_lineage": {
                    "title": "Incremental Lineage",
                    "description": "When enabled, emits lineage as incremental to existing lineage already in DataHub. When disabled, re-states lineage on each run.",
                    "default": true,
                    "type": "boolean"
                },
                "sql_parser_use_external_process": {
                    "title": "Sql Parser Use External Process",
                    "description": "When enabled, sql parser will run in isolated in a separate process. This can affect processing time but can protect from sql parser's mem leak.",
                    "default": false,
                    "type": "boolean"
                },
                "store_last_lineage_extraction_timestamp": {
                    "title": "Store Last Lineage Extraction Timestamp",
                    "description": "Enable checking last lineage extraction date in store.",
                    "default": false,
                    "type": "boolean"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "store_last_usage_extraction_timestamp": {
                    "title": "Store Last Usage Extraction Timestamp",
                    "description": "Enable checking last usage timestamp in store.",
                    "default": true,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "rate_limit": {
                    "title": "Rate Limit",
                    "description": "Should we rate limit requests made to API.",
                    "default": false,
                    "type": "boolean"
                },
                "requests_per_min": {
                    "title": "Requests Per Min",
                    "description": "Used to control number of API calls made per min. Only used when `rate_limit` is set to `True`.",
                    "default": 60,
                    "type": "integer"
                },
                "temp_table_dataset_prefix": {
                    "title": "Temp Table Dataset Prefix",
                    "description": "If you are creating temp tables in a dataset with a particular prefix you can use this config to set the prefix for the dataset. This is to support workflows from before bigquery's introduction of temp tables. By default we use `_` because of datasets that begin with an underscore are hidden by default https://cloud.google.com/bigquery/docs/datasets#dataset-naming.",
                    "default": "_",
                    "type": "string"
                },
                "sharded_table_pattern": {
                    "title": "Sharded Table Pattern",
                    "description": "The regex pattern to match sharded tables and group as one table. This is a very low level config parameter, only change if you know what you are doing, ",
                    "default": "((.+)[_$])?(\\d{8})$",
                    "deprecated": true,
                    "type": "string"
                },
                "project_id_pattern": {
                    "title": "Project Id Pattern",
                    "description": "Regex patterns for project_id to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "usage": {
                    "title": "Usage",
                    "description": "Usage related configs",
                    "default": {
                        "bucket_duration": "DAY",
                        "end_time": "2023-08-15T22:02:13.573606+00:00",
                        "start_time": "2023-08-14T00:00:00+00:00",
                        "top_n_queries": 10,
                        "user_email_pattern": {
                            "allow": [
                                ".*"
                            ],
                            "deny": [],
                            "ignoreCase": true
                        },
                        "include_operational_stats": true,
                        "include_read_operational_stats": false,
                        "format_sql_queries": false,
                        "include_top_n_queries": true,
                        "max_query_duration": 900.0,
                        "apply_view_usage_to_tables": false
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/BigQueryUsageConfig"
                        }
                    ]
                },
                "include_usage_statistics": {
                    "title": "Include Usage Statistics",
                    "description": "Generate usage statistic",
                    "default": true,
                    "type": "boolean"
                },
                "capture_table_label_as_tag": {
                    "title": "Capture Table Label As Tag",
                    "description": "Capture BigQuery table labels as DataHub tag",
                    "default": false,
                    "type": "boolean"
                },
                "capture_dataset_label_as_tag": {
                    "title": "Capture Dataset Label As Tag",
                    "description": "Capture BigQuery dataset labels as DataHub tag",
                    "default": false,
                    "type": "boolean"
                },
                "dataset_pattern": {
                    "title": "Dataset Pattern",
                    "description": "Regex patterns for dataset to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "match_fully_qualified_names": {
                    "title": "Match Fully Qualified Names",
                    "description": "Whether `dataset_pattern` is matched against fully qualified dataset name `<project_id>.<dataset_name>`.",
                    "default": false,
                    "type": "boolean"
                },
                "include_external_url": {
                    "title": "Include External Url",
                    "description": "Whether to populate BigQuery Console url to Datasets/Tables",
                    "default": true,
                    "type": "boolean"
                },
                "debug_include_full_payloads": {
                    "title": "Debug Include Full Payloads",
                    "description": "Include full payload into events. It is only for debugging and internal use.",
                    "default": false,
                    "type": "boolean"
                },
                "number_of_datasets_process_in_batch_if_profiling_enabled": {
                    "title": "Number Of Datasets Process In Batch If Profiling Enabled",
                    "description": "Number of partitioned table queried in batch when getting metadata. This is a low level config property which should be touched with care. This restriction is needed because we query partitions system view which throws error if we try to touch too many tables.",
                    "default": 200,
                    "type": "integer"
                },
                "column_limit": {
                    "title": "Column Limit",
                    "description": "Maximum number of columns to process in a table. This is a low level config property which should be touched with care. This restriction is needed because excessively wide tables can result in failure to ingest the schema.",
                    "default": 300,
                    "type": "integer"
                },
                "project_id": {
                    "title": "Project Id",
                    "description": "[deprecated] Use project_id_pattern or project_ids instead.",
                    "type": "string"
                },
                "project_ids": {
                    "title": "Project Ids",
                    "description": "Ingests specified project_ids. Use this property if you want to specify what projects to ingest or don't want to give project resourcemanager.projects.list to your service account. Overrides `project_id_pattern`.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "project_on_behalf": {
                    "title": "Project On Behalf",
                    "description": "[Advanced] The BigQuery project in which queries are executed. Will be passed when creating a job. If not passed, falls back to the project associated with the service account.",
                    "type": "string"
                },
                "lineage_use_sql_parser": {
                    "title": "Lineage Use Sql Parser",
                    "description": "Use sql parser to resolve view/table lineage.",
                    "default": true,
                    "type": "boolean"
                },
                "lineage_parse_view_ddl": {
                    "title": "Lineage Parse View Ddl",
                    "description": "Sql parse view ddl to get lineage.",
                    "default": true,
                    "type": "boolean"
                },
                "lineage_sql_parser_use_raw_names": {
                    "title": "Lineage Sql Parser Use Raw Names",
                    "description": "This parameter ignores the lowercase pattern stipulated in the SQLParser. NOTE: Ignored if lineage_use_sql_parser is False.",
                    "default": false,
                    "type": "boolean"
                },
                "extract_column_lineage": {
                    "title": "Extract Column Lineage",
                    "description": "If enabled, generate column level lineage. Requires lineage_use_sql_parser to be enabled. This and `incremental_lineage` cannot both be enabled.",
                    "default": false,
                    "type": "boolean"
                },
                "extract_lineage_from_catalog": {
                    "title": "Extract Lineage From Catalog",
                    "description": "This flag enables the data lineage extraction from Data Lineage API exposed by Google Data Catalog. NOTE: This extractor can't build views lineage. It's recommended to enable the view's DDL parsing. Read the docs to have more information about: https://cloud.google.com/data-catalog/docs/concepts/about-data-lineage",
                    "default": false,
                    "type": "boolean"
                },
                "convert_urns_to_lowercase": {
                    "title": "Convert Urns To Lowercase",
                    "description": "Convert urns to lowercase.",
                    "default": false,
                    "type": "boolean"
                },
                "enable_legacy_sharded_table_support": {
                    "title": "Enable Legacy Sharded Table Support",
                    "description": "Use the legacy sharded table urn suffix added.",
                    "default": true,
                    "type": "boolean"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "bigquery",
                    "type": "string"
                },
                "log_page_size": {
                    "title": "Log Page Size",
                    "description": "The number of log item will be queried per page for lineage collection",
                    "default": 1000,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "credential": {
                    "title": "Credential",
                    "description": "BigQuery credential informations",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BigQueryCredential"
                        }
                    ]
                },
                "extra_client_options": {
                    "title": "Extra Client Options",
                    "description": "Additional options to pass to google.cloud.logging_v2.client.Client.",
                    "default": {},
                    "type": "object"
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Option to enable/disable lineage generation. Is enabled by default.",
                    "default": true,
                    "type": "boolean"
                },
                "max_query_duration": {
                    "title": "Max Query Duration",
                    "description": "Correction to pad start_time and end_time with. For handling the case where the read happens within our time range but the query completion event is delayed and happens after the configured end time.",
                    "default": 900.0,
                    "type": "number",
                    "format": "time-delta"
                },
                "bigquery_audit_metadata_datasets": {
                    "title": "Bigquery Audit Metadata Datasets",
                    "description": "A list of datasets that contain a table named cloudaudit_googleapis_com_data_access which contain BigQuery audit logs, specifically, those containing BigQueryAuditMetadata. It is recommended that the project of the dataset is also specified, for example, projectA.datasetB.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "use_exported_bigquery_audit_metadata": {
                    "title": "Use Exported Bigquery Audit Metadata",
                    "description": "When configured, use BigQueryAuditMetadata in bigquery_audit_metadata_datasets to compute lineage information.",
                    "default": false,
                    "type": "boolean"
                },
                "use_date_sharded_audit_log_tables": {
                    "title": "Use Date Sharded Audit Log Tables",
                    "description": "Whether to read date sharded tables or time partitioned tables when extracting usage from exported audit logs.",
                    "default": false,
                    "type": "boolean"
                },
                "upstream_lineage_in_report": {
                    "title": "Upstream Lineage In Report",
                    "description": "Useful for debugging lineage information. Set to True to see the raw lineage created internally.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "okta": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "okta"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/okta_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "okta_config": {
            "title": "OktaConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Okta Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "okta_domain": {
                    "title": "Okta Domain",
                    "description": "The location of your Okta Domain, without a protocol. Can be found in Okta Developer console. e.g. dev-33231928.okta.com",
                    "type": "string"
                },
                "okta_api_token": {
                    "title": "Okta Api Token",
                    "description": "An API token generated for the DataHub application inside your Okta Developer Console. e.g. 00be4R_M2MzDqXawbWgfKGpKee0kuEOfX1RCQSRx00",
                    "type": "string"
                },
                "ingest_users": {
                    "title": "Ingest Users",
                    "description": "Whether users should be ingested into DataHub.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_groups": {
                    "title": "Ingest Groups",
                    "description": "Whether groups should be ingested into DataHub.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_group_membership": {
                    "title": "Ingest Group Membership",
                    "description": "Whether group membership should be ingested into DataHub. ingest_groups must be True if this is True.",
                    "default": true,
                    "type": "boolean"
                },
                "okta_profile_to_username_attr": {
                    "title": "Okta Profile To Username Attr",
                    "description": "Which Okta User Profile attribute to use as input to DataHub username mapping. Common values used are - login, email.",
                    "default": "email",
                    "type": "string"
                },
                "okta_profile_to_username_regex": {
                    "title": "Okta Profile To Username Regex",
                    "description": "A regex used to parse the DataHub username from the attribute specified in `okta_profile_to_username_attr`.",
                    "default": "(.*)",
                    "type": "string"
                },
                "okta_profile_to_group_name_attr": {
                    "title": "Okta Profile To Group Name Attr",
                    "description": "Which Okta Group Profile attribute to use as input to DataHub group name mapping.",
                    "default": "name",
                    "type": "string"
                },
                "okta_profile_to_group_name_regex": {
                    "title": "Okta Profile To Group Name Regex",
                    "description": "A regex used to parse the DataHub group name from the attribute specified in `okta_profile_to_group_name_attr`.",
                    "default": "(.*)",
                    "type": "string"
                },
                "include_deprovisioned_users": {
                    "title": "Include Deprovisioned Users",
                    "description": "Whether to ingest users in the DEPROVISIONED state from Okta.",
                    "default": false,
                    "type": "boolean"
                },
                "include_suspended_users": {
                    "title": "Include Suspended Users",
                    "description": "Whether to ingest users in the SUSPENDED state from Okta.",
                    "default": false,
                    "type": "boolean"
                },
                "page_size": {
                    "title": "Page Size",
                    "description": "The number of entities requested from Okta's REST APIs in one request.",
                    "default": 100,
                    "type": "integer"
                },
                "delay_seconds": {
                    "title": "Delay Seconds",
                    "description": "Number of seconds to wait between calls to Okta's REST APIs. (Okta rate limits). Defaults to 10ms.",
                    "default": 0.01,
                    "anyOf": [
                        {
                            "type": "number"
                        },
                        {
                            "type": "integer"
                        }
                    ]
                },
                "okta_users_filter": {
                    "title": "Okta Users Filter",
                    "description": "Okta filter expression (not regex) for ingesting users. Only one of `okta_users_filter` and `okta_users_search` can be set. See (https://developer.okta.com/docs/reference/api/users/#list-users-with-a-filter) for more info.",
                    "type": "string"
                },
                "okta_users_search": {
                    "title": "Okta Users Search",
                    "description": "Okta search expression (not regex) for ingesting users. Only one of `okta_users_filter` and `okta_users_search` can be set. See (https://developer.okta.com/docs/reference/api/users/#list-users-with-search) for more info.",
                    "type": "string"
                },
                "okta_groups_filter": {
                    "title": "Okta Groups Filter",
                    "description": "Okta filter expression (not regex) for ingesting groups. Only one of `okta_groups_filter` and `okta_groups_search` can be set. See (https://developer.okta.com/docs/reference/api/groups/#filters) for more info.",
                    "type": "string"
                },
                "okta_groups_search": {
                    "title": "Okta Groups Search",
                    "description": "Okta search expression (not regex) for ingesting groups. Only one of `okta_groups_filter` and `okta_groups_search` can be set. See (https://developer.okta.com/docs/reference/api/groups/#list-groups-with-search) for more info.",
                    "type": "string"
                },
                "mask_group_id": {
                    "title": "Mask Group Id",
                    "default": true,
                    "type": "boolean"
                },
                "mask_user_id": {
                    "title": "Mask User Id",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "okta_domain",
                "okta_api_token"
            ],
            "additionalProperties": false
        },
        "lookml": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "lookml"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/lookml_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "lookml_config": {
            "title": "LookMLSourceConfig",
            "description": "Any source that is a primary producer of Dataset metadata should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "explore_naming_pattern": {
                    "title": "Explore Naming Pattern",
                    "description": "Pattern for providing dataset names to explores. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "{model}.explore.{name}"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "explore_browse_pattern": {
                    "title": "Explore Browse Pattern",
                    "description": "Pattern for providing browse paths to explores. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "/{env}/{platform}/{project}/explores"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "view_naming_pattern": {
                    "title": "View Naming Pattern",
                    "description": "Pattern for providing dataset names to views. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "{project}.view.{name}"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "view_browse_pattern": {
                    "title": "View Browse Pattern",
                    "description": "Pattern for providing browse paths to views. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "/{env}/{platform}/{project}/views"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "tag_measures_and_dimensions": {
                    "title": "Tag Measures And Dimensions",
                    "description": "When enabled, attaches tags to measures, dimensions and dimension groups to make them more discoverable. When disabled, adds this information to the description of the column.",
                    "default": true,
                    "type": "boolean"
                },
                "platform_name": {
                    "title": "Platform Name",
                    "description": "Default platform name. Don't change.",
                    "default": "looker",
                    "type": "string"
                },
                "extract_column_level_lineage": {
                    "title": "Extract Column Level Lineage",
                    "description": "When enabled, extracts column-level lineage from Views and Explores",
                    "default": true,
                    "type": "boolean"
                },
                "git_info": {
                    "title": "Git Info",
                    "description": "Reference to your git location. If present, supplies handy links to your lookml on the dataset entity page.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/GitInfo"
                        }
                    ]
                },
                "base_folder": {
                    "title": "Base Folder",
                    "description": "Required if not providing github configuration and deploy keys. A pointer to a local directory (accessible to the ingestion system) where the root of the LookML repo has been checked out (typically via a git clone). This is typically the root folder where the `*.model.lkml` and `*.view.lkml` files are stored. e.g. If you have checked out your LookML repo under `/Users/jdoe/workspace/my-lookml-repo`, then set `base_folder` to `/Users/jdoe/workspace/my-lookml-repo`.",
                    "format": "directory-path",
                    "type": "string"
                },
                "project_dependencies": {
                    "title": "Project Dependencies",
                    "description": "A map of project_name to local directory (accessible to the ingestion system) or Git credentials. Every local_dependencies or private remote_dependency listed in the main project's manifest.lkml file should have a corresponding entry here. If a deploy key is not provided, the ingestion system will use the same deploy key as the main project. ",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "anyOf": [
                            {
                                "type": "string",
                                "format": "directory-path"
                            },
                            {
                                "$ref": "#/definitions/GitInfo"
                            }
                        ]
                    }
                },
                "connection_to_platform_map": {
                    "title": "Connection To Platform Map",
                    "description": "A mapping of [Looker connection names](https://docs.looker.com/reference/model-params/connection-for-model) to DataHub platform, database, and schema values.",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/LookerConnectionDefinition"
                    }
                },
                "model_pattern": {
                    "title": "Model Pattern",
                    "description": "List of regex patterns for LookML models to include in the extraction.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "List of regex patterns for LookML views to include in the extraction.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "parse_table_names_from_sql": {
                    "title": "Parse Table Names From Sql",
                    "description": "See note below.",
                    "default": false,
                    "type": "boolean"
                },
                "sql_parser": {
                    "title": "Sql Parser",
                    "description": "See note below.",
                    "default": "datahub.utilities.sql_parser.DefaultSQLParser",
                    "type": "string"
                },
                "api": {
                    "$ref": "#/definitions/LookerAPIConfig"
                },
                "project_name": {
                    "title": "Project Name",
                    "description": "Required if you don't specify the `api` section. The project name within which all the model files live. See (https://docs.looker.com/data-modeling/getting-started/how-project-works) to understand what the Looker project name should be. The simplest way to see your projects is to click on `Develop` followed by `Manage LookML Projects` in the Looker application.",
                    "type": "string"
                },
                "transport_options": {
                    "title": "Transport Options",
                    "description": "Populates the [TransportOptions](https://github.com/looker-open-source/sdk-codegen/blob/94d6047a0d52912ac082eb91616c1e7c379ab262/python/looker_sdk/rtl/transport.py#L70) struct for looker client",
                    "allOf": [
                        {
                            "$ref": "#/definitions/TransportOptionsConfig"
                        }
                    ]
                },
                "max_file_snippet_length": {
                    "title": "Max File Snippet Length",
                    "description": "When extracting the view definition from a lookml file, the maximum number of characters to extract.",
                    "default": 512000,
                    "type": "integer"
                },
                "emit_reachable_views_only": {
                    "title": "Emit Reachable Views Only",
                    "description": "When enabled, only views that are reachable from explores defined in the model files are emitted",
                    "default": true,
                    "type": "boolean"
                },
                "populate_sql_logic_for_missing_descriptions": {
                    "title": "Populate Sql Logic For Missing Descriptions",
                    "description": "When enabled, field descriptions will include the sql logic for computed fields if descriptions are missing",
                    "default": false,
                    "type": "boolean"
                },
                "process_isolation_for_sql_parsing": {
                    "title": "Process Isolation For Sql Parsing",
                    "description": "When enabled, sql parsing will be executed in a separate process to prevent memory leaks.",
                    "default": false,
                    "type": "boolean"
                },
                "process_refinements": {
                    "title": "Process Refinements",
                    "description": "When enabled, looker refinement will be processed to adapt an existing view.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "redshift": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "redshift"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/redshift_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "redshift_config": {
            "title": "RedshiftConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "store_last_profiling_timestamps": {
                    "title": "Store Last Profiling Timestamps",
                    "description": "Enable storing last profile timestamp in store.",
                    "default": false,
                    "type": "boolean"
                },
                "incremental_lineage": {
                    "title": "Incremental Lineage",
                    "description": "When enabled, emits lineage as incremental to existing lineage already in DataHub. When disabled, re-states lineage on each run.",
                    "default": true,
                    "type": "boolean"
                },
                "sql_parser_use_external_process": {
                    "title": "Sql Parser Use External Process",
                    "description": "When enabled, sql parser will run in isolated in a separate process. This can affect processing time but can protect from sql parser's mem leak.",
                    "default": false,
                    "type": "boolean"
                },
                "store_last_lineage_extraction_timestamp": {
                    "title": "Store Last Lineage Extraction Timestamp",
                    "description": "Enable checking last lineage extraction date in store.",
                    "default": false,
                    "type": "boolean"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "store_last_usage_extraction_timestamp": {
                    "title": "Store Last Usage Extraction Timestamp",
                    "description": "Enable checking last usage timestamp in store.",
                    "default": true,
                    "type": "boolean"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "email_domain": {
                    "title": "Email Domain",
                    "description": "Email domain of your organisation so users can be displayed on UI appropriately.",
                    "type": "string"
                },
                "s3_lineage_config": {
                    "title": "S3 Lineage Config",
                    "description": "Common config for S3 lineage generation",
                    "default": {
                        "path_specs": [],
                        "strip_urls": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/S3LineageProviderConfig"
                        }
                    ]
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "information_schema"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database",
                    "default": "dev",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "redshift+psycopg2",
                    "hidden_from_schema": true,
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "default_schema": {
                    "title": "Default Schema",
                    "description": "The default schema to use if the sql parser fails to parse the schema with `sql_based` lineage collector",
                    "default": "public",
                    "type": "string"
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Whether table lineage should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_copy_lineage": {
                    "title": "Include Copy Lineage",
                    "description": "Whether lineage should be collected from copy commands",
                    "default": true,
                    "type": "boolean"
                },
                "include_usage_statistics": {
                    "title": "Include Usage Statistics",
                    "description": "Generate usage statistic. email_domain config parameter needs to be set if enabled",
                    "default": false,
                    "type": "boolean"
                },
                "include_unload_lineage": {
                    "title": "Include Unload Lineage",
                    "description": "Whether lineage should be collected from unload commands",
                    "default": true,
                    "type": "boolean"
                },
                "capture_lineage_query_parser_failures": {
                    "title": "Capture Lineage Query Parser Failures",
                    "description": "Whether to capture lineage query parser errors with dataset properties for debugging",
                    "default": false,
                    "hide_from_schema": true,
                    "type": "boolean"
                },
                "table_lineage_mode": {
                    "description": "Which table lineage collector mode to use. Available modes are: [stl_scan_based, sql_based, mixed]",
                    "default": "stl_scan_based",
                    "allOf": [
                        {
                            "$ref": "#/definitions/LineageMode"
                        }
                    ]
                },
                "extra_client_options": {
                    "title": "Extra Client Options",
                    "default": {},
                    "type": "object"
                },
                "match_fully_qualified_names": {
                    "title": "Match Fully Qualified Names",
                    "description": "Whether `schema_pattern` is matched against fully qualified schema name `<database>.<schema>`.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "redshift-usage-legacy": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "redshift-usage-legacy"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/redshift-usage-legacy_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "redshift-usage-legacy_config": {
            "title": "RedshiftUsageConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "s3_lineage_config": {
                    "title": "S3 Lineage Config",
                    "description": "Common config for S3 lineage generation",
                    "allOf": [
                        {
                            "$ref": "#/definitions/S3LineageProviderConfig"
                        }
                    ]
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to SQLAlchemy's create_engine as kwargs.See https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine for details.",
                    "default": {},
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "information_schema"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "default_schema": {
                    "title": "Default Schema",
                    "description": "The default schema to use if the sql parser fails to parse the schema with `sql_based` lineage collector",
                    "default": "public",
                    "type": "string"
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Whether table lineage should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_copy_lineage": {
                    "title": "Include Copy Lineage",
                    "description": "Whether lineage should be collected from copy commands",
                    "default": true,
                    "type": "boolean"
                },
                "include_unload_lineage": {
                    "title": "Include Unload Lineage",
                    "description": "Whether lineage should be collected from unload commands",
                    "default": true,
                    "type": "boolean"
                },
                "capture_lineage_query_parser_failures": {
                    "title": "Capture Lineage Query Parser Failures",
                    "description": "Whether to capture lineage query parser errors with dataset properties for debuggings",
                    "default": false,
                    "type": "boolean"
                },
                "table_lineage_mode": {
                    "description": "Which table lineage collector mode to use. Available modes are: [stl_scan_based, sql_based, mixed]",
                    "default": "stl_scan_based",
                    "allOf": [
                        {
                            "$ref": "#/definitions/LineageMode"
                        }
                    ]
                },
                "email_domain": {
                    "title": "Email Domain",
                    "description": "Email domain of your organisation so users can be displayed on UI appropriately.",
                    "type": "string"
                }
            },
            "required": [
                "host_port",
                "email_domain"
            ],
            "additionalProperties": false
        },
        "demo-data": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "demo-data"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/demo-data_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "demo-data_config": {
            "title": "DemoDataConfig",
            "type": "object",
            "properties": {},
            "additionalProperties": false
        },
        "vertica": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "vertica"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/vertica_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "vertica_config": {
            "title": "VerticaConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "vertica+vertica_python",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "models_pattern": {
                    "title": "Models Pattern",
                    "description": "Regex patterns for ml models to filter in ingestion. ",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_projections": {
                    "title": "Include Projections",
                    "description": "Whether projections should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_models": {
                    "title": "Include Models",
                    "description": "Whether Models should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_view_lineage": {
                    "title": "Include View Lineage",
                    "description": "If the source supports it, include view lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "include_projection_lineage": {
                    "title": "Include Projection Lineage",
                    "description": "If the source supports it, include view lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "redash": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "redash"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/redash_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "redash_config": {
            "title": "RedashConfig",
            "type": "object",
            "properties": {
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "Redash base URL.",
                    "default": "http://localhost:5000",
                    "type": "string"
                },
                "api_key": {
                    "title": "Api Key",
                    "description": "Redash user API key.",
                    "default": "REDASH_API_KEY",
                    "type": "string"
                },
                "dashboard_patterns": {
                    "title": "Dashboard Patterns",
                    "description": "regex patterns for dashboards to filter for ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "chart_patterns": {
                    "title": "Chart Patterns",
                    "description": "regex patterns for charts to filter for ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "skip_draft": {
                    "title": "Skip Draft",
                    "description": "Only ingest published dashboards and charts.",
                    "default": true,
                    "type": "boolean"
                },
                "page_size": {
                    "title": "Page Size",
                    "description": "Limit on number of items to be queried at once.",
                    "default": 25,
                    "type": "integer"
                },
                "api_page_limit": {
                    "title": "Api Page Limit",
                    "description": "Limit on number of pages queried for ingesting dashboards and charts API during pagination.",
                    "default": 9223372036854775807,
                    "type": "integer"
                },
                "parallelism": {
                    "title": "Parallelism",
                    "description": "Parallelism to use while processing.",
                    "default": 1,
                    "type": "integer"
                },
                "parse_table_names_from_sql": {
                    "title": "Parse Table Names From Sql",
                    "description": "See note below.",
                    "default": false,
                    "type": "boolean"
                },
                "sql_parser": {
                    "title": "Sql Parser",
                    "description": "custom SQL parser. See note below for details.",
                    "default": "datahub.utilities.sql_parser.DefaultSQLParser",
                    "type": "string"
                },
                "env": {
                    "title": "Env",
                    "description": "Environment to use in namespace when constructing URNs.",
                    "default": "PROD",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "dbt": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "dbt"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/dbt_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "dbt_config": {
            "title": "DBTCoreConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "incremental_lineage": {
                    "title": "Incremental Lineage",
                    "description": "When enabled, emits lineage as incremental to existing lineage already in DataHub. When disabled, re-states lineage on each run.",
                    "default": true,
                    "type": "boolean"
                },
                "sql_parser_use_external_process": {
                    "title": "Sql Parser Use External Process",
                    "description": "When enabled, sql parser will run in isolated in a separate process. This can affect processing time but can protect from sql parser's mem leak.",
                    "default": false,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "Environment to use in namespace when constructing URNs.",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "DBT Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "target_platform": {
                    "title": "Target Platform",
                    "description": "The platform that dbt is loading onto. (e.g. bigquery / redshift / postgres etc.)",
                    "type": "string"
                },
                "target_platform_instance": {
                    "title": "Target Platform Instance",
                    "description": "The platform instance for the platform that dbt is operating on. Use this if you have multiple instances of the same platform (e.g. redshift) and need to distinguish between them.",
                    "type": "string"
                },
                "use_identifiers": {
                    "title": "Use Identifiers",
                    "description": "Use model identifier instead of model name if defined (if not, default to model name).",
                    "default": false,
                    "type": "boolean"
                },
                "entities_enabled": {
                    "title": "Entities Enabled",
                    "description": "Controls for enabling / disabling metadata emission for different dbt entities (models, test definitions, test results, etc.)",
                    "default": {
                        "models": "YES",
                        "sources": "YES",
                        "seeds": "YES",
                        "snapshots": "YES",
                        "test_definitions": "YES",
                        "test_results": "YES"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/DBTEntitiesEnabled"
                        }
                    ]
                },
                "tag_prefix": {
                    "title": "Tag Prefix",
                    "description": "Prefix added to tags during ingestion.",
                    "default": "dbt:",
                    "type": "string"
                },
                "node_name_pattern": {
                    "title": "Node Name Pattern",
                    "description": "regex patterns for dbt model names to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "meta_mapping": {
                    "title": "Meta Mapping",
                    "description": "mapping rules that will be executed against dbt meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "column_meta_mapping": {
                    "title": "Column Meta Mapping",
                    "description": "mapping rules that will be executed against dbt column meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "query_tag_mapping": {
                    "title": "Query Tag Mapping",
                    "description": "mapping rules that will be executed against dbt query_tag meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "write_semantics": {
                    "title": "Write Semantics",
                    "description": "Whether the new tags, terms and owners to be added will override the existing ones added only by this source or not. Value for this config can be \"PATCH\" or \"OVERRIDE\"",
                    "default": "PATCH",
                    "type": "string"
                },
                "strip_user_ids_from_email": {
                    "title": "Strip User Ids From Email",
                    "description": "Whether or not to strip email id while adding owners using dbt meta actions.",
                    "default": false,
                    "type": "boolean"
                },
                "enable_owner_extraction": {
                    "title": "Enable Owner Extraction",
                    "description": "When enabled, ownership info will be extracted from the dbt meta",
                    "default": true,
                    "type": "boolean"
                },
                "owner_extraction_pattern": {
                    "title": "Owner Extraction Pattern",
                    "description": "Regex string to extract owner from the dbt node using the `(?P<name>...) syntax` of the [match object](https://docs.python.org/3/library/re.html#match-objects), where the group name must be `owner`. Examples: (1)`r\"(?P<owner>(.*)): (\\w+) (\\w+)\"` will extract `jdoe` as the owner from `\"jdoe: John Doe\"` (2) `r\"@(?P<owner>(.*))\"` will extract `alice` as the owner from `\"@alice\"`.",
                    "type": "string"
                },
                "include_env_in_assertion_guid": {
                    "title": "Include Env In Assertion Guid",
                    "description": "Prior to version 0.9.4.2, the assertion GUIDs did not include the environment. If you're using multiple dbt ingestion that are only distinguished by env, then you should set this flag to True.",
                    "default": false,
                    "type": "boolean"
                },
                "convert_column_urns_to_lowercase": {
                    "title": "Convert Column Urns To Lowercase",
                    "description": "When enabled, converts column URNs to lowercase to ensure cross-platform compatibility. If `target_platform` is Snowflake, the default is True.",
                    "default": false,
                    "type": "boolean"
                },
                "enable_meta_mapping": {
                    "title": "Enable Meta Mapping",
                    "description": "When enabled, applies the mappings that are defined through the meta_mapping directives.",
                    "default": true,
                    "type": "boolean"
                },
                "enable_query_tag_mapping": {
                    "title": "Enable Query Tag Mapping",
                    "description": "When enabled, applies the mappings that are defined through the `query_tag_mapping` directives.",
                    "default": true,
                    "type": "boolean"
                },
                "manifest_path": {
                    "title": "Manifest Path",
                    "description": "Path to dbt manifest JSON. See https://docs.getdbt.com/reference/artifacts/manifest-json Note this can be a local file or a URI.",
                    "type": "string"
                },
                "catalog_path": {
                    "title": "Catalog Path",
                    "description": "Path to dbt catalog JSON. See https://docs.getdbt.com/reference/artifacts/catalog-json Note this can be a local file or a URI.",
                    "type": "string"
                },
                "sources_path": {
                    "title": "Sources Path",
                    "description": "Path to dbt sources JSON. See https://docs.getdbt.com/reference/artifacts/sources-json. If not specified, last-modified fields will not be populated. Note this can be a local file or a URI.",
                    "type": "string"
                },
                "test_results_path": {
                    "title": "Test Results Path",
                    "description": "Path to output of dbt test run as run_results file in JSON format. See https://docs.getdbt.com/reference/artifacts/run-results-json. If not specified, test execution results will not be populated in DataHub.",
                    "type": "string"
                },
                "aws_connection": {
                    "title": "Aws Connection",
                    "description": "When fetching manifest files from s3, configuration for aws connection details",
                    "allOf": [
                        {
                            "$ref": "#/definitions/AwsConnectionConfig"
                        }
                    ]
                },
                "git_info": {
                    "title": "Git Info",
                    "description": "Reference to your git location to enable easy navigation from DataHub to your dbt files.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/GitReference"
                        }
                    ]
                }
            },
            "required": [
                "target_platform",
                "manifest_path",
                "catalog_path"
            ],
            "additionalProperties": false
        },
        "presto-on-hive": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "presto-on-hive"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/presto-on-hive_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "presto-on-hive_config": {
            "title": "PrestoOnHiveConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "Host URL and port to connect to. Example: localhost:3306",
                    "default": "localhost:3306",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "views_where_clause_suffix": {
                    "title": "Views Where Clause Suffix",
                    "description": "Where clause to specify what Presto views should be ingested.",
                    "default": "",
                    "type": "string"
                },
                "tables_where_clause_suffix": {
                    "title": "Tables Where Clause Suffix",
                    "description": "Where clause to specify what Hive tables should be ingested.",
                    "default": "",
                    "type": "string"
                },
                "schemas_where_clause_suffix": {
                    "title": "Schemas Where Clause Suffix",
                    "description": "Where clause to specify what Hive schemas should be ingested.",
                    "default": "",
                    "type": "string"
                },
                "ingestion_job_id": {
                    "title": "Ingestion Job Id",
                    "default": "",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for hive/presto database to filter in ingestion. Specify regex to only match the database name. e.g. to match all tables in database analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "metastore_db_name": {
                    "title": "Metastore Db Name",
                    "description": "Name of the Hive metastore's database (usually: metastore). For backward compatibility, if this field is not provided, the database field will be used. If both the 'database' and 'metastore_db_name' fields are set then the 'database' field will be used to filter the hive/presto/trino database",
                    "type": "string"
                },
                "mode": {
                    "description": "The ingested data will be stored under this platform. Valid options: ['hive', 'presto', 'presto-on-hive', 'trino']",
                    "default": "presto-on-hive",
                    "allOf": [
                        {
                            "$ref": "#/definitions/PrestoOnHiveConfigMode"
                        }
                    ]
                },
                "use_catalog_subtype": {
                    "title": "Use Catalog Subtype",
                    "description": "Container Subtype name to be 'Database' or 'Catalog' Valid options: ['True', 'False']",
                    "default": true,
                    "type": "boolean"
                },
                "use_dataset_pascalcase_subtype": {
                    "title": "Use Dataset Pascalcase Subtype",
                    "description": "Dataset Subtype name to be 'Table' or 'View' Valid options: ['True', 'False']",
                    "default": false,
                    "type": "boolean"
                },
                "include_catalog_name_in_ids": {
                    "title": "Include Catalog Name In Ids",
                    "description": "Add the Presto catalog name (e.g. hive) to the generated dataset urns. `urn:li:dataset:(urn:li:dataPlatform:hive,hive.user.logging_events,PROD)` versus `urn:li:dataset:(urn:li:dataPlatform:hive,user.logging_events,PROD)`",
                    "default": false,
                    "type": "boolean"
                },
                "enable_properties_merge": {
                    "title": "Enable Properties Merge",
                    "description": "By default, the connector overwrites properties every time. Set this to True to enable merging of properties with what exists on the server.",
                    "default": false,
                    "type": "boolean"
                },
                "simplify_nested_field_paths": {
                    "title": "Simplify Nested Field Paths",
                    "description": "Simplify v2 field paths to v1 by default. If the schema has Union or Array types, still falls back to v2",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "powerbi": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "powerbi"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/powerbi_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "powerbi_config": {
            "title": "PowerBiDashboardSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "PowerBI Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "tenant_id": {
                    "title": "Tenant Id",
                    "description": "PowerBI tenant identifier",
                    "type": "string"
                },
                "workspace_id_pattern": {
                    "title": "Workspace Id Pattern",
                    "description": "Regex patterns to filter PowerBI workspaces in ingestion",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "server_to_platform_instance": {
                    "title": "Server To Platform Instance",
                    "description": "A mapping of PowerBI datasource's server i.e host[:port] to Data platform instance. :port is optional and only needed if your datasource server is running on non-standard port.For Google BigQuery the datasource's server is google bigquery project name",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/PlatformDetail"
                    }
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "Azure app client identifier",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "Azure app client secret",
                    "type": "string"
                },
                "scan_timeout": {
                    "title": "Scan Timeout",
                    "description": "timeout for PowerBI metadata scanning",
                    "default": 60,
                    "type": "integer"
                },
                "scan_batch_size": {
                    "title": "Scan Batch Size",
                    "description": "batch size for sending workspace_ids to PBI, 100 is the limit",
                    "default": 1,
                    "exclusiveMinimum": 0,
                    "maximum": 100,
                    "type": "integer"
                },
                "workspace_id_as_urn_part": {
                    "title": "Workspace Id As Urn Part",
                    "description": "Highly recommend changing this to True, as you can have the same workspace nameTo maintain backward compatability, this is set to False which uses workspace name",
                    "default": false,
                    "type": "boolean"
                },
                "extract_ownership": {
                    "title": "Extract Ownership",
                    "description": "Whether ownership should be ingested. Admin API access is required if this setting is enabled. Note that enabling this may overwrite owners that you've added inside DataHub's web application.",
                    "default": false,
                    "type": "boolean"
                },
                "extract_reports": {
                    "title": "Extract Reports",
                    "description": "Whether reports should be ingested",
                    "default": true,
                    "type": "boolean"
                },
                "ownership": {
                    "title": "Ownership",
                    "description": "Configure how is ownership ingested",
                    "default": {
                        "create_corp_user": true,
                        "use_powerbi_email": false,
                        "remove_email_suffix": false,
                        "dataset_configured_by_as_owner": false,
                        "owner_criteria": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/OwnershipMapping"
                        }
                    ]
                },
                "modified_since": {
                    "title": "Modified Since",
                    "description": "Get only recently modified workspaces based on modified_since datetime '2023-02-10T00:00:00.0000000Z', excludePersonalWorkspaces and excludeInActiveWorkspaces limit to last 30 days",
                    "type": "string"
                },
                "extract_dashboards": {
                    "title": "Extract Dashboards",
                    "description": "Whether to ingest PBI Dashboard and Tiles as Datahub Dashboard and Chart",
                    "default": true,
                    "type": "boolean"
                },
                "extract_dataset_schema": {
                    "title": "Extract Dataset Schema",
                    "description": "Whether to ingest PBI Dataset Table columns and measures",
                    "default": false,
                    "type": "boolean"
                },
                "extract_lineage": {
                    "title": "Extract Lineage",
                    "description": "Whether lineage should be ingested between X and Y. Admin API access is required if this setting is enabled",
                    "default": true,
                    "type": "boolean"
                },
                "extract_endorsements_to_tags": {
                    "title": "Extract Endorsements To Tags",
                    "description": "Whether to extract endorsements to tags, note that this may overwrite existing tags. Admin API access is required is this setting is enabled",
                    "default": false,
                    "type": "boolean"
                },
                "filter_dataset_endorsements": {
                    "title": "Filter Dataset Endorsements",
                    "description": "Filter and ingest datasets which are 'Certified' or 'Promoted' endorsement. If both are added, dataset which are 'Certified' or 'Promoted' will be ingested . Default setting allows all dataset to be ingested",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "extract_workspaces_to_containers": {
                    "title": "Extract Workspaces To Containers",
                    "description": "Extract workspaces to DataHub containers",
                    "default": true,
                    "type": "boolean"
                },
                "extract_datasets_to_containers": {
                    "title": "Extract Datasets To Containers",
                    "description": "PBI tables will be grouped under a Datahub Container, the container reflect a PBI Dataset",
                    "default": false,
                    "type": "boolean"
                },
                "native_query_parsing": {
                    "title": "Native Query Parsing",
                    "description": "Whether PowerBI native query should be parsed to extract lineage",
                    "default": true,
                    "type": "boolean"
                },
                "convert_urns_to_lowercase": {
                    "title": "Convert Urns To Lowercase",
                    "description": "Whether to convert the PowerBI assets urns to lowercase",
                    "default": false,
                    "type": "boolean"
                },
                "convert_lineage_urns_to_lowercase": {
                    "title": "Convert Lineage Urns To Lowercase",
                    "description": "Whether to convert the urns of ingested lineage dataset to lowercase",
                    "default": true,
                    "type": "boolean"
                },
                "admin_apis_only": {
                    "title": "Admin Apis Only",
                    "description": "Retrieve metadata using PowerBI Admin API only. If this is enabled, then Report Pages will not be extracted. Admin API access is required if this setting is enabled",
                    "default": false,
                    "type": "boolean"
                },
                "extract_independent_datasets": {
                    "title": "Extract Independent Datasets",
                    "description": "Whether to extract datasets not used in any PowerBI visualization",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "tenant_id",
                "client_id",
                "client_secret"
            ],
            "additionalProperties": false
        },
        "elasticsearch": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "elasticsearch"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/elasticsearch_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "elasticsearch_config": {
            "title": "ElasticsearchSourceConfig",
            "description": "Any source that connects to a platform should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "host": {
                    "title": "Host",
                    "description": "The elastic search host URI.",
                    "default": "localhost:9200",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "The username credential.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "The password credential.",
                    "type": "string"
                },
                "use_ssl": {
                    "title": "Use Ssl",
                    "description": "Whether to use SSL for the connection or not.",
                    "default": false,
                    "type": "boolean"
                },
                "verify_certs": {
                    "title": "Verify Certs",
                    "description": "Whether to verify SSL certificates.",
                    "default": false,
                    "type": "boolean"
                },
                "ca_certs": {
                    "title": "Ca Certs",
                    "description": "Path to a certificate authority (CA) certificate.",
                    "type": "string"
                },
                "client_cert": {
                    "title": "Client Cert",
                    "description": "Path to the file containing the private key and the certificate, or cert only if using client_key.",
                    "type": "string"
                },
                "client_key": {
                    "title": "Client Key",
                    "description": "Path to the file containing the private key if using separate cert and key files.",
                    "type": "string"
                },
                "ssl_assert_hostname": {
                    "title": "Ssl Assert Hostname",
                    "description": "Use hostname verification if not False.",
                    "default": false,
                    "type": "boolean"
                },
                "ssl_assert_fingerprint": {
                    "title": "Ssl Assert Fingerprint",
                    "description": "Verify the supplied certificate fingerprint if not None.",
                    "type": "string"
                },
                "url_prefix": {
                    "title": "Url Prefix",
                    "description": "There are cases where an enterprise would have multiple elastic search clusters. One way for them to manage is to have a single endpoint for all the elastic search clusters and use url_prefix for routing requests to different clusters.",
                    "default": "",
                    "type": "string"
                },
                "index_pattern": {
                    "title": "Index Pattern",
                    "description": "regex patterns for indexes to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "^_.*",
                            "^ilm-history.*"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "ingest_index_templates": {
                    "title": "Ingest Index Templates",
                    "description": "Ingests ES index templates if enabled.",
                    "default": false,
                    "type": "boolean"
                },
                "index_template_pattern": {
                    "title": "Index Template Pattern",
                    "description": "The regex patterns for filtering index templates to ingest.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "^_.*"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profiling": {
                    "$ref": "#/definitions/ElasticProfiling"
                },
                "collapse_urns": {
                    "$ref": "#/definitions/CollapseUrns"
                }
            },
            "additionalProperties": false
        },
        "snowflake": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "snowflake"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/snowflake_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "snowflake_config": {
            "title": "SnowflakeV2Config",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "classification": {
                    "title": "Classification",
                    "description": "For details, refer [Classification](../../../../metadata-ingestion/docs/dev_guides/classification.md).",
                    "default": {
                        "enabled": false,
                        "sample_size": 100,
                        "max_workers": 2,
                        "table_pattern": {
                            "allow": [
                                ".*"
                            ],
                            "deny": [],
                            "ignoreCase": true
                        },
                        "column_pattern": {
                            "allow": [
                                ".*"
                            ],
                            "deny": [],
                            "ignoreCase": true
                        },
                        "info_type_to_term": {},
                        "classifiers": [
                            {
                                "type": "datahub",
                                "config": null
                            }
                        ]
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/ClassificationConfig"
                        }
                    ]
                },
                "store_last_profiling_timestamps": {
                    "title": "Store Last Profiling Timestamps",
                    "description": "Enable storing last profile timestamp in store.",
                    "default": false,
                    "type": "boolean"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "store_last_usage_extraction_timestamp": {
                    "title": "Store Last Usage Extraction Timestamp",
                    "description": "Enable checking last usage timestamp in store.",
                    "default": true,
                    "type": "boolean"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "email_domain": {
                    "title": "Email Domain",
                    "description": "Email domain of your organisation so users can be displayed on UI appropriately.",
                    "type": "string"
                },
                "apply_view_usage_to_tables": {
                    "title": "Apply View Usage To Tables",
                    "description": "Whether to apply view's usage to its base tables. If set to True, usage is applied to base tables only.",
                    "default": false,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "snowflake",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Snowflake username.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Snowflake password.",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "private_key": {
                    "title": "Private Key",
                    "description": "Private key in a form of '-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n' if using key pair authentication. Encrypted version of private key will be in a form of '-----BEGIN ENCRYPTED PRIVATE KEY-----\\nencrypted-private-key\\n-----END ECNCRYPTED PRIVATE KEY-----\\n' See: https://docs.snowflake.com/en/user-guide/key-pair-auth.html",
                    "type": "string"
                },
                "private_key_path": {
                    "title": "Private Key Path",
                    "description": "The path to the private key if using key pair authentication. Ignored if `private_key` is set. See: https://docs.snowflake.com/en/user-guide/key-pair-auth.html",
                    "type": "string"
                },
                "private_key_password": {
                    "title": "Private Key Password",
                    "description": "Password for your private key. Required if using key pair authentication with encrypted private key.",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "oauth_config": {
                    "title": "Oauth Config",
                    "description": "oauth configuration - https://docs.snowflake.com/en/user-guide/python-connector-example.html#connecting-with-oauth",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OAuthConfiguration"
                        }
                    ]
                },
                "authentication_type": {
                    "title": "Authentication Type",
                    "description": "The type of authenticator to use when connecting to Snowflake. Supports \"DEFAULT_AUTHENTICATOR\", \"OAUTH_AUTHENTICATOR\", \"EXTERNAL_BROWSER_AUTHENTICATOR\" and \"KEY_PAIR_AUTHENTICATOR\".",
                    "default": "DEFAULT_AUTHENTICATOR",
                    "type": "string"
                },
                "account_id": {
                    "title": "Account Id",
                    "description": "Snowflake account identifier. e.g. xy12345,  xy12345.us-east-2.aws, xy12345.us-central1.gcp, xy12345.central-us.azure, xy12345.us-west-2.privatelink. Refer [Account Identifiers](https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#format-2-legacy-account-locator-in-a-region) for more details.",
                    "type": "string"
                },
                "warehouse": {
                    "title": "Warehouse",
                    "description": "Snowflake warehouse.",
                    "type": "string"
                },
                "role": {
                    "title": "Role",
                    "description": "Snowflake role.",
                    "type": "string"
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "If enabled, populates the snowflake table-to-table and s3-to-snowflake table lineage. Requires appropriate grants given to the role and Snowflake Enterprise Edition or above.",
                    "default": true,
                    "type": "boolean"
                },
                "include_view_lineage": {
                    "title": "Include View Lineage",
                    "description": "If enabled, populates the snowflake view->table and table->view lineages. Requires appropriate grants given to the role, and include_table_lineage to be True. view->table lineage requires Snowflake Enterprise Edition or above.",
                    "default": true,
                    "type": "boolean"
                },
                "connect_args": {
                    "title": "Connect Args",
                    "description": "Connect args to pass to Snowflake SqlAlchemy driver",
                    "type": "object"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "^UTIL_DB$",
                            "^SNOWFLAKE$",
                            "^SNOWFLAKE_SAMPLE_DATA$"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "ignore_start_time_lineage": {
                    "title": "Ignore Start Time Lineage",
                    "default": false,
                    "type": "boolean"
                },
                "upstream_lineage_in_report": {
                    "title": "Upstream Lineage In Report",
                    "default": false,
                    "type": "boolean"
                },
                "convert_urns_to_lowercase": {
                    "title": "Convert Urns To Lowercase",
                    "default": true,
                    "type": "boolean"
                },
                "include_usage_stats": {
                    "title": "Include Usage Stats",
                    "description": "If enabled, populates the snowflake usage statistics. Requires appropriate grants given to the role.",
                    "default": true,
                    "type": "boolean"
                },
                "include_technical_schema": {
                    "title": "Include Technical Schema",
                    "description": "If enabled, populates the snowflake technical schema and descriptions.",
                    "default": true,
                    "type": "boolean"
                },
                "include_column_lineage": {
                    "title": "Include Column Lineage",
                    "description": "Populates table->table and view->table column lineage. Requires appropriate grants given to the role and the Snowflake Enterprise Edition or above.",
                    "default": true,
                    "type": "boolean"
                },
                "include_view_column_lineage": {
                    "title": "Include View Column Lineage",
                    "description": "Populates view->view and table->view column lineage.",
                    "default": false,
                    "type": "boolean"
                },
                "extract_tags": {
                    "description": "Optional. Allowed values are `without_lineage`, `with_lineage`, and `skip` (default). `without_lineage` only extracts tags that have been applied directly to the given entity. `with_lineage` extracts both directly applied and propagated tags, but will be significantly slower. See the [Snowflake documentation](https://docs.snowflake.com/en/user-guide/object-tagging.html#tag-lineage) for information about tag lineage/propagation. ",
                    "default": "skip",
                    "allOf": [
                        {
                            "$ref": "#/definitions/TagOption"
                        }
                    ]
                },
                "include_external_url": {
                    "title": "Include External Url",
                    "description": "Whether to populate Snowsight url for Snowflake Objects",
                    "default": true,
                    "type": "boolean"
                },
                "match_fully_qualified_names": {
                    "title": "Match Fully Qualified Names",
                    "description": "Whether `schema_pattern` is matched against fully qualified schema name `<catalog>.<schema>`.",
                    "default": false,
                    "type": "boolean"
                },
                "use_legacy_lineage_method": {
                    "title": "Use Legacy Lineage Method",
                    "description": "Whether to use the legacy lineage computation method. By default, uses new optimised lineage extraction method that requires less ingestion process memory. Table-to-view and view-to-view column-level lineage are not supported with the legacy method.",
                    "default": false,
                    "type": "boolean"
                },
                "validate_upstreams_against_patterns": {
                    "title": "Validate Upstreams Against Patterns",
                    "description": "Whether to validate upstream snowflake tables against allow-deny patterns",
                    "default": true,
                    "type": "boolean"
                },
                "tag_pattern": {
                    "title": "Tag Pattern",
                    "description": "List of regex patterns for tags to include in ingestion. Only used if `extract_tags` is enabled.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "temporary_tables_pattern": {
                    "title": "Temporary Tables Pattern",
                    "description": "[Advanced] Regex patterns for temporary tables to filter in lineage ingestion. Specify regex to match the entire table name in database.schema.table format. Defaults are to set in such a way to ignore the temporary staging tables created by known ETL tools. Not used if `use_legacy_lineage_method=True`",
                    "default": [
                        ".*\\.FIVETRAN_.*_STAGING\\..*",
                        ".*__DBT_TMP$",
                        ".*\\.SEGMENT_[a-f0-9]{8}[-_][a-f0-9]{4}[-_][a-f0-9]{4}[-_][a-f0-9]{4}[-_][a-f0-9]{12}",
                        ".*\\.STAGING_.*_[a-f0-9]{8}[-_][a-f0-9]{4}[-_][a-f0-9]{4}[-_][a-f0-9]{4}[-_][a-f0-9]{12}"
                    ],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "email_as_user_identifier": {
                    "title": "Email As User Identifier",
                    "description": "Format user urns as an email, if the snowflake user's email is set. If `email_domain` is provided, generates email addresses for snowflake users with unset emails, based on their username.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "account_id"
            ],
            "additionalProperties": false
        },
        "superset": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "superset"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/superset_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "superset_config": {
            "title": "SupersetConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Superset Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "Superset host URL.",
                    "default": "http://localhost:8088",
                    "type": "string"
                },
                "display_uri": {
                    "title": "Display Uri",
                    "description": "optional URL to use in links (if `connect_uri` is only for ingestion)",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Superset username.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Superset password.",
                    "type": "string"
                },
                "provider": {
                    "title": "Provider",
                    "description": "Superset provider.",
                    "default": "db",
                    "type": "string"
                },
                "options": {
                    "title": "Options",
                    "default": {},
                    "type": "object"
                },
                "env": {
                    "title": "Env",
                    "description": "Environment to use in namespace when constructing URNs",
                    "default": "PROD",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "Can be used to change mapping for database names in superset to what you have in datahub",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "unity-catalog": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "unity-catalog"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/unity-catalog_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "unity-catalog_config": {
            "title": "UnityCatalogSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "store_last_profiling_timestamps": {
                    "title": "Store Last Profiling Timestamps",
                    "description": "Enable storing last profile timestamp in store.",
                    "default": false,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Unity Catalog Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "token": {
                    "title": "Token",
                    "description": "Databricks personal access token",
                    "type": "string"
                },
                "workspace_url": {
                    "title": "Workspace Url",
                    "description": "Databricks workspace url. e.g. https://my-workspace.cloud.databricks.com",
                    "type": "string"
                },
                "workspace_name": {
                    "title": "Workspace Name",
                    "description": "Name of the workspace. Default to deployment name present in workspace_url",
                    "type": "string"
                },
                "catalog_pattern": {
                    "title": "Catalog Pattern",
                    "description": "Regex patterns for catalogs to filter in ingestion. Specify regex to match the full `metastore.catalog` name.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to the full `metastore.catalog.schema` name. e.g. to match all tables in schema analytics, use the regex `^mymetastore\\.mycatalog\\.analytics$`.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in `catalog.schema.table` format. e.g. to match all tables starting with customer in Customer catalog and public schema, use the regex `Customer\\.public\\.customer.*`.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to catalogs, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Option to enable/disable lineage generation.",
                    "default": true,
                    "type": "boolean"
                },
                "include_ownership": {
                    "title": "Include Ownership",
                    "description": "Option to enable/disable ownership generation for metastores, catalogs, schemas, and tables.",
                    "default": false,
                    "type": "boolean"
                },
                "include_column_lineage": {
                    "title": "Include Column Lineage",
                    "description": "Option to enable/disable lineage generation. Currently we have to call a rest call per column to get column level lineage due to the Databrick api which can slow down ingestion. ",
                    "default": true,
                    "type": "boolean"
                },
                "include_usage_statistics": {
                    "title": "Include Usage Statistics",
                    "description": "Generate usage statistics.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "description": "Data profiling configuration",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "warehouse_id": null,
                        "profile_table_level_only": false,
                        "pattern": {
                            "allow": [
                                ".*"
                            ],
                            "deny": [],
                            "ignoreCase": true
                        },
                        "call_analyze": true,
                        "max_wait_secs": 3600,
                        "max_workers": 10
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/UnityCatalogProfilerConfig"
                        }
                    ]
                }
            },
            "required": [
                "token",
                "workspace_url"
            ],
            "additionalProperties": false
        },
        "feast": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "feast"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/feast_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "feast_config": {
            "title": "FeastRepositorySourceConfig",
            "type": "object",
            "properties": {
                "path": {
                    "title": "Path",
                    "description": "Path to Feast repository",
                    "type": "string"
                },
                "fs_yaml_file": {
                    "title": "Fs Yaml File",
                    "description": "Path to the `feature_store.yaml` file used to configure the feature store",
                    "type": "string"
                },
                "environment": {
                    "title": "Environment",
                    "description": "Environment to use when constructing URNs",
                    "default": "PROD",
                    "type": "string"
                }
            },
            "required": [
                "path"
            ],
            "additionalProperties": false
        },
        "mode": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "mode"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/mode_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "mode_config": {
            "title": "ModeConfig",
            "description": "Any non-Dataset source that produces lineage to Datasets should inherit this class.\ne.g. Orchestrators, Pipelines, BI Tools etc.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "Mode host URL.",
                    "default": "https://app.mode.com",
                    "type": "string"
                },
                "token": {
                    "title": "Token",
                    "description": "Mode user token.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Mode password for authentication.",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "workspace": {
                    "title": "Workspace",
                    "type": "string"
                },
                "default_schema": {
                    "title": "Default Schema",
                    "description": "Default schema to use when schema is not provided in an SQL query",
                    "default": "public",
                    "type": "string"
                },
                "owner_username_instead_of_email": {
                    "title": "Owner Username Instead Of Email",
                    "description": "Use username for owner URN instead of Email",
                    "default": true,
                    "type": "boolean"
                },
                "api_options": {
                    "title": "Api Options",
                    "description": "Retry/Wait settings for Mode API to avoid \"Too many Requests\" error. See Mode API Options below",
                    "default": {
                        "retry_backoff_multiplier": 2,
                        "max_retry_interval": 10,
                        "max_attempts": 5
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/ModeAPIConfig"
                        }
                    ]
                }
            },
            "required": [
                "token",
                "password"
            ],
            "additionalProperties": false
        },
        "sqlalchemy": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "sqlalchemy"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/sqlalchemy_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "sqlalchemy_config": {
            "title": "SQLAlchemyGenericConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "platform": {
                    "title": "Platform",
                    "description": "Name of platform being ingested, used in constructing URNs.",
                    "type": "string"
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls",
                    "type": "string"
                }
            },
            "required": [
                "platform",
                "connect_uri"
            ],
            "additionalProperties": false
        },
        "hana": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "hana"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/hana_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "hana_config": {
            "title": "HanaConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "default": "localhost:39041",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "hana+hdbcli",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "iceberg": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "iceberg"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/iceberg_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "iceberg_config": {
            "title": "IcebergSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Iceberg Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "adls": {
                    "title": "Adls",
                    "description": "[Azure Data Lake Storage](https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) to crawl for Iceberg tables.  This is one filesystem type supported by this source and **only one can be configured**.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/AdlsSourceConfig"
                        }
                    ]
                },
                "localfs": {
                    "title": "Localfs",
                    "description": "Local path to crawl for Iceberg tables. This is one filesystem type supported by this source and **only one can be configured**.",
                    "type": "string"
                },
                "max_path_depth": {
                    "title": "Max Path Depth",
                    "description": "Maximum folder depth to crawl for Iceberg tables.  Folders deeper than this value will be silently ignored.",
                    "default": 2,
                    "type": "integer"
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "user_ownership_property": {
                    "title": "User Ownership Property",
                    "description": "Iceberg table property to look for a `CorpUser` owner.  Can only hold a single user value.  If property has no value, no owner information will be emitted.",
                    "default": "owner",
                    "type": "string"
                },
                "group_ownership_property": {
                    "title": "Group Ownership Property",
                    "description": "Iceberg table property to look for a `CorpGroup` owner.  Can only hold a single group value.  If property has no value, no owner information will be emitted.",
                    "type": "string"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "include_field_null_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        }
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/IcebergProfilingConfig"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "pulsar": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "pulsar"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/pulsar_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "pulsar_config": {
            "title": "PulsarSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "see Stateful Ingestion",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "web_service_url": {
                    "title": "Web Service Url",
                    "description": "The web URL for the cluster.",
                    "default": "http://localhost:8080",
                    "type": "string"
                },
                "timeout": {
                    "title": "Timeout",
                    "description": "Timout setting, how long to wait for the Pulsar rest api to send data before giving up",
                    "default": 5,
                    "type": "integer"
                },
                "issuer_url": {
                    "title": "Issuer Url",
                    "description": "The complete URL for a Custom Authorization Server. Mandatory for OAuth based authentication.",
                    "type": "string"
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "The application's client ID",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "The application's client secret",
                    "type": "string"
                },
                "token": {
                    "title": "Token",
                    "description": "The access token for the application. Mandatory for token based authentication.",
                    "type": "string"
                },
                "verify_ssl": {
                    "title": "Verify Ssl",
                    "description": "Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use.",
                    "default": true,
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "type": "string"
                        }
                    ]
                },
                "tenant_patterns": {
                    "title": "Tenant Patterns",
                    "description": "List of regex patterns for tenants to include/exclude from ingestion. By default all tenants are allowed.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "pulsar"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "namespace_patterns": {
                    "title": "Namespace Patterns",
                    "description": "List of regex patterns for namespaces to include/exclude from ingestion. By default the functions namespace is denied.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "public/functions"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "topic_patterns": {
                    "title": "Topic Patterns",
                    "description": "List of regex patterns for topics to include/exclude from ingestion. By default the Pulsar system topics are denied.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "/__.*$"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "exclude_individual_partitions": {
                    "title": "Exclude Individual Partitions",
                    "description": "Extract each individual partitioned topic. e.g. when turned off a topic with 100 partitions will result in 100 Datasets.",
                    "default": true,
                    "type": "boolean"
                },
                "tenants": {
                    "title": "Tenants",
                    "description": "Listing all tenants requires superUser role, alternative you can set a list of tenants you want to scrape using the tenant admin role",
                    "default": [],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "domain": {
                    "title": "Domain",
                    "description": "Domain patterns",
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "oid_config": {
                    "title": "Oid Config",
                    "description": "Placeholder for OpenId discovery document",
                    "type": "object"
                }
            },
            "additionalProperties": false
        },
        "delta-lake": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "delta-lake"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/delta-lake_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "delta-lake_config": {
            "title": "DeltaLakeSourceConfig",
            "description": "Any source that connects to a platform should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "base_path": {
                    "title": "Base Path",
                    "description": "Path to table (s3 or local file system). If path is not a delta table path then all subfolders will be scanned to detect and ingest delta tables.",
                    "type": "string"
                },
                "relative_path": {
                    "title": "Relative Path",
                    "description": "If set, delta-tables will be searched at location '<base_path>/<relative_path>' and URNs will be created using relative_path only.",
                    "type": "string"
                },
                "platform": {
                    "title": "Platform",
                    "description": "The platform that this source connects to",
                    "default": "delta-lake",
                    "const": "delta-lake",
                    "type": "string"
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "regex patterns for tables to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "version_history_lookback": {
                    "title": "Version History Lookback",
                    "description": "Number of previous version histories to be ingested. Defaults to 1. If set to -1 all version history will be ingested.",
                    "default": 1,
                    "type": "integer"
                },
                "require_files": {
                    "title": "Require Files",
                    "description": "Whether DeltaTable should track files. Consider setting this to `False` for large delta tables, resulting in significant memory reduction for ingestion process.When set to `False`, number_of_files in delta table can not be reported.",
                    "default": true,
                    "type": "boolean"
                },
                "s3": {
                    "$ref": "#/definitions/S3"
                }
            },
            "required": [
                "base_path"
            ],
            "additionalProperties": false
        },
        "azure-ad": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "azure-ad"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/azure-ad_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "azure-ad_config": {
            "title": "AzureADConfig",
            "description": "Config to create a token and connect to Azure AD instance",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "Azure AD Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "Application ID. Found in your app registration on Azure AD Portal",
                    "type": "string"
                },
                "tenant_id": {
                    "title": "Tenant Id",
                    "description": "Directory ID. Found in your app registration on Azure AD Portal",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "Client secret. Found in your app registration on Azure AD Portal",
                    "type": "string"
                },
                "authority": {
                    "title": "Authority",
                    "description": "The authority (https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-client-application-configuration) is a URL that indicates a directory that MSAL can request tokens from.",
                    "type": "string"
                },
                "token_url": {
                    "title": "Token Url",
                    "description": "The token URL that acquires a token from Azure AD for authorizing requests.  This source will only work with v1.0 endpoint.",
                    "type": "string"
                },
                "redirect": {
                    "title": "Redirect",
                    "description": "Redirect URI.  Found in your app registration on Azure AD Portal.",
                    "default": "https://login.microsoftonline.com/common/oauth2/nativeclient",
                    "type": "string"
                },
                "graph_url": {
                    "title": "Graph Url",
                    "description": "[Microsoft Graph API endpoint](https://docs.microsoft.com/en-us/graph/use-the-api)",
                    "default": "https://graph.microsoft.com/v1.0",
                    "type": "string"
                },
                "azure_ad_response_to_username_attr": {
                    "title": "Azure Ad Response To Username Attr",
                    "description": "Which Azure AD User Response attribute to use as input to DataHub username mapping.",
                    "default": "userPrincipalName",
                    "type": "string"
                },
                "azure_ad_response_to_username_regex": {
                    "title": "Azure Ad Response To Username Regex",
                    "description": "A regex used to parse the DataHub username from the attribute specified in `azure_ad_response_to_username_attr`.",
                    "default": "(.*)",
                    "type": "string"
                },
                "azure_ad_response_to_groupname_attr": {
                    "title": "Azure Ad Response To Groupname Attr",
                    "description": "Which Azure AD Group Response attribute to use as input to DataHub group name mapping.",
                    "default": "displayName",
                    "type": "string"
                },
                "azure_ad_response_to_groupname_regex": {
                    "title": "Azure Ad Response To Groupname Regex",
                    "description": "A regex used to parse the DataHub group name from the attribute specified in `azure_ad_response_to_groupname_attr`.",
                    "default": "(.*)",
                    "type": "string"
                },
                "ingest_users": {
                    "title": "Ingest Users",
                    "description": "Whether users should be ingested into DataHub.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_groups": {
                    "title": "Ingest Groups",
                    "description": "Whether groups should be ingested into DataHub.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_group_membership": {
                    "title": "Ingest Group Membership",
                    "description": "Whether group membership should be ingested into DataHub. ingest_groups must be True if this is True.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_groups_users": {
                    "title": "Ingest Groups Users",
                    "description": "This option is useful only when `ingest_users` is set to False and `ingest_group_membership` to True. As effect, only the users which belongs to the selected groups will be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "users_pattern": {
                    "title": "Users Pattern",
                    "description": "regex patterns for users to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "groups_pattern": {
                    "title": "Groups Pattern",
                    "description": "regex patterns for groups to include in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "filtered_tracking": {
                    "title": "Filtered Tracking",
                    "description": "If enabled, report will contain names of filtered users and groups.",
                    "default": true,
                    "type": "boolean"
                },
                "mask_group_id": {
                    "title": "Mask Group Id",
                    "description": "Whether workunit ID's for groups should be masked to avoid leaking sensitive information.",
                    "default": true,
                    "type": "boolean"
                },
                "mask_user_id": {
                    "title": "Mask User Id",
                    "description": "Whether workunit ID's for users should be masked to avoid leaking sensitive information.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "client_id",
                "tenant_id",
                "client_secret",
                "authority",
                "token_url"
            ],
            "additionalProperties": false
        },
        "openapi": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "openapi"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/openapi_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "openapi_config": {
            "title": "OpenApiConfig",
            "type": "object",
            "properties": {
                "name": {
                    "title": "Name",
                    "type": "string"
                },
                "url": {
                    "title": "Url",
                    "type": "string"
                },
                "swagger_file": {
                    "title": "Swagger File",
                    "type": "string"
                },
                "ignore_endpoints": {
                    "title": "Ignore Endpoints",
                    "default": [],
                    "type": "array",
                    "items": {}
                },
                "username": {
                    "title": "Username",
                    "default": "",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "default": "",
                    "type": "string"
                },
                "forced_examples": {
                    "title": "Forced Examples",
                    "default": {},
                    "type": "object"
                },
                "token": {
                    "title": "Token",
                    "type": "string"
                },
                "get_token": {
                    "title": "Get Token",
                    "default": {},
                    "type": "object"
                }
            },
            "required": [
                "name",
                "url",
                "swagger_file"
            ],
            "additionalProperties": false
        },
        "kafka": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "kafka"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/kafka_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "kafka_config": {
            "title": "KafkaSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "connection": {
                    "title": "Connection",
                    "default": {
                        "bootstrap": "localhost:9092",
                        "schema_registry_url": "http://localhost:8080/schema-registry/api/",
                        "schema_registry_config": {},
                        "client_timeout_seconds": 60,
                        "consumer_config": {}
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/KafkaConsumerConnectionConfig"
                        }
                    ]
                },
                "topic_patterns": {
                    "title": "Topic Patterns",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "^_.*"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "A map of domain names to allow deny patterns. Domains can be urn-based (`urn:li:domain:13ae4d85-d955-49fc-8474-9004c663a810`) or bare (`13ae4d85-d955-49fc-8474-9004c663a810`).",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "topic_subject_map": {
                    "title": "Topic Subject Map",
                    "description": "Provides the mapping for the `key` and the `value` schemas of a topic to the corresponding schema registry subject name. Each entry of this map has the form `<topic_name>-key`:`<schema_registry_subject_name_for_key_schema>` and `<topic_name>-value`:`<schema_registry_subject_name_for_value_schema>` for the key and the value schemas associated with the topic, respectively. This parameter is mandatory when the [RecordNameStrategy](https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#how-the-naming-strategies-work) is used as the subject naming strategy in the kafka schema registry. NOTE: When provided, this overrides the default subject name resolution even when the `TopicNameStrategy` or the `TopicRecordNameStrategy` are used.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "schema_registry_class": {
                    "title": "Schema Registry Class",
                    "description": "The fully qualified implementation class(custom) that implements the KafkaSchemaRegistryBase interface.",
                    "default": "datahub.ingestion.source.confluent_schema_registry.ConfluentSchemaRegistry",
                    "type": "string"
                },
                "ignore_warnings_on_schema_type": {
                    "title": "Ignore Warnings On Schema Type",
                    "description": "Disables warnings reported for non-AVRO/Protobuf value or key schemas if set.",
                    "default": false,
                    "type": "boolean"
                },
                "disable_topic_record_naming_strategy": {
                    "title": "Disable Topic Record Naming Strategy",
                    "description": "Disables the utilization of the TopicRecordNameStrategy for Schema Registry subjects. For more information, visit: https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#handling-differences-between-preregistered-and-client-derived-schemas:~:text=io.confluent.kafka.serializers.subject.TopicRecordNameStrategy",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "datahub-lineage-file": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "datahub-lineage-file"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/datahub-lineage-file_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "datahub-lineage-file_config": {
            "title": "LineageFileSourceConfig",
            "type": "object",
            "properties": {
                "file": {
                    "title": "File",
                    "description": "File path or URL to lineage file to ingest.",
                    "type": "string"
                },
                "preserve_upstream": {
                    "title": "Preserve Upstream",
                    "description": "Whether we want to query datahub-gms for upstream data. False means it will hard replace upstream data for a given entity. True means it will query the backend for existing upstreams and include it in the ingestion run",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "file"
            ],
            "additionalProperties": false
        },
        "postgres": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "postgres"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/postgres_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "postgres_config": {
            "title": "PostgresConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "information_schema"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog). If set to Null, all databases will be considered for ingestion.",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "description": "database scheme",
                    "default": "postgresql+psycopg2",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion. Note: this is not used if `database` or `sqlalchemy_uri` are provided.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "initial_database": {
                    "title": "Initial Database",
                    "description": "Initial database used to query for the list of databases, when ingesting multiple databases. Note: this is not used if `database` or `sqlalchemy_uri` are provided.",
                    "default": "postgres",
                    "type": "string"
                },
                "include_view_lineage": {
                    "title": "Include View Lineage",
                    "description": "Include table lineage for views",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "gcs": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "gcs"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/gcs_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "gcs_config": {
            "title": "GCSSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "path_specs": {
                    "title": "Path Specs",
                    "description": "List of PathSpec. See [below](#path-spec) the details about PathSpec",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/PathSpec"
                    }
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "credential": {
                    "title": "Credential",
                    "description": "Google cloud storage [HMAC keys](https://cloud.google.com/storage/docs/authentication/hmackeys)",
                    "allOf": [
                        {
                            "$ref": "#/definitions/HMACKey"
                        }
                    ]
                },
                "max_rows": {
                    "title": "Max Rows",
                    "description": "Maximum number of rows to use when inferring schemas for TSV and CSV files.",
                    "default": 100,
                    "type": "integer"
                },
                "number_of_files_to_sample": {
                    "title": "Number Of Files To Sample",
                    "description": "Number of files to list to sample for schema inference. This will be ignored if sample_files is set to False in the pathspec.",
                    "default": 100,
                    "type": "integer"
                }
            },
            "required": [
                "path_specs",
                "credential"
            ],
            "additionalProperties": false
        },
        "csv-enricher": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "csv-enricher"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/csv-enricher_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "csv-enricher_config": {
            "title": "CSVEnricherConfig",
            "type": "object",
            "properties": {
                "filename": {
                    "title": "Filename",
                    "description": "File path or URL of CSV file to ingest.",
                    "type": "string"
                },
                "write_semantics": {
                    "title": "Write Semantics",
                    "description": "Whether the new tags, terms and owners to be added will override the existing ones added only by this source or not. Value for this config can be \"PATCH\" or \"OVERRIDE\"",
                    "default": "PATCH",
                    "type": "string"
                },
                "delimiter": {
                    "title": "Delimiter",
                    "description": "Delimiter to use when parsing CSV",
                    "default": ",",
                    "type": "string"
                },
                "array_delimiter": {
                    "title": "Array Delimiter",
                    "description": "Delimiter to use when parsing array fields (tags, terms and owners)",
                    "default": "|",
                    "type": "string"
                }
            },
            "required": [
                "filename"
            ],
            "additionalProperties": false
        },
        "metabase": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "metabase"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/metabase_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "metabase_config": {
            "title": "MetabaseConfig",
            "description": "Any non-Dataset source that produces lineage to Datasets should inherit this class.\ne.g. Orchestrators, Pipelines, BI Tools etc.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "Metabase host URL.",
                    "default": "localhost:3000",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Metabase username.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Metabase password.",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "database_alias_map": {
                    "title": "Database Alias Map",
                    "description": "Database name map to use when constructing dataset URN.",
                    "type": "object"
                },
                "engine_platform_map": {
                    "title": "Engine Platform Map",
                    "description": "Custom mappings between metabase database engines and DataHub platforms",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "database_id_to_instance_map": {
                    "title": "Database Id To Instance Map",
                    "description": "Custom mappings between metabase database id and DataHub platform instance",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "default_schema": {
                    "title": "Default Schema",
                    "description": "Default schema name to use when schema is not provided in an SQL query",
                    "default": "public",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "athena": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "athena"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/athena_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "athena_config": {
            "title": "AthenaConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": false,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "awsathena+rest",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Username credential. If not specified, detected with boto3 rules. See https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Same detection scheme as username",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "database": {
                    "title": "Database",
                    "description": "The athena database to ingest from. If not set it will be autodetected",
                    "type": "string"
                },
                "aws_region": {
                    "title": "Aws Region",
                    "description": "Aws region where your Athena database is located",
                    "type": "string"
                },
                "aws_role_arn": {
                    "title": "Aws Role Arn",
                    "description": "AWS Role arn for Pyathena to assume in its connection",
                    "type": "string"
                },
                "aws_role_assumption_duration": {
                    "title": "Aws Role Assumption Duration",
                    "description": "Duration to assume the AWS Role for. Maximum of 43200 (12 hours)",
                    "default": 3600,
                    "type": "integer"
                },
                "s3_staging_dir": {
                    "title": "S3 Staging Dir",
                    "description": "[deprecated in favor of `query_result_location`] S3 query location",
                    "deprecated": true,
                    "type": "string"
                },
                "work_group": {
                    "title": "Work Group",
                    "description": "The name of your Amazon Athena Workgroups",
                    "type": "string"
                },
                "catalog_name": {
                    "title": "Catalog Name",
                    "description": "Athena Catalog Name",
                    "default": "awsdatacatalog",
                    "type": "string"
                },
                "query_result_location": {
                    "title": "Query Result Location",
                    "description": "S3 path to the [query result bucket](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location) which should be used by AWS Athena to store results of thequeries executed by DataHub.",
                    "type": "string"
                }
            },
            "required": [
                "aws_region",
                "work_group",
                "query_result_location"
            ],
            "additionalProperties": false
        },
        "trino": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "trino"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/trino_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "trino_config": {
            "title": "TrinoConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "tableau": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "tableau"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/tableau_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "tableau_config": {
            "title": "TableauConfig",
            "description": "Any non-Dataset source that produces lineage to Datasets should inherit this class.\ne.g. Orchestrators, Pipelines, BI Tools etc.",
            "type": "object",
            "properties": {
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "Tableau host URL.",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Tableau username, must be set if authenticating using username/password.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Tableau password, must be set if authenticating using username/password.",
                    "type": "string"
                },
                "token_name": {
                    "title": "Token Name",
                    "description": "Tableau token name, must be set if authenticating using a personal access token.",
                    "type": "string"
                },
                "token_value": {
                    "title": "Token Value",
                    "description": "Tableau token value, must be set if authenticating using a personal access token.",
                    "type": "string"
                },
                "site": {
                    "title": "Site",
                    "description": "Tableau Site. Always required for Tableau Online. Use emptystring to connect with Default site on Tableau Server.",
                    "default": "",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "ssl_verify": {
                    "title": "Ssl Verify",
                    "description": "Whether to verify SSL certificates. If using self-signed certificates, set to false or provide the path to the .pem certificate bundle.",
                    "default": true,
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "type": "string"
                        }
                    ]
                },
                "extract_column_level_lineage": {
                    "title": "Extract Column Level Lineage",
                    "description": "When enabled, extracts column-level lineage from Tableau Datasources",
                    "default": true,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "Environment to use in namespace when constructing URNs.",
                    "default": "PROD",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "projects": {
                    "title": "Projects",
                    "description": "[deprecated] Use project_pattern instead. List of tableau projects ",
                    "default": [
                        "default"
                    ],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "project_pattern": {
                    "title": "Project Pattern",
                    "description": "Filter for specific Tableau projects. For example, use 'My Project' to ingest a root-level Project with name 'My Project', or 'My Project/Nested Project' to ingest a nested Project with name 'Nested Project'. By default, all Projects nested inside a matching Project will be included in ingestion. You can both allow and deny projects based on their name using their name, or a Regex pattern. Deny patterns always take precedence over allow patterns. By default, all projects will be ingested.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "project_path_separator": {
                    "title": "Project Path Separator",
                    "description": "The separator used for the project_pattern field between project names. By default, we use a slash. You can change this if your Tableau projects contain slashes in their names, and you'd like to filter by project.",
                    "default": "/",
                    "type": "string"
                },
                "default_schema_map": {
                    "title": "Default Schema Map",
                    "description": "Default schema to use when schema is not found.",
                    "default": {},
                    "type": "object"
                },
                "ingest_tags": {
                    "title": "Ingest Tags",
                    "description": "Ingest Tags from source. This will override Tags entered from UI",
                    "default": false,
                    "type": "boolean"
                },
                "ingest_owner": {
                    "title": "Ingest Owner",
                    "description": "Ingest Owner from source. This will override Owner info entered from UI",
                    "default": false,
                    "type": "boolean"
                },
                "ingest_tables_external": {
                    "title": "Ingest Tables External",
                    "description": "Ingest details for tables external to (not embedded in) tableau as entities.",
                    "default": false,
                    "type": "boolean"
                },
                "page_size": {
                    "title": "Page Size",
                    "description": "[advanced] Number of metadata objects (e.g. CustomSQLTable, PublishedDatasource, etc) to query at a time using the Tableau API.",
                    "default": 10,
                    "type": "integer"
                },
                "workbook_page_size": {
                    "title": "Workbook Page Size",
                    "description": "[advanced] Number of workbooks to query at a time using the Tableau API.",
                    "default": 1,
                    "type": "integer"
                },
                "lineage_overrides": {
                    "title": "Lineage Overrides",
                    "description": "Mappings to change generated dataset urns. Use only if you really know what you are doing.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/TableauLineageOverrides"
                        }
                    ]
                },
                "extract_usage_stats": {
                    "title": "Extract Usage Stats",
                    "description": "[experimental] Extract usage statistics for dashboards and charts.",
                    "default": false,
                    "type": "boolean"
                },
                "ingest_embed_url": {
                    "title": "Ingest Embed Url",
                    "description": "Ingest a URL to render an embedded Preview of assets within Tableau.",
                    "default": false,
                    "type": "boolean"
                },
                "ingest_external_links_for_dashboards": {
                    "title": "Ingest External Links For Dashboards",
                    "description": "Ingest a URL to link out to from dashboards.",
                    "default": true,
                    "type": "boolean"
                },
                "ingest_external_links_for_charts": {
                    "title": "Ingest External Links For Charts",
                    "description": "Ingest a URL to link out to from charts.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_project_hierarchy": {
                    "title": "Extract Project Hierarchy",
                    "description": "Whether to extract entire project hierarchy for nested projects.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_lineage_from_unsupported_custom_sql_queries": {
                    "title": "Extract Lineage From Unsupported Custom Sql Queries",
                    "description": "[Experimental] Whether to extract lineage from unsupported custom sql queries using SQL parsing",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "connect_uri"
            ],
            "additionalProperties": false
        },
        "mssql": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "mssql"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/mssql_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "mssql_config": {
            "title": "SQLServerConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "MSSQL host URL.",
                    "default": "localhost:1433",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog). If set to Null, all databases will be considered for ingestion.",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "use_odbc": {
                    "title": "Use Odbc",
                    "description": "See https://docs.sqlalchemy.org/en/14/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pyodbc.",
                    "default": false,
                    "type": "boolean"
                },
                "uri_args": {
                    "title": "Uri Args",
                    "description": "Arguments to URL-encode when connecting. See https://docs.microsoft.com/en-us/sql/connect/odbc/dsn-connection-string-attribute?view=sql-server-ver15.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "convert_urns_to_lowercase": {
                    "title": "Convert Urns To Lowercase",
                    "description": "Enable to convert the SQL Server assets urns to lowercase",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "nifi": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "nifi"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/nifi_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "nifi_config": {
            "title": "NifiSourceConfig",
            "description": "Any source that produces dataset urns in a single environment should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "site_url": {
                    "title": "Site Url",
                    "description": "URL for Nifi, ending with /nifi/. e.g. https://mynifi.domain/nifi/",
                    "type": "string"
                },
                "auth": {
                    "description": "Nifi authentication. must be one of : NO_AUTH, SINGLE_USER, CLIENT_CERT, KERBEROS",
                    "default": "NO_AUTH",
                    "allOf": [
                        {
                            "$ref": "#/definitions/NifiAuthType"
                        }
                    ]
                },
                "provenance_days": {
                    "title": "Provenance Days",
                    "description": "time window to analyze provenance events for external datasets",
                    "default": 7,
                    "type": "integer"
                },
                "process_group_pattern": {
                    "title": "Process Group Pattern",
                    "description": "regex patterns for filtering process groups",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "site_name": {
                    "title": "Site Name",
                    "description": "Site name to identify this site with, useful when using input and output ports receiving remote connections",
                    "default": "default",
                    "type": "string"
                },
                "site_url_to_site_name": {
                    "title": "Site Url To Site Name",
                    "description": "Lookup to find site_name for site_url ending with /nifi/, required if using remote process groups in nifi flow",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "username": {
                    "title": "Username",
                    "description": "Nifi username, must be set for auth = \"SINGLE_USER\"",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Nifi password, must be set for auth = \"SINGLE_USER\"",
                    "type": "string"
                },
                "client_cert_file": {
                    "title": "Client Cert File",
                    "description": "Path to PEM file containing the public certificates for the user/client identity, must be set for auth = \"CLIENT_CERT\"",
                    "type": "string"
                },
                "client_key_file": {
                    "title": "Client Key File",
                    "description": "Path to PEM file containing the client\u2019s secret key",
                    "type": "string"
                },
                "client_key_password": {
                    "title": "Client Key Password",
                    "description": "The password to decrypt the client_key_file",
                    "type": "string"
                },
                "ca_file": {
                    "title": "Ca File",
                    "description": "Path to PEM file containing certs for the root CA(s) for the NiFi",
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "type": "string"
                        }
                    ]
                }
            },
            "required": [
                "site_url"
            ],
            "additionalProperties": false
        },
        "ldap": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "ldap"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/ldap_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "ldap_config": {
            "title": "LDAPSourceConfig",
            "description": "Config used by the LDAP Source.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "ldap_server": {
                    "title": "Ldap Server",
                    "description": "LDAP server URL.",
                    "type": "string"
                },
                "ldap_user": {
                    "title": "Ldap User",
                    "description": "LDAP user.",
                    "type": "string"
                },
                "ldap_password": {
                    "title": "Ldap Password",
                    "description": "LDAP password.",
                    "type": "string"
                },
                "base_dn": {
                    "title": "Base Dn",
                    "description": "LDAP DN.",
                    "type": "string"
                },
                "filter": {
                    "title": "Filter",
                    "description": "LDAP extractor filter.",
                    "default": "(objectClass=*)",
                    "type": "string"
                },
                "attrs_list": {
                    "title": "Attrs List",
                    "description": "Retrieved attributes list",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "custom_props_list": {
                    "title": "Custom Props List",
                    "description": "A list of custom attributes to extract from the LDAP provider.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "drop_missing_first_last_name": {
                    "title": "Drop Missing First Last Name",
                    "description": "If set to true, any users without first and last names will be dropped.",
                    "default": true,
                    "type": "boolean"
                },
                "page_size": {
                    "title": "Page Size",
                    "description": "Size of each page to fetch when extracting metadata.",
                    "default": 20,
                    "type": "integer"
                },
                "manager_filter_enabled": {
                    "title": "Manager Filter Enabled",
                    "description": "Use LDAP extractor filter to search managers.",
                    "default": true,
                    "type": "boolean"
                },
                "manager_pagination_enabled": {
                    "title": "Manager Pagination Enabled",
                    "description": "[deprecated] Use pagination_enabled ",
                    "default": true,
                    "type": "boolean"
                },
                "pagination_enabled": {
                    "title": "Pagination Enabled",
                    "description": "Use pagination while do search query (enabled by default).",
                    "default": true,
                    "type": "boolean"
                },
                "user_attrs_map": {
                    "title": "User Attrs Map",
                    "default": {},
                    "type": "object"
                },
                "group_attrs_map": {
                    "title": "Group Attrs Map",
                    "default": {},
                    "type": "object"
                }
            },
            "required": [
                "ldap_server",
                "ldap_user",
                "ldap_password",
                "base_dn"
            ],
            "additionalProperties": false
        },
        "dbt-cloud": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "dbt-cloud"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/dbt-cloud_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "dbt-cloud_config": {
            "title": "DBTCloudConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "incremental_lineage": {
                    "title": "Incremental Lineage",
                    "description": "When enabled, emits lineage as incremental to existing lineage already in DataHub. When disabled, re-states lineage on each run.",
                    "default": true,
                    "type": "boolean"
                },
                "sql_parser_use_external_process": {
                    "title": "Sql Parser Use External Process",
                    "description": "When enabled, sql parser will run in isolated in a separate process. This can affect processing time but can protect from sql parser's mem leak.",
                    "default": false,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "Environment to use in namespace when constructing URNs.",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "title": "Stateful Ingestion",
                    "description": "DBT Stateful Ingestion Config.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                        }
                    ]
                },
                "target_platform": {
                    "title": "Target Platform",
                    "description": "The platform that dbt is loading onto. (e.g. bigquery / redshift / postgres etc.)",
                    "type": "string"
                },
                "target_platform_instance": {
                    "title": "Target Platform Instance",
                    "description": "The platform instance for the platform that dbt is operating on. Use this if you have multiple instances of the same platform (e.g. redshift) and need to distinguish between them.",
                    "type": "string"
                },
                "use_identifiers": {
                    "title": "Use Identifiers",
                    "description": "Use model identifier instead of model name if defined (if not, default to model name).",
                    "default": false,
                    "type": "boolean"
                },
                "entities_enabled": {
                    "title": "Entities Enabled",
                    "description": "Controls for enabling / disabling metadata emission for different dbt entities (models, test definitions, test results, etc.)",
                    "default": {
                        "models": "YES",
                        "sources": "YES",
                        "seeds": "YES",
                        "snapshots": "YES",
                        "test_definitions": "YES",
                        "test_results": "YES"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/DBTEntitiesEnabled"
                        }
                    ]
                },
                "tag_prefix": {
                    "title": "Tag Prefix",
                    "description": "Prefix added to tags during ingestion.",
                    "default": "dbt:",
                    "type": "string"
                },
                "node_name_pattern": {
                    "title": "Node Name Pattern",
                    "description": "regex patterns for dbt model names to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "meta_mapping": {
                    "title": "Meta Mapping",
                    "description": "mapping rules that will be executed against dbt meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "column_meta_mapping": {
                    "title": "Column Meta Mapping",
                    "description": "mapping rules that will be executed against dbt column meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "query_tag_mapping": {
                    "title": "Query Tag Mapping",
                    "description": "mapping rules that will be executed against dbt query_tag meta properties. Refer to the section below on dbt meta automated mappings.",
                    "default": {},
                    "type": "object"
                },
                "write_semantics": {
                    "title": "Write Semantics",
                    "description": "Whether the new tags, terms and owners to be added will override the existing ones added only by this source or not. Value for this config can be \"PATCH\" or \"OVERRIDE\"",
                    "default": "PATCH",
                    "type": "string"
                },
                "strip_user_ids_from_email": {
                    "title": "Strip User Ids From Email",
                    "description": "Whether or not to strip email id while adding owners using dbt meta actions.",
                    "default": false,
                    "type": "boolean"
                },
                "enable_owner_extraction": {
                    "title": "Enable Owner Extraction",
                    "description": "When enabled, ownership info will be extracted from the dbt meta",
                    "default": true,
                    "type": "boolean"
                },
                "owner_extraction_pattern": {
                    "title": "Owner Extraction Pattern",
                    "description": "Regex string to extract owner from the dbt node using the `(?P<name>...) syntax` of the [match object](https://docs.python.org/3/library/re.html#match-objects), where the group name must be `owner`. Examples: (1)`r\"(?P<owner>(.*)): (\\w+) (\\w+)\"` will extract `jdoe` as the owner from `\"jdoe: John Doe\"` (2) `r\"@(?P<owner>(.*))\"` will extract `alice` as the owner from `\"@alice\"`.",
                    "type": "string"
                },
                "include_env_in_assertion_guid": {
                    "title": "Include Env In Assertion Guid",
                    "description": "Prior to version 0.9.4.2, the assertion GUIDs did not include the environment. If you're using multiple dbt ingestion that are only distinguished by env, then you should set this flag to True.",
                    "default": false,
                    "type": "boolean"
                },
                "convert_column_urns_to_lowercase": {
                    "title": "Convert Column Urns To Lowercase",
                    "description": "When enabled, converts column URNs to lowercase to ensure cross-platform compatibility. If `target_platform` is Snowflake, the default is True.",
                    "default": false,
                    "type": "boolean"
                },
                "enable_meta_mapping": {
                    "title": "Enable Meta Mapping",
                    "description": "When enabled, applies the mappings that are defined through the meta_mapping directives.",
                    "default": true,
                    "type": "boolean"
                },
                "enable_query_tag_mapping": {
                    "title": "Enable Query Tag Mapping",
                    "description": "When enabled, applies the mappings that are defined through the `query_tag_mapping` directives.",
                    "default": true,
                    "type": "boolean"
                },
                "metadata_endpoint": {
                    "title": "Metadata Endpoint",
                    "description": "The dbt Cloud metadata API endpoint.",
                    "default": "https://metadata.cloud.getdbt.com/graphql",
                    "type": "string"
                },
                "token": {
                    "title": "Token",
                    "description": "The API token to use to authenticate with DBT Cloud.",
                    "type": "string"
                },
                "account_id": {
                    "title": "Account Id",
                    "description": "The DBT Cloud account ID to use.",
                    "type": "integer"
                },
                "project_id": {
                    "title": "Project Id",
                    "description": "The dbt Cloud project ID to use.",
                    "type": "integer"
                },
                "job_id": {
                    "title": "Job Id",
                    "description": "The ID of the job to ingest metadata from.",
                    "type": "integer"
                },
                "run_id": {
                    "title": "Run Id",
                    "description": "The ID of the run to ingest metadata from. If not specified, we'll default to the latest run.",
                    "type": "integer"
                }
            },
            "required": [
                "target_platform",
                "token",
                "account_id",
                "project_id",
                "job_id"
            ],
            "additionalProperties": false
        },
        "file": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "file"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/file_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "file_config": {
            "title": "FileSourceConfig",
            "type": "object",
            "properties": {
                "path": {
                    "title": "Path",
                    "description": "File path to folder or file to ingest, or URL to a remote file. If pointed to a folder, all files with extension {file_extension} (default json) within that folder will be processed.",
                    "type": "string"
                },
                "file_extension": {
                    "title": "File Extension",
                    "description": "When providing a folder to use to read files, set this field to control file extensions that you want the source to process. * is a special value that means process every file regardless of extension",
                    "default": ".json",
                    "type": "string"
                },
                "read_mode": {
                    "default": "AUTO",
                    "allOf": [
                        {
                            "$ref": "#/definitions/FileReadMode"
                        }
                    ]
                },
                "aspect": {
                    "title": "Aspect",
                    "description": "Set to an aspect to only read this aspect for ingestion.",
                    "type": "string"
                },
                "count_all_before_starting": {
                    "title": "Count All Before Starting",
                    "description": "When enabled, counts total number of records in the file before starting. Used for accurate estimation of completion time. Turn it off if startup time is too high.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "path"
            ],
            "additionalProperties": false
        },
        "s3": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "s3"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/s3_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "s3_config": {
            "title": "DataLakeSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "path_specs": {
                    "title": "Path Specs",
                    "description": "List of PathSpec. See [below](#path-spec) the details about PathSpec",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/PathSpec"
                    }
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "platform": {
                    "title": "Platform",
                    "description": "The platform that this source connects to (either 's3' or 'file'). If not specified, the platform will be inferred from the path_specs.",
                    "default": "",
                    "type": "string"
                },
                "aws_config": {
                    "title": "Aws Config",
                    "description": "AWS configuration",
                    "allOf": [
                        {
                            "$ref": "#/definitions/AwsConnectionConfig"
                        }
                    ]
                },
                "use_s3_bucket_tags": {
                    "title": "Use S3 Bucket Tags",
                    "description": "Whether or not to create tags in datahub from the s3 bucket",
                    "type": "boolean"
                },
                "use_s3_object_tags": {
                    "title": "Use S3 Object Tags",
                    "description": "Whether or not to create tags in datahub from the s3 object",
                    "type": "boolean"
                },
                "profile_patterns": {
                    "title": "Profile Patterns",
                    "description": "regex patterns for tables to profile ",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profiling": {
                    "title": "Profiling",
                    "description": "Data profiling configuration",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "profile_table_level_only": false,
                        "max_number_of_fields_to_profile": null,
                        "include_field_null_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": true,
                        "include_field_distinct_value_frequencies": true,
                        "include_field_histogram": true,
                        "include_field_sample_values": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/DataLakeProfilerConfig"
                        }
                    ]
                },
                "spark_driver_memory": {
                    "title": "Spark Driver Memory",
                    "description": "Max amount of memory to grant Spark.",
                    "default": "4g",
                    "type": "string"
                },
                "spark_config": {
                    "title": "Spark Config",
                    "description": "Spark configuration properties to set on the SparkSession. Put config property names into quotes. For example: '\"spark.executor.memory\": \"2g\"'",
                    "default": {},
                    "type": "object"
                },
                "max_rows": {
                    "title": "Max Rows",
                    "description": "Maximum number of rows to use when inferring schemas for TSV and CSV files.",
                    "default": 100,
                    "type": "integer"
                },
                "verify_ssl": {
                    "title": "Verify Ssl",
                    "description": "Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use.",
                    "default": true,
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "type": "string"
                        }
                    ]
                },
                "number_of_files_to_sample": {
                    "title": "Number Of Files To Sample",
                    "description": "Number of files to list to sample for schema inference. This will be ignored if sample_files is set to False in the pathspec.",
                    "default": 100,
                    "type": "integer"
                }
            },
            "required": [
                "path_specs"
            ],
            "additionalProperties": false
        },
        "looker": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "looker"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/looker_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "looker_config": {
            "title": "LookerDashboardSourceConfig",
            "description": "Any source that is a primary producer of Dataset metadata should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "explore_naming_pattern": {
                    "title": "Explore Naming Pattern",
                    "description": "Pattern for providing dataset names to explores. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "{model}.explore.{name}"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "explore_browse_pattern": {
                    "title": "Explore Browse Pattern",
                    "description": "Pattern for providing browse paths to explores. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "/{env}/{platform}/{project}/explores"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "view_naming_pattern": {
                    "title": "View Naming Pattern",
                    "description": "Pattern for providing dataset names to views. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "{project}.view.{name}"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "view_browse_pattern": {
                    "title": "View Browse Pattern",
                    "description": "Pattern for providing browse paths to views. Allowed variables are ['platform', 'env', 'project', 'model', 'name']",
                    "default": {
                        "pattern": "/{env}/{platform}/{project}/views"
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/LookerNamingPattern"
                        }
                    ]
                },
                "tag_measures_and_dimensions": {
                    "title": "Tag Measures And Dimensions",
                    "description": "When enabled, attaches tags to measures, dimensions and dimension groups to make them more discoverable. When disabled, adds this information to the description of the column.",
                    "default": true,
                    "type": "boolean"
                },
                "platform_name": {
                    "title": "Platform Name",
                    "description": "Default platform name. Don't change.",
                    "default": "looker",
                    "type": "string"
                },
                "extract_column_level_lineage": {
                    "title": "Extract Column Level Lineage",
                    "description": "When enabled, extracts column-level lineage from Views and Explores",
                    "default": true,
                    "type": "boolean"
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "Looker API client id.",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "Looker API client secret.",
                    "type": "string"
                },
                "base_url": {
                    "title": "Base Url",
                    "description": "Url to your Looker instance: `https://company.looker.com:19999` or `https://looker.company.com`, or similar. Used for making API calls to Looker and constructing clickable dashboard and chart urls.",
                    "type": "string"
                },
                "transport_options": {
                    "title": "Transport Options",
                    "description": "Populates the [TransportOptions](https://github.com/looker-open-source/sdk-codegen/blob/94d6047a0d52912ac082eb91616c1e7c379ab262/python/looker_sdk/rtl/transport.py#L70) struct for looker client",
                    "allOf": [
                        {
                            "$ref": "#/definitions/TransportOptionsConfig"
                        }
                    ]
                },
                "dashboard_pattern": {
                    "title": "Dashboard Pattern",
                    "description": "Patterns for selecting dashboard ids that are to be included",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "chart_pattern": {
                    "title": "Chart Pattern",
                    "description": "Patterns for selecting chart ids that are to be included",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_deleted": {
                    "title": "Include Deleted",
                    "description": "Whether to include deleted dashboards and looks.",
                    "default": false,
                    "type": "boolean"
                },
                "extract_owners": {
                    "title": "Extract Owners",
                    "description": "When enabled, extracts ownership from Looker directly. When disabled, ownership is left empty for dashboards and charts.",
                    "default": true,
                    "type": "boolean"
                },
                "actor": {
                    "title": "Actor",
                    "description": "This config is deprecated in favor of `extract_owners`. Previously, was the actor to use in ownership properties of ingested metadata.",
                    "type": "string"
                },
                "strip_user_ids_from_email": {
                    "title": "Strip User Ids From Email",
                    "description": "When enabled, converts Looker user emails of the form name@domain.com to urn:li:corpuser:name when assigning ownership",
                    "default": false,
                    "type": "boolean"
                },
                "skip_personal_folders": {
                    "title": "Skip Personal Folders",
                    "description": "Whether to skip ingestion of dashboards in personal folders. Setting this to True will only ingest dashboards in the Shared folder space.",
                    "default": false,
                    "type": "boolean"
                },
                "max_threads": {
                    "title": "Max Threads",
                    "description": "Max parallelism for Looker API calls. Defaults to cpuCount or 40",
                    "default": 2,
                    "type": "integer"
                },
                "external_base_url": {
                    "title": "External Base Url",
                    "description": "Optional URL to use when constructing external URLs to Looker if the `base_url` is not the correct one to use. For example, `https://looker-public.company.com`. If not provided, the external base URL will default to `base_url`.",
                    "type": "string"
                },
                "extract_usage_history": {
                    "title": "Extract Usage History",
                    "description": "Whether to ingest usage statistics for dashboards. Setting this to True will query looker system activity explores to fetch historical dashboard usage.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_usage_history_for_interval": {
                    "title": "Extract Usage History For Interval",
                    "description": "Used only if extract_usage_history is set to True. Interval to extract looker dashboard usage history for. See https://docs.looker.com/reference/filter-expressions#date_and_time.",
                    "default": "30 days",
                    "type": "string"
                },
                "extract_embed_urls": {
                    "title": "Extract Embed Urls",
                    "description": "Produce URLs used to render Looker Explores as Previews inside of DataHub UI. Embeds must be enabled inside of Looker to use this feature.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_independent_looks": {
                    "title": "Extract Independent Looks",
                    "description": "Extract looks which are not part of any Dashboard. To enable this flag the stateful_ingestion should also be enabled.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "client_id",
                "client_secret",
                "base_url"
            ],
            "additionalProperties": false
        },
        "salesforce": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "salesforce"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/salesforce_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "salesforce_config": {
            "title": "SalesforceConfig",
            "description": "Any source that is a primary producer of Dataset metadata should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "auth": {
                    "default": "USERNAME_PASSWORD",
                    "allOf": [
                        {
                            "$ref": "#/definitions/SalesforceAuthType"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "Salesforce username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Password for Salesforce user",
                    "type": "string"
                },
                "consumer_key": {
                    "title": "Consumer Key",
                    "description": "Consumer key for Salesforce JSON web token access",
                    "type": "string"
                },
                "private_key": {
                    "title": "Private Key",
                    "description": "Private key as a string for Salesforce JSON web token access",
                    "type": "string"
                },
                "security_token": {
                    "title": "Security Token",
                    "description": "Security token for Salesforce username",
                    "type": "string"
                },
                "instance_url": {
                    "title": "Instance Url",
                    "description": "Salesforce instance url. e.g. https://MyDomainName.my.salesforce.com",
                    "type": "string"
                },
                "is_sandbox": {
                    "title": "Is Sandbox",
                    "description": "Connect to Sandbox instance of your Salesforce",
                    "default": false,
                    "type": "boolean"
                },
                "access_token": {
                    "title": "Access Token",
                    "description": "Access token for instance url",
                    "type": "string"
                },
                "ingest_tags": {
                    "title": "Ingest Tags",
                    "description": "Ingest Tags from source. This will override Tags entered from UI",
                    "default": false,
                    "type": "boolean"
                },
                "object_pattern": {
                    "title": "Object Pattern",
                    "description": "Regex patterns for Salesforce objects to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Regex patterns for tables/schemas to describe domain_key domain key (domain_key can be any string like \"sales\".) There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        }
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/SalesforceProfilingConfig"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns for profiles to filter in ingestion, allowed by the `object_pattern`.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "platform": {
                    "title": "Platform",
                    "default": "salesforce",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "hive": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "hive"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/hive_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "hive_config": {
            "title": "HiveConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Deprecated in favour of database_pattern.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "mariadb": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "mariadb"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/mariadb_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "mariadb_config": {
            "title": "MySQLConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Deprecated in favour of database_pattern.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "MySQL host URL.",
                    "default": "localhost:3306",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "mysql+pymysql",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "clickhouse": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "clickhouse"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/clickhouse_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "clickhouse_config": {
            "title": "ClickHouseConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Deprecated in favour of database_pattern.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "default": "",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "ClickHouse host URL.",
                    "default": "localhost:8123",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "secure": {
                    "title": "Secure",
                    "type": "boolean"
                },
                "protocol": {
                    "title": "Protocol",
                    "type": "string"
                },
                "uri_opts": {
                    "title": "Uri Opts",
                    "description": "The part of the URI and it's used to provide additional configuration options or parameters for the database connection.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Whether table lineage should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_materialized_views": {
                    "title": "Include Materialized Views",
                    "default": true,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "mongodb": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "mongodb"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/mongodb_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "mongodb_config": {
            "title": "MongoDBConfig",
            "description": "Any source that produces dataset urns in a single environment should inherit this class",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "MongoDB connection URI.",
                    "default": "mongodb://localhost",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "MongoDB username.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "MongoDB password.",
                    "type": "string"
                },
                "authMechanism": {
                    "title": "Authmechanism",
                    "description": "MongoDB authentication mechanism.",
                    "type": "string"
                },
                "options": {
                    "title": "Options",
                    "description": "Additional options to pass to `pymongo.MongoClient()`.",
                    "default": {},
                    "type": "object"
                },
                "enableSchemaInference": {
                    "title": "Enableschemainference",
                    "description": "Whether to infer schemas. ",
                    "default": true,
                    "type": "boolean"
                },
                "schemaSamplingSize": {
                    "title": "Schemasamplingsize",
                    "description": "Number of documents to use when inferring schema size. If set to `0`, all documents will be scanned.",
                    "default": 1000,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "useRandomSampling": {
                    "title": "Userandomsampling",
                    "description": "If documents for schema inference should be randomly selected. If `False`, documents will be selected from start.",
                    "default": true,
                    "type": "boolean"
                },
                "maxSchemaSize": {
                    "title": "Maxschemasize",
                    "description": "Maximum number of fields to include in the schema.",
                    "default": 300,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "maxDocumentSize": {
                    "title": "Maxdocumentsize",
                    "default": 16793600,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "collection_pattern": {
                    "title": "Collection Pattern",
                    "description": "regex patterns for collections to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "json-schema": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "json-schema"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/json-schema_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "json-schema_config": {
            "title": "JsonSchemaSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "path": {
                    "title": "Path",
                    "description": "Set this to a single file-path or a directory-path (for recursive traversal) or a remote url. e.g. https://json.schemastore.org/petstore-v1.0.json",
                    "anyOf": [
                        {
                            "type": "string",
                            "format": "file-path"
                        },
                        {
                            "type": "string",
                            "format": "directory-path"
                        },
                        {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 65536,
                            "format": "uri"
                        }
                    ]
                },
                "platform": {
                    "title": "Platform",
                    "description": "Set this to a platform that you want all schemas to live under. e.g. schemaregistry / schemarepo etc.",
                    "type": "string"
                },
                "use_id_as_base_uri": {
                    "title": "Use Id As Base Uri",
                    "description": "When enabled, uses the `$id` field in the json schema as the base uri for following references.",
                    "default": false,
                    "type": "boolean"
                },
                "uri_replace_pattern": {
                    "title": "Uri Replace Pattern",
                    "description": "Use this if URI-s need to be modified during reference resolution. Simple string match - replace capabilities are supported.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/URIReplacePattern"
                        }
                    ]
                }
            },
            "required": [
                "path",
                "platform"
            ],
            "additionalProperties": false
        },
        "datahub-business-glossary": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "datahub-business-glossary"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/datahub-business-glossary_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "datahub-business-glossary_config": {
            "title": "BusinessGlossarySourceConfig",
            "type": "object",
            "properties": {
                "file": {
                    "title": "File",
                    "description": "File path or URL to business glossary file to ingest.",
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "string",
                            "format": "path"
                        }
                    ]
                },
                "enable_auto_id": {
                    "title": "Enable Auto Id",
                    "description": "Generate guid urns instead of a plaintext path urn with the node/term's hierarchy.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "required": [
                "file"
            ],
            "additionalProperties": false
        },
        "presto": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "presto"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/presto_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "presto_config": {
            "title": "PrestoConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "redshift-legacy": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "redshift-legacy"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/redshift-legacy_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "redshift-legacy_config": {
            "title": "RedshiftConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "s3_lineage_config": {
                    "title": "S3 Lineage Config",
                    "description": "Common config for S3 lineage generation",
                    "allOf": [
                        {
                            "$ref": "#/definitions/S3LineageProviderConfig"
                        }
                    ]
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "information_schema"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "default_schema": {
                    "title": "Default Schema",
                    "description": "The default schema to use if the sql parser fails to parse the schema with `sql_based` lineage collector",
                    "default": "public",
                    "type": "string"
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Whether table lineage should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_copy_lineage": {
                    "title": "Include Copy Lineage",
                    "description": "Whether lineage should be collected from copy commands",
                    "default": true,
                    "type": "boolean"
                },
                "include_unload_lineage": {
                    "title": "Include Unload Lineage",
                    "description": "Whether lineage should be collected from unload commands",
                    "default": true,
                    "type": "boolean"
                },
                "capture_lineage_query_parser_failures": {
                    "title": "Capture Lineage Query Parser Failures",
                    "description": "Whether to capture lineage query parser errors with dataset properties for debuggings",
                    "default": false,
                    "type": "boolean"
                },
                "table_lineage_mode": {
                    "description": "Which table lineage collector mode to use. Available modes are: [stl_scan_based, sql_based, mixed]",
                    "default": "stl_scan_based",
                    "allOf": [
                        {
                            "$ref": "#/definitions/LineageMode"
                        }
                    ]
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "kafka-connect": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "kafka-connect"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/kafka-connect_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "kafka-connect_config": {
            "title": "KafkaConnectSourceConfig",
            "description": "Any source that connects to a platform should inherit this class",
            "type": "object",
            "properties": {
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "Platform instance mapping to use when constructing URNs. e.g.`platform_instance_map: { \"hive\": \"warehouse\" }`",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "connect_uri": {
                    "title": "Connect Uri",
                    "description": "URI to connect to.",
                    "default": "http://localhost:8083/",
                    "type": "string"
                },
                "username": {
                    "title": "Username",
                    "description": "Kafka Connect username.",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "Kafka Connect password.",
                    "type": "string"
                },
                "cluster_name": {
                    "title": "Cluster Name",
                    "description": "Cluster to ingest from.",
                    "default": "connect-cluster",
                    "type": "string"
                },
                "convert_lineage_urns_to_lowercase": {
                    "title": "Convert Lineage Urns To Lowercase",
                    "description": "Whether to convert the urns of ingested lineage dataset to lowercase",
                    "default": false,
                    "type": "boolean"
                },
                "connector_patterns": {
                    "title": "Connector Patterns",
                    "description": "regex patterns for connectors to filter for ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "provided_configs": {
                    "title": "Provided Configs",
                    "description": "Provided Configurations",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/ProvidedConfig"
                    }
                },
                "connect_to_platform_map": {
                    "title": "Connect To Platform Map",
                    "description": "Platform instance mapping when multiple instances for a platform is available. Entry for a platform should be in either `platform_instance_map` or `connect_to_platform_map`. e.g.`connect_to_platform_map: { \"postgres-connector-finance-db\": \"postgres\": \"core_finance_instance\" }`",
                    "type": "object",
                    "additionalProperties": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        }
                    }
                },
                "generic_connectors": {
                    "title": "Generic Connectors",
                    "description": "Provide lineage graph for sources connectors other than Confluent JDBC Source Connector, Debezium Source Connector, and Mongo Source Connector",
                    "default": [],
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/GenericConnectorConfig"
                    }
                }
            },
            "additionalProperties": false
        },
        "sagemaker": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "sagemaker"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/sagemaker_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "sagemaker_config": {
            "title": "SagemakerSourceConfig",
            "description": "Common AWS credentials config.\n\nCurrently used by:\n    - Glue source\n    - SageMaker source",
            "type": "object",
            "properties": {
                "aws_access_key_id": {
                    "title": "Aws Access Key Id",
                    "description": "AWS access key ID. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_secret_access_key": {
                    "title": "Aws Secret Access Key",
                    "description": "AWS secret access key. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_session_token": {
                    "title": "Aws Session Token",
                    "description": "AWS session token. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_role": {
                    "title": "Aws Role",
                    "description": "AWS roles to assume. If using the string format, the role ARN can be specified directly. If using the object format, the role can be specified in the RoleArn field and additional available arguments are documented at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html?highlight=assume_role#STS.Client.assume_role",
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/AwsAssumeRoleConfig"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "aws_profile": {
                    "title": "Aws Profile",
                    "description": "Named AWS profile to use. Only used if access key / secret are unset. If not set the default will be used",
                    "type": "string"
                },
                "aws_region": {
                    "title": "Aws Region",
                    "description": "AWS region code.",
                    "type": "string"
                },
                "aws_endpoint_url": {
                    "title": "Aws Endpoint Url",
                    "description": "The AWS service endpoint. This is normally [constructed automatically](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html), but can be overridden here.",
                    "type": "string"
                },
                "aws_proxy": {
                    "title": "Aws Proxy",
                    "description": "A set of proxy configs to use with AWS. See the [botocore.config](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html) docs for details.",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "regex patterns for tables to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "extract_feature_groups": {
                    "title": "Extract Feature Groups",
                    "description": "Whether to extract feature groups.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_models": {
                    "title": "Extract Models",
                    "description": "Whether to extract models.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_jobs": {
                    "title": "Extract Jobs",
                    "description": "Whether to extract AutoML jobs.",
                    "default": true,
                    "anyOf": [
                        {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        },
                        {
                            "type": "boolean"
                        }
                    ]
                }
            },
            "required": [
                "aws_region"
            ],
            "additionalProperties": false
        },
        "druid": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "druid"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/druid_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "druid_config": {
            "title": "DruidConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "regex patterns for schemas to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [
                            "^(lookup|sysgit|view).*"
                        ],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "druid",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                }
            },
            "required": [
                "host_port"
            ],
            "additionalProperties": false
        },
        "glue": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "glue"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/glue_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "glue_config": {
            "title": "GlueSourceConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "aws_access_key_id": {
                    "title": "Aws Access Key Id",
                    "description": "AWS access key ID. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_secret_access_key": {
                    "title": "Aws Secret Access Key",
                    "description": "AWS secret access key. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_session_token": {
                    "title": "Aws Session Token",
                    "description": "AWS session token. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_role": {
                    "title": "Aws Role",
                    "description": "AWS roles to assume. If using the string format, the role ARN can be specified directly. If using the object format, the role can be specified in the RoleArn field and additional available arguments are documented at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html?highlight=assume_role#STS.Client.assume_role",
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/AwsAssumeRoleConfig"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "aws_profile": {
                    "title": "Aws Profile",
                    "description": "Named AWS profile to use. Only used if access key / secret are unset. If not set the default will be used",
                    "type": "string"
                },
                "aws_region": {
                    "title": "Aws Region",
                    "description": "AWS region code.",
                    "type": "string"
                },
                "aws_endpoint_url": {
                    "title": "Aws Endpoint Url",
                    "description": "The AWS service endpoint. This is normally [constructed automatically](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html), but can be overridden here.",
                    "type": "string"
                },
                "aws_proxy": {
                    "title": "Aws Proxy",
                    "description": "A set of proxy configs to use with AWS. See the [botocore.config](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html) docs for details.",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "regex patterns for tables to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "platform": {
                    "title": "Platform",
                    "description": "The platform to use for the dataset URNs. Must be one of ['glue', 'athena'].",
                    "default": "glue",
                    "type": "string"
                },
                "extract_owners": {
                    "title": "Extract Owners",
                    "description": "When enabled, extracts ownership from Glue directly and overwrites existing owners. When disabled, ownership is left empty for datasets.",
                    "default": true,
                    "type": "boolean"
                },
                "extract_transforms": {
                    "title": "Extract Transforms",
                    "description": "Whether to extract Glue transform jobs.",
                    "default": true,
                    "type": "boolean"
                },
                "ignore_unsupported_connectors": {
                    "title": "Ignore Unsupported Connectors",
                    "description": "Whether to ignore unsupported connectors. If disabled, an error will be raised.",
                    "default": true,
                    "type": "boolean"
                },
                "emit_s3_lineage": {
                    "title": "Emit S3 Lineage",
                    "description": "Whether to emit S3-to-Glue lineage.",
                    "default": false,
                    "type": "boolean"
                },
                "glue_s3_lineage_direction": {
                    "title": "Glue S3 Lineage Direction",
                    "description": "If `upstream`, S3 is upstream to Glue. If `downstream` S3 is downstream to Glue.",
                    "default": "upstream",
                    "type": "string"
                },
                "domain": {
                    "title": "Domain",
                    "description": "regex patterns for tables to filter to assign domain_key. ",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "catalog_id": {
                    "title": "Catalog Id",
                    "description": "The aws account id where the target glue catalog lives. If None, datahub will ingest glue in aws caller's account.",
                    "type": "string"
                },
                "ignore_resource_links": {
                    "title": "Ignore Resource Links",
                    "description": "If set to True, ignore database resource links.",
                    "default": false,
                    "type": "boolean"
                },
                "use_s3_bucket_tags": {
                    "title": "Use S3 Bucket Tags",
                    "description": "If an S3 Buckets Tags should be created for the Tables ingested by Glue. Please Note that this will not apply tags to any folders ingested, only the files.",
                    "default": false,
                    "type": "boolean"
                },
                "use_s3_object_tags": {
                    "title": "Use S3 Object Tags",
                    "description": "If an S3 Objects Tags should be created for the Tables ingested by Glue.",
                    "default": false,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "description": "Configs to ingest data profiles from glue table",
                    "allOf": [
                        {
                            "$ref": "#/definitions/GlueProfilingConfig"
                        }
                    ]
                }
            },
            "required": [
                "aws_region"
            ],
            "additionalProperties": false
        },
        "clickhouse-usage": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "clickhouse-usage"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/clickhouse-usage_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "clickhouse-usage_config": {
            "title": "ClickHouseUsageConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "platform_instance_map": {
                    "title": "Platform Instance Map",
                    "description": "A holder for platform -> platform_instance mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "default": {},
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Deprecated in favour of database_pattern.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "default": "",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "ClickHouse host URL.",
                    "default": "localhost:8123",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "database_pattern": {
                    "title": "Database Pattern",
                    "description": "Regex patterns for databases to filter in ingestion.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "secure": {
                    "title": "Secure",
                    "type": "boolean"
                },
                "protocol": {
                    "title": "Protocol",
                    "type": "string"
                },
                "uri_opts": {
                    "title": "Uri Opts",
                    "description": "The part of the URI and it's used to provide additional configuration options or parameters for the database connection.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "include_table_lineage": {
                    "title": "Include Table Lineage",
                    "description": "Whether table lineage should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_materialized_views": {
                    "title": "Include Materialized Views",
                    "default": true,
                    "type": "boolean"
                },
                "email_domain": {
                    "title": "Email Domain",
                    "type": "string"
                },
                "query_log_table": {
                    "title": "Query Log Table",
                    "default": "system.query_log",
                    "type": "string"
                }
            },
            "required": [
                "email_domain"
            ],
            "additionalProperties": false
        },
        "starburst-trino-usage": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "starburst-trino-usage"
                    ]
                },
                "config": {
                    "$ref": "#/definitions/starburst-trino-usage_config"
                }
            },
            "required": [
                "type",
                "config"
            ]
        },
        "starburst-trino-usage_config": {
            "title": "TrinoUsageConfig",
            "description": "Base configuration class for stateful ingestion for source configs to inherit from.",
            "type": "object",
            "properties": {
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by this connector belong to",
                    "default": "PROD",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "The instance of the platform that all assets produced by this recipe belong to",
                    "type": "string"
                },
                "stateful_ingestion": {
                    "$ref": "#/definitions/StatefulStaleMetadataRemovalConfig"
                },
                "options": {
                    "title": "Options",
                    "default": {},
                    "type": "object"
                },
                "schema_pattern": {
                    "title": "Schema Pattern",
                    "description": "Regex patterns for schemas to filter in ingestion. Specify regex to only match the schema name. e.g. to match all tables in schema analytics, use the regex 'analytics'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns for tables to filter in ingestion. Specify regex to match the entire table name in database.schema.table format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "view_pattern": {
                    "title": "View Pattern",
                    "description": "Regex patterns for views to filter in ingestion. Note: Defaults to table_pattern if not specified. Specify regex to match the entire view name in database.schema.view format. e.g. to match all views starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "profile_pattern": {
                    "title": "Profile Pattern",
                    "description": "Regex patterns to filter tables (or specific columns) for profiling during ingestion. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "domain": {
                    "title": "Domain",
                    "description": "Attach domains to databases, schemas or tables during ingestion using regex patterns. Domain key can be a guid like *urn:li:domain:ec428203-ce86-4db3-985d-5a8ee6df32ba* or a string like \"Marketing\".) If you provide strings, then datahub will attempt to resolve this name to a guid, and will error out if this fails. There can be multiple domain keys specified.",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/AllowDenyPattern"
                    }
                },
                "include_views": {
                    "title": "Include Views",
                    "description": "Whether views should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_tables": {
                    "title": "Include Tables",
                    "description": "Whether tables should be ingested.",
                    "default": true,
                    "type": "boolean"
                },
                "include_table_location_lineage": {
                    "title": "Include Table Location Lineage",
                    "description": "If the source supports it, include table lineage to the underlying storage location.",
                    "default": true,
                    "type": "boolean"
                },
                "profiling": {
                    "title": "Profiling",
                    "default": {
                        "enabled": false,
                        "operation_config": {
                            "lower_freq_profile_enabled": false,
                            "profile_day_of_week": null,
                            "profile_date_of_month": null
                        },
                        "limit": null,
                        "offset": null,
                        "report_dropped_profiles": false,
                        "turn_off_expensive_profiling_metrics": false,
                        "profile_table_level_only": false,
                        "include_field_null_count": true,
                        "include_field_distinct_count": true,
                        "include_field_min_value": true,
                        "include_field_max_value": true,
                        "include_field_mean_value": true,
                        "include_field_median_value": true,
                        "include_field_stddev_value": true,
                        "include_field_quantiles": false,
                        "include_field_distinct_value_frequencies": false,
                        "include_field_histogram": false,
                        "include_field_sample_values": true,
                        "field_sample_values_limit": 20,
                        "max_number_of_fields_to_profile": null,
                        "profile_if_updated_since_days": null,
                        "profile_table_size_limit": 5,
                        "profile_table_row_limit": 5000000,
                        "profile_table_row_count_estimate_only": false,
                        "max_workers": 10,
                        "query_combiner_enabled": true,
                        "catch_exceptions": true,
                        "partition_profiling_enabled": true,
                        "partition_datetime": null
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/GEProfilingConfig"
                        }
                    ]
                },
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "host URL",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "The name of the catalog from getting the usage",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "email_domain": {
                    "title": "Email Domain",
                    "description": "The email domain which will be appended to the users ",
                    "type": "string"
                },
                "audit_catalog": {
                    "title": "Audit Catalog",
                    "description": "The catalog name where the audit table can be found ",
                    "type": "string"
                },
                "audit_schema": {
                    "title": "Audit Schema",
                    "description": "The schema name where the audit table can be found",
                    "type": "string"
                }
            },
            "required": [
                "host_port",
                "database",
                "email_domain",
                "audit_catalog",
                "audit_schema"
            ],
            "additionalProperties": false
        },
        "DynamicTypedStateProviderConfig": {
            "title": "DynamicTypedStateProviderConfig",
            "type": "object",
            "properties": {
                "type": {
                    "title": "Type",
                    "description": "The type of the state provider to use. For DataHub use `datahub`",
                    "type": "string"
                },
                "config": {
                    "title": "Config",
                    "description": "The configuration required for initializing the state provider. Default: The datahub_api config if set at pipeline level. Otherwise, the default DatahubClientConfig. See the defaults (https://github.com/datahub-project/datahub/blob/master/metadata-ingestion/src/datahub/ingestion/graph/client.py#L19)."
                }
            },
            "required": [
                "type"
            ],
            "additionalProperties": false
        },
        "StatefulStaleMetadataRemovalConfig": {
            "title": "StatefulStaleMetadataRemovalConfig",
            "description": "Base specialized config for Stateful Ingestion with stale metadata removal capability.",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "The type of the ingestion state provider registered with datahub.",
                    "default": false,
                    "type": "boolean"
                },
                "remove_stale_metadata": {
                    "title": "Remove Stale Metadata",
                    "description": "Soft-deletes the entities present in the last successful run but missing in the current run with stateful_ingestion enabled.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "AllowDenyPattern": {
            "title": "AllowDenyPattern",
            "description": "A class to store allow deny regexes",
            "type": "object",
            "properties": {
                "allow": {
                    "title": "Allow",
                    "description": "List of regex patterns to include in ingestion",
                    "default": [
                        ".*"
                    ],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "deny": {
                    "title": "Deny",
                    "description": "List of regex patterns to exclude from ingestion.",
                    "default": [],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "ignoreCase": {
                    "title": "Ignorecase",
                    "description": "Whether to ignore case sensitivity during pattern matching.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "OperationConfig": {
            "title": "OperationConfig",
            "type": "object",
            "properties": {
                "lower_freq_profile_enabled": {
                    "title": "Lower Freq Profile Enabled",
                    "description": "Whether to do profiling at lower freq or not. This does not do any scheduling just adds additional checks to when not to run profiling.",
                    "default": false,
                    "type": "boolean"
                },
                "profile_day_of_week": {
                    "title": "Profile Day Of Week",
                    "description": "Number between 0 to 6 for day of week (both inclusive). 0 is Monday and 6 is Sunday. If not specified, defaults to Nothing and this field does not take affect.",
                    "type": "integer"
                },
                "profile_date_of_month": {
                    "title": "Profile Date Of Month",
                    "description": "Number between 1 to 31 for date of month (both inclusive). If not specified, defaults to Nothing and this field does not take affect.",
                    "type": "integer"
                }
            },
            "additionalProperties": false
        },
        "GEProfilingConfig": {
            "title": "GEProfilingConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether profiling should be done.",
                    "default": false,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                },
                "limit": {
                    "title": "Limit",
                    "description": "Max number of documents to profile. By default, profiles all documents.",
                    "type": "integer"
                },
                "offset": {
                    "title": "Offset",
                    "description": "Offset in documents to profile. By default, uses no offset.",
                    "type": "integer"
                },
                "report_dropped_profiles": {
                    "title": "Report Dropped Profiles",
                    "description": "Whether to report datasets or dataset columns which were not profiled. Set to `True` for debugging purposes.",
                    "default": false,
                    "type": "boolean"
                },
                "turn_off_expensive_profiling_metrics": {
                    "title": "Turn Off Expensive Profiling Metrics",
                    "description": "Whether to turn off expensive profiling or not. This turns off profiling for quantiles, distinct_value_frequencies, histogram & sample_values. This also limits maximum number of fields being profiled to 10.",
                    "default": false,
                    "type": "boolean"
                },
                "profile_table_level_only": {
                    "title": "Profile Table Level Only",
                    "description": "Whether to perform profiling at table-level only, or include column-level profiling as well.",
                    "default": false,
                    "type": "boolean"
                },
                "include_field_null_count": {
                    "title": "Include Field Null Count",
                    "description": "Whether to profile for the number of nulls for each column.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_distinct_count": {
                    "title": "Include Field Distinct Count",
                    "description": "Whether to profile for the number of distinct values for each column.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_min_value": {
                    "title": "Include Field Min Value",
                    "description": "Whether to profile for the min value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_max_value": {
                    "title": "Include Field Max Value",
                    "description": "Whether to profile for the max value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_mean_value": {
                    "title": "Include Field Mean Value",
                    "description": "Whether to profile for the mean value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_median_value": {
                    "title": "Include Field Median Value",
                    "description": "Whether to profile for the median value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_stddev_value": {
                    "title": "Include Field Stddev Value",
                    "description": "Whether to profile for the standard deviation of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_quantiles": {
                    "title": "Include Field Quantiles",
                    "description": "Whether to profile for the quantiles of numeric columns.",
                    "default": false,
                    "type": "boolean"
                },
                "include_field_distinct_value_frequencies": {
                    "title": "Include Field Distinct Value Frequencies",
                    "description": "Whether to profile for distinct value frequencies.",
                    "default": false,
                    "type": "boolean"
                },
                "include_field_histogram": {
                    "title": "Include Field Histogram",
                    "description": "Whether to profile for the histogram for numeric fields.",
                    "default": false,
                    "type": "boolean"
                },
                "include_field_sample_values": {
                    "title": "Include Field Sample Values",
                    "description": "Whether to profile for the sample values for all columns.",
                    "default": true,
                    "type": "boolean"
                },
                "field_sample_values_limit": {
                    "title": "Field Sample Values Limit",
                    "description": "Upper limit for number of sample values to collect for all columns.",
                    "default": 20,
                    "type": "integer"
                },
                "max_number_of_fields_to_profile": {
                    "title": "Max Number Of Fields To Profile",
                    "description": "A positive integer that specifies the maximum number of columns to profile for any table. `None` implies all columns. The cost of profiling goes up significantly as the number of columns to profile goes up.",
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "profile_if_updated_since_days": {
                    "title": "Profile If Updated Since Days",
                    "description": "Profile table only if it has been updated since these many number of days. If set to `null`, no constraint of last modified time for tables to profile. Supported only in `snowflake` and `BigQuery`.",
                    "exclusiveMinimum": 0,
                    "type": "number"
                },
                "profile_table_size_limit": {
                    "title": "Profile Table Size Limit",
                    "description": "Profile tables only if their size is less then specified GBs. If set to `null`, no limit on the size of tables to profile. Supported only in `snowflake` and `BigQuery`",
                    "default": 5,
                    "type": "integer"
                },
                "profile_table_row_limit": {
                    "title": "Profile Table Row Limit",
                    "description": "Profile tables only if their row count is less then specified count. If set to `null`, no limit on the row count of tables to profile. Supported only in `snowflake` and `BigQuery`",
                    "default": 5000000,
                    "type": "integer"
                },
                "profile_table_row_count_estimate_only": {
                    "title": "Profile Table Row Count Estimate Only",
                    "description": "Use an approximate query for row count. This will be much faster but slightly less accurate. Only supported for Postgres and MySQL. ",
                    "default": false,
                    "type": "boolean"
                },
                "max_workers": {
                    "title": "Max Workers",
                    "description": "Number of worker threads to use for profiling. Set to 1 to disable.",
                    "default": 10,
                    "type": "integer"
                },
                "query_combiner_enabled": {
                    "title": "Query Combiner Enabled",
                    "description": "*This feature is still experimental and can be disabled if it causes issues.* Reduces the total number of queries issued and speeds up profiling by dynamically combining SQL queries where possible.",
                    "default": true,
                    "type": "boolean"
                },
                "catch_exceptions": {
                    "title": "Catch Exceptions",
                    "default": true,
                    "type": "boolean"
                },
                "partition_profiling_enabled": {
                    "title": "Partition Profiling Enabled",
                    "default": true,
                    "type": "boolean"
                },
                "partition_datetime": {
                    "title": "Partition Datetime",
                    "description": "For partitioned datasets profile only the partition which matches the datetime or profile the latest one if not set. Only Bigquery supports this.",
                    "type": "string",
                    "format": "date-time"
                }
            },
            "additionalProperties": false
        },
        "StatefulIngestionConfig": {
            "title": "StatefulIngestionConfig",
            "description": "Basic Stateful Ingestion Specific Configuration for any source.",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "The type of the ingestion state provider registered with datahub.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "MySQLConnectionConfig": {
            "title": "MySQLConnectionConfig",
            "type": "object",
            "properties": {
                "username": {
                    "title": "Username",
                    "description": "username",
                    "type": "string"
                },
                "password": {
                    "title": "Password",
                    "description": "password",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "host_port": {
                    "title": "Host Port",
                    "description": "MySQL host URL.",
                    "default": "localhost:3306",
                    "type": "string"
                },
                "database": {
                    "title": "Database",
                    "description": "database (catalog)",
                    "type": "string"
                },
                "database_alias": {
                    "title": "Database Alias",
                    "description": "[Deprecated] Alias to apply to database when ingesting.",
                    "type": "string"
                },
                "scheme": {
                    "title": "Scheme",
                    "default": "mysql+pymysql",
                    "type": "string"
                },
                "sqlalchemy_uri": {
                    "title": "Sqlalchemy Uri",
                    "description": "URI of database to connect to. See https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls. Takes precedence over other connection parameters.",
                    "type": "string"
                },
                "options": {
                    "title": "Options",
                    "description": "Any options specified here will be passed to [SQLAlchemy.create_engine](https://docs.sqlalchemy.org/en/14/core/engines.html#sqlalchemy.create_engine) as kwargs.",
                    "type": "object"
                }
            },
            "additionalProperties": false
        },
        "KafkaConsumerConnectionConfig": {
            "title": "KafkaConsumerConnectionConfig",
            "description": "Configuration class for holding connectivity information for Kafka consumers",
            "type": "object",
            "properties": {
                "bootstrap": {
                    "title": "Bootstrap",
                    "default": "localhost:9092",
                    "type": "string"
                },
                "schema_registry_url": {
                    "title": "Schema Registry Url",
                    "default": "http://localhost:8080/schema-registry/api/",
                    "type": "string"
                },
                "schema_registry_config": {
                    "title": "Schema Registry Config",
                    "description": "Extra schema registry config serialized as JSON. These options will be passed into Kafka's SchemaRegistryClient. https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html?#schemaregistryclient",
                    "type": "object"
                },
                "client_timeout_seconds": {
                    "title": "Client Timeout Seconds",
                    "description": "The request timeout used when interacting with the Kafka APIs.",
                    "default": 60,
                    "type": "integer"
                },
                "consumer_config": {
                    "title": "Consumer Config",
                    "description": "Extra consumer config serialized as JSON. These options will be passed into Kafka's DeserializingConsumer. See https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html#deserializingconsumer and https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md .",
                    "type": "object"
                }
            },
            "additionalProperties": false
        },
        "BucketDuration": {
            "title": "BucketDuration",
            "description": "An enumeration.",
            "enum": [
                "DAY",
                "HOUR"
            ],
            "type": "string"
        },
        "BigQueryUsageConfig": {
            "title": "BigQueryUsageConfig",
            "type": "object",
            "properties": {
                "bucket_duration": {
                    "description": "Size of the time window to aggregate usage stats.",
                    "default": "DAY",
                    "allOf": [
                        {
                            "$ref": "#/definitions/BucketDuration"
                        }
                    ]
                },
                "end_time": {
                    "title": "End Time",
                    "description": "Latest date of lineage/usage to consider. Default: Current time in UTC",
                    "type": "string",
                    "format": "date-time"
                },
                "start_time": {
                    "title": "Start Time",
                    "description": "Earliest date of lineage/usage to consider. Default: Last full day in UTC (or hour, depending on `bucket_duration`). You can also specify relative time with respect to end_time such as '-7 days' Or '-7d'.",
                    "type": "string",
                    "format": "date-time"
                },
                "top_n_queries": {
                    "title": "Top N Queries",
                    "description": "Number of top queries to save to each table.",
                    "default": 10,
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "user_email_pattern": {
                    "title": "User Email Pattern",
                    "description": "regex patterns for user emails to filter in usage.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "include_operational_stats": {
                    "title": "Include Operational Stats",
                    "description": "Whether to display operational stats.",
                    "default": true,
                    "type": "boolean"
                },
                "include_read_operational_stats": {
                    "title": "Include Read Operational Stats",
                    "description": "Whether to report read operational stats. Experimental.",
                    "default": false,
                    "type": "boolean"
                },
                "format_sql_queries": {
                    "title": "Format Sql Queries",
                    "description": "Whether to format sql queries",
                    "default": false,
                    "type": "boolean"
                },
                "include_top_n_queries": {
                    "title": "Include Top N Queries",
                    "description": "Whether to ingest the top_n_queries.",
                    "default": true,
                    "type": "boolean"
                },
                "max_query_duration": {
                    "title": "Max Query Duration",
                    "description": "Correction to pad start_time and end_time with. For handling the case where the read happens within our time range but the query completion event is delayed and happens after the configured end time.",
                    "default": 900.0,
                    "type": "number",
                    "format": "time-delta"
                },
                "apply_view_usage_to_tables": {
                    "title": "Apply View Usage To Tables",
                    "description": "Whether to apply view's usage to its base tables. If set to False, uses sql parser and applies usage to views / tables mentioned in the query. If set to True, usage is applied to base tables only.",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "BigQueryCredential": {
            "title": "BigQueryCredential",
            "type": "object",
            "properties": {
                "project_id": {
                    "title": "Project Id",
                    "description": "Project id to set the credentials",
                    "type": "string"
                },
                "private_key_id": {
                    "title": "Private Key Id",
                    "description": "Private key id",
                    "type": "string"
                },
                "private_key": {
                    "title": "Private Key",
                    "description": "Private key in a form of '-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n'",
                    "type": "string"
                },
                "client_email": {
                    "title": "Client Email",
                    "description": "Client email",
                    "type": "string"
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "Client Id",
                    "type": "string"
                },
                "auth_uri": {
                    "title": "Auth Uri",
                    "description": "Authentication uri",
                    "default": "https://accounts.google.com/o/oauth2/auth",
                    "type": "string"
                },
                "token_uri": {
                    "title": "Token Uri",
                    "description": "Token uri",
                    "default": "https://oauth2.googleapis.com/token",
                    "type": "string"
                },
                "auth_provider_x509_cert_url": {
                    "title": "Auth Provider X509 Cert Url",
                    "description": "Auth provider x509 certificate url",
                    "default": "https://www.googleapis.com/oauth2/v1/certs",
                    "type": "string"
                },
                "type": {
                    "title": "Type",
                    "description": "Authentication type",
                    "default": "service_account",
                    "type": "string"
                },
                "client_x509_cert_url": {
                    "title": "Client X509 Cert Url",
                    "description": "If not set it will be default to https://www.googleapis.com/robot/v1/metadata/x509/client_email",
                    "type": "string"
                }
            },
            "required": [
                "project_id",
                "private_key_id",
                "private_key",
                "client_email",
                "client_id"
            ],
            "additionalProperties": false
        },
        "LookerNamingPattern": {
            "title": "LookerNamingPattern",
            "type": "object",
            "properties": {
                "pattern": {
                    "title": "Pattern",
                    "type": "string"
                }
            },
            "required": [
                "pattern"
            ],
            "additionalProperties": false
        },
        "GitInfo": {
            "title": "GitInfo",
            "description": "A reference to a Git repository, including a deploy key that can be used to clone it.",
            "type": "object",
            "properties": {
                "repo": {
                    "title": "Repo",
                    "description": "Name of your Git repo e.g. https://github.com/datahub-project/datahub or https://gitlab.com/gitlab-org/gitlab. If organization/repo is provided, we assume it is a GitHub repo.",
                    "type": "string"
                },
                "branch": {
                    "title": "Branch",
                    "description": "Branch on which your files live by default. Typically main or master. This can also be a commit hash.",
                    "default": "main",
                    "type": "string"
                },
                "url_template": {
                    "title": "Url Template",
                    "description": "Template for generating a URL to a file in the repo e.g. '{repo_url}/blob/{branch}/{file_path}'. We can infer this for GitHub and GitLab repos, and it is otherwise required.It supports the following variables: {repo_url}, {branch}, {file_path}",
                    "type": "string"
                },
                "deploy_key_file": {
                    "title": "Deploy Key File",
                    "description": "A private key file that contains an ssh key that has been configured as a deploy key for this repository. Use a file where possible, else see deploy_key for a config field that accepts a raw string.",
                    "format": "file-path",
                    "type": "string"
                },
                "deploy_key": {
                    "title": "Deploy Key",
                    "description": "A private key that contains an ssh key that has been configured as a deploy key for this repository. See deploy_key_file if you want to use a file that contains this key.",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "repo_ssh_locator": {
                    "title": "Repo Ssh Locator",
                    "description": "The url to call `git clone` on. We infer this for github and gitlab repos, but it is required for other hosts.",
                    "type": "string"
                }
            },
            "required": [
                "repo"
            ],
            "additionalProperties": false
        },
        "LookerConnectionDefinition": {
            "title": "LookerConnectionDefinition",
            "type": "object",
            "properties": {
                "platform": {
                    "title": "Platform",
                    "type": "string"
                },
                "default_db": {
                    "title": "Default Db",
                    "type": "string"
                },
                "default_schema": {
                    "title": "Default Schema",
                    "type": "string"
                },
                "platform_instance": {
                    "title": "Platform Instance",
                    "type": "string"
                },
                "platform_env": {
                    "title": "Platform Env",
                    "description": "The environment that the platform is located in. Leaving this empty will inherit defaults from the top level Looker configuration",
                    "type": "string"
                }
            },
            "required": [
                "platform",
                "default_db"
            ],
            "additionalProperties": false
        },
        "TransportOptionsConfig": {
            "title": "TransportOptionsConfig",
            "type": "object",
            "properties": {
                "timeout": {
                    "title": "Timeout",
                    "type": "integer"
                },
                "headers": {
                    "title": "Headers",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "timeout",
                "headers"
            ],
            "additionalProperties": false
        },
        "LookerAPIConfig": {
            "title": "LookerAPIConfig",
            "type": "object",
            "properties": {
                "client_id": {
                    "title": "Client Id",
                    "description": "Looker API client id.",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "Looker API client secret.",
                    "type": "string"
                },
                "base_url": {
                    "title": "Base Url",
                    "description": "Url to your Looker instance: `https://company.looker.com:19999` or `https://looker.company.com`, or similar. Used for making API calls to Looker and constructing clickable dashboard and chart urls.",
                    "type": "string"
                },
                "transport_options": {
                    "title": "Transport Options",
                    "description": "Populates the [TransportOptions](https://github.com/looker-open-source/sdk-codegen/blob/94d6047a0d52912ac082eb91616c1e7c379ab262/python/looker_sdk/rtl/transport.py#L70) struct for looker client",
                    "allOf": [
                        {
                            "$ref": "#/definitions/TransportOptionsConfig"
                        }
                    ]
                }
            },
            "required": [
                "client_id",
                "client_secret",
                "base_url"
            ],
            "additionalProperties": false
        },
        "PathSpec": {
            "title": "PathSpec",
            "type": "object",
            "properties": {
                "include": {
                    "title": "Include",
                    "description": "Path to table. Name variable `{table}` is used to mark the folder with dataset. In absence of `{table}`, file level dataset will be created. Check below examples for more details.",
                    "type": "string"
                },
                "exclude": {
                    "title": "Exclude",
                    "description": "list of paths in glob pattern which will be excluded while scanning for the datasets",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "file_types": {
                    "title": "File Types",
                    "description": "Files with extenstions specified here (subset of default value) only will be scanned to create dataset. Other files will be omitted.",
                    "default": [
                        "csv",
                        "tsv",
                        "json",
                        "parquet",
                        "avro"
                    ],
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "default_extension": {
                    "title": "Default Extension",
                    "description": "For files without extension it will assume the specified file type. If it is not set the files without extensions will be skipped.",
                    "type": "string"
                },
                "table_name": {
                    "title": "Table Name",
                    "description": "Display name of the dataset.Combination of named variables from include path and strings",
                    "type": "string"
                },
                "enable_compression": {
                    "title": "Enable Compression",
                    "description": "Enable or disable processing compressed files. Currently .gz and .bz files are supported.",
                    "default": true,
                    "type": "boolean"
                },
                "sample_files": {
                    "title": "Sample Files",
                    "description": "Not listing all the files but only taking a handful amount of sample file to infer the schema. File count and file size calculation will be disabled. This can affect performance significantly if enabled",
                    "default": true,
                    "type": "boolean"
                }
            },
            "required": [
                "include"
            ],
            "additionalProperties": false
        },
        "S3LineageProviderConfig": {
            "title": "S3LineageProviderConfig",
            "description": "Any source that produces s3 lineage from/to Datasets should inherit this class.",
            "type": "object",
            "properties": {
                "path_specs": {
                    "title": "Path Specs",
                    "description": "List of PathSpec. See below the details about PathSpec",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/PathSpec"
                    }
                }
            },
            "required": [
                "path_specs"
            ],
            "additionalProperties": false
        },
        "LineageMode": {
            "title": "LineageMode",
            "description": "An enumeration.",
            "enum": [
                "sql_based",
                "stl_scan_based",
                "mixed"
            ]
        },
        "EmitDirective": {
            "title": "EmitDirective",
            "description": "A holder for directives for emission for specific types of entities",
            "enum": [
                "YES",
                "NO",
                "ONLY"
            ]
        },
        "DBTEntitiesEnabled": {
            "title": "DBTEntitiesEnabled",
            "description": "Controls which dbt entities are going to be emitted by this source",
            "type": "object",
            "properties": {
                "models": {
                    "description": "Emit metadata for dbt models when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                },
                "sources": {
                    "description": "Emit metadata for dbt sources when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                },
                "seeds": {
                    "description": "Emit metadata for dbt seeds when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                },
                "snapshots": {
                    "description": "Emit metadata for dbt snapshots when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                },
                "test_definitions": {
                    "description": "Emit metadata for test definitions when enabled when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                },
                "test_results": {
                    "description": "Emit metadata for test results when set to Yes or Only",
                    "default": "YES",
                    "allOf": [
                        {
                            "$ref": "#/definitions/EmitDirective"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "AwsAssumeRoleConfig": {
            "title": "AwsAssumeRoleConfig",
            "type": "object",
            "properties": {
                "RoleArn": {
                    "title": "Rolearn",
                    "description": "ARN of the role to assume.",
                    "type": "string"
                },
                "ExternalId": {
                    "title": "Externalid",
                    "description": "External ID to use when assuming the role.",
                    "type": "string"
                }
            },
            "required": [
                "RoleArn"
            ]
        },
        "AwsConnectionConfig": {
            "title": "AwsConnectionConfig",
            "description": "Common AWS credentials config.\n\nCurrently used by:\n    - Glue source\n    - SageMaker source\n    - dbt source",
            "type": "object",
            "properties": {
                "aws_access_key_id": {
                    "title": "Aws Access Key Id",
                    "description": "AWS access key ID. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_secret_access_key": {
                    "title": "Aws Secret Access Key",
                    "description": "AWS secret access key. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_session_token": {
                    "title": "Aws Session Token",
                    "description": "AWS session token. Can be auto-detected, see [the AWS boto3 docs](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html) for details.",
                    "type": "string"
                },
                "aws_role": {
                    "title": "Aws Role",
                    "description": "AWS roles to assume. If using the string format, the role ARN can be specified directly. If using the object format, the role can be specified in the RoleArn field and additional available arguments are documented at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html?highlight=assume_role#STS.Client.assume_role",
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/AwsAssumeRoleConfig"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "aws_profile": {
                    "title": "Aws Profile",
                    "description": "Named AWS profile to use. Only used if access key / secret are unset. If not set the default will be used",
                    "type": "string"
                },
                "aws_region": {
                    "title": "Aws Region",
                    "description": "AWS region code.",
                    "type": "string"
                },
                "aws_endpoint_url": {
                    "title": "Aws Endpoint Url",
                    "description": "The AWS service endpoint. This is normally [constructed automatically](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html), but can be overridden here.",
                    "type": "string"
                },
                "aws_proxy": {
                    "title": "Aws Proxy",
                    "description": "A set of proxy configs to use with AWS. See the [botocore.config](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html) docs for details.",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "aws_region"
            ],
            "additionalProperties": false
        },
        "GitReference": {
            "title": "GitReference",
            "description": "Reference to a hosted Git repository. Used to generate \"view source\" links.",
            "type": "object",
            "properties": {
                "repo": {
                    "title": "Repo",
                    "description": "Name of your Git repo e.g. https://github.com/datahub-project/datahub or https://gitlab.com/gitlab-org/gitlab. If organization/repo is provided, we assume it is a GitHub repo.",
                    "type": "string"
                },
                "branch": {
                    "title": "Branch",
                    "description": "Branch on which your files live by default. Typically main or master. This can also be a commit hash.",
                    "default": "main",
                    "type": "string"
                },
                "url_template": {
                    "title": "Url Template",
                    "description": "Template for generating a URL to a file in the repo e.g. '{repo_url}/blob/{branch}/{file_path}'. We can infer this for GitHub and GitLab repos, and it is otherwise required.It supports the following variables: {repo_url}, {branch}, {file_path}",
                    "type": "string"
                }
            },
            "required": [
                "repo"
            ],
            "additionalProperties": false
        },
        "PrestoOnHiveConfigMode": {
            "title": "PrestoOnHiveConfigMode",
            "description": "An enumeration.",
            "enum": [
                "hive",
                "presto",
                "presto-on-hive",
                "trino"
            ],
            "type": "string"
        },
        "PlatformDetail": {
            "title": "PlatformDetail",
            "type": "object",
            "properties": {
                "platform_instance": {
                    "title": "Platform Instance",
                    "description": "DataHub platform instance name. To generate correct urn for upstream dataset, this should match with platform instance name used in ingestion recipe of other datahub sources.",
                    "type": "string"
                },
                "env": {
                    "title": "Env",
                    "description": "The environment that all assets produced by DataHub platform ingestion source belong to",
                    "default": "PROD",
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "OwnershipMapping": {
            "title": "OwnershipMapping",
            "type": "object",
            "properties": {
                "create_corp_user": {
                    "title": "Create Corp User",
                    "description": "Whether ingest PowerBI user as Datahub Corpuser",
                    "default": true,
                    "type": "boolean"
                },
                "use_powerbi_email": {
                    "title": "Use Powerbi Email",
                    "description": "Use PowerBI User email to ingest as corpuser, default is powerbi user identifier",
                    "default": false,
                    "type": "boolean"
                },
                "remove_email_suffix": {
                    "title": "Remove Email Suffix",
                    "description": "Remove PowerBI User email suffix for example, @acryl.io",
                    "default": false,
                    "type": "boolean"
                },
                "dataset_configured_by_as_owner": {
                    "title": "Dataset Configured By As Owner",
                    "description": "Take PBI dataset configuredBy as dataset owner if exist",
                    "default": false,
                    "type": "boolean"
                },
                "owner_criteria": {
                    "title": "Owner Criteria",
                    "description": "Need to have certain authority to qualify as owner for example ['ReadWriteReshareExplore','Owner','Admin']",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "ElasticProfiling": {
            "title": "ElasticProfiling",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether to enable profiling for the elastic search source.",
                    "default": false,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "CollapseUrns": {
            "title": "CollapseUrns",
            "type": "object",
            "properties": {
                "urns_suffix_regex": {
                    "title": "Urns Suffix Regex",
                    "description": "List of regex patterns to remove from the name of the URN. All of the indices before removal of URNs are considered as the same dataset. These are applied in order for each URN.\n        The main case where you would want to have multiple of these if the name where you are trying to remove suffix from have different formats.\n        e.g. ending with -YYYY-MM-DD as well as ending -epochtime would require you to have 2 regex patterns to remove the suffixes across all URNs.",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "DynamicTypedClassifierConfig": {
            "title": "DynamicTypedClassifierConfig",
            "type": "object",
            "properties": {
                "type": {
                    "title": "Type",
                    "description": "The type of the classifier to use. For DataHub,  use `datahub`",
                    "type": "string"
                },
                "config": {
                    "title": "Config",
                    "description": "The configuration required for initializing the classifier. If not specified, uses defaults for classifer type."
                }
            },
            "required": [
                "type"
            ],
            "additionalProperties": false
        },
        "ClassificationConfig": {
            "title": "ClassificationConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether classification should be used to auto-detect glossary terms",
                    "default": false,
                    "type": "boolean"
                },
                "sample_size": {
                    "title": "Sample Size",
                    "description": "Number of sample values used for classification.",
                    "default": 100,
                    "type": "integer"
                },
                "max_workers": {
                    "title": "Max Workers",
                    "description": "Number of worker threads to use for classification. Set to 1 to disable.",
                    "default": 2,
                    "type": "integer"
                },
                "table_pattern": {
                    "title": "Table Pattern",
                    "description": "Regex patterns to filter tables for classification. This is used in combination with other patterns in parent config. Specify regex to match the entire table name in `database.schema.table` format. e.g. to match all tables starting with customer in Customer database and public schema, use the regex 'Customer.public.customer.*'",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "column_pattern": {
                    "title": "Column Pattern",
                    "description": "Regex patterns to filter columns for classification. This is used in combination with other patterns in parent config. Specify regex to match the column name in `database.schema.table.column` format.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "info_type_to_term": {
                    "title": "Info Type To Term",
                    "description": "Optional mapping to provide glossary term identifier for info type",
                    "default": {},
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "classifiers": {
                    "title": "Classifiers",
                    "description": "Classifiers to use to auto-detect glossary terms. If more than one classifier, infotype predictions from the classifier defined later in sequence take precedance.",
                    "default": [
                        {
                            "type": "datahub",
                            "config": null
                        }
                    ],
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/DynamicTypedClassifierConfig"
                    }
                }
            },
            "additionalProperties": false
        },
        "OAuthIdentityProvider": {
            "title": "OAuthIdentityProvider",
            "description": "An enumeration.",
            "enum": [
                "microsoft",
                "okta"
            ]
        },
        "OAuthConfiguration": {
            "title": "OAuthConfiguration",
            "type": "object",
            "properties": {
                "provider": {
                    "description": "Identity provider for oauth.Supported providers are microsoft and okta.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OAuthIdentityProvider"
                        }
                    ]
                },
                "authority_url": {
                    "title": "Authority Url",
                    "description": "Authority url of your identity provider",
                    "type": "string"
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "client id of your registered application",
                    "type": "string"
                },
                "scopes": {
                    "title": "Scopes",
                    "description": "scopes required to connect to snowflake",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "use_certificate": {
                    "title": "Use Certificate",
                    "description": "Do you want to use certificate and private key to authenticate using oauth",
                    "default": false,
                    "type": "boolean"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "client secret of the application if use_certificate = false",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                },
                "encoded_oauth_public_key": {
                    "title": "Encoded Oauth Public Key",
                    "description": "base64 encoded certificate content if use_certificate = true",
                    "type": "string"
                },
                "encoded_oauth_private_key": {
                    "title": "Encoded Oauth Private Key",
                    "description": "base64 encoded private key content if use_certificate = true",
                    "type": "string"
                }
            },
            "required": [
                "provider",
                "authority_url",
                "client_id",
                "scopes"
            ],
            "additionalProperties": false
        },
        "TagOption": {
            "title": "TagOption",
            "description": "An enumeration.",
            "enum": [
                "with_lineage",
                "without_lineage",
                "skip"
            ],
            "type": "string"
        },
        "UnityCatalogProfilerConfig": {
            "title": "UnityCatalogProfilerConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether profiling should be done.",
                    "default": false,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                },
                "warehouse_id": {
                    "title": "Warehouse Id",
                    "description": "SQL Warehouse id, for running profiling queries.",
                    "type": "string"
                },
                "profile_table_level_only": {
                    "title": "Profile Table Level Only",
                    "description": "Whether to perform profiling at table-level only or include column-level profiling as well.",
                    "default": false,
                    "type": "boolean"
                },
                "pattern": {
                    "title": "Pattern",
                    "description": "Regex patterns to filter tables for profiling during ingestion. Specify regex to match the `catalog.schema.table` format. Note that only tables allowed by the `table_pattern` will be considered.",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "call_analyze": {
                    "title": "Call Analyze",
                    "description": "Whether to call ANALYZE TABLE as part of profile ingestion.If false, will ingest the results of the most recent ANALYZE TABLE call, if any.",
                    "default": true,
                    "type": "boolean"
                },
                "max_wait_secs": {
                    "title": "Max Wait Secs",
                    "description": "Maximum time to wait for an ANALYZE TABLE query to complete.",
                    "default": 3600,
                    "type": "integer"
                },
                "max_workers": {
                    "title": "Max Workers",
                    "description": "Number of worker threads to use for profiling. Set to 1 to disable.",
                    "default": 10,
                    "type": "integer"
                }
            },
            "additionalProperties": false
        },
        "ModeAPIConfig": {
            "title": "ModeAPIConfig",
            "type": "object",
            "properties": {
                "retry_backoff_multiplier": {
                    "title": "Retry Backoff Multiplier",
                    "description": "Multiplier for exponential backoff when waiting to retry",
                    "default": 2,
                    "anyOf": [
                        {
                            "type": "integer"
                        },
                        {
                            "type": "number"
                        }
                    ]
                },
                "max_retry_interval": {
                    "title": "Max Retry Interval",
                    "description": "Maximum interval to wait when retrying",
                    "default": 10,
                    "anyOf": [
                        {
                            "type": "integer"
                        },
                        {
                            "type": "number"
                        }
                    ]
                },
                "max_attempts": {
                    "title": "Max Attempts",
                    "description": "Maximum number of attempts to retry before failing",
                    "default": 5,
                    "type": "integer"
                }
            },
            "additionalProperties": false
        },
        "AdlsSourceConfig": {
            "title": "AdlsSourceConfig",
            "description": "Common Azure credentials config.\n\nhttps://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-directory-file-acl-python",
            "type": "object",
            "properties": {
                "base_path": {
                    "title": "Base Path",
                    "description": "Base folder in hierarchical namespaces to start from.",
                    "default": "/",
                    "type": "string"
                },
                "container_name": {
                    "title": "Container Name",
                    "description": "Azure storage account container name.",
                    "type": "string"
                },
                "account_name": {
                    "title": "Account Name",
                    "description": "Name of the Azure storage account.  See [Microsoft official documentation on how to create a storage account.](https://docs.microsoft.com/en-us/azure/storage/blobs/create-data-lake-storage-account)",
                    "type": "string"
                },
                "account_key": {
                    "title": "Account Key",
                    "description": "Azure storage account access key that can be used as a credential. **An account key, a SAS token or a client secret is required for authentication.**",
                    "type": "string"
                },
                "sas_token": {
                    "title": "Sas Token",
                    "description": "Azure storage account Shared Access Signature (SAS) token that can be used as a credential. **An account key, a SAS token or a client secret is required for authentication.**",
                    "type": "string"
                },
                "client_secret": {
                    "title": "Client Secret",
                    "description": "Azure client secret that can be used as a credential. **An account key, a SAS token or a client secret is required for authentication.**",
                    "type": "string"
                },
                "client_id": {
                    "title": "Client Id",
                    "description": "Azure client (Application) ID required when a `client_secret` is used as a credential.",
                    "type": "string"
                },
                "tenant_id": {
                    "title": "Tenant Id",
                    "description": "Azure tenant (Directory) ID required when a `client_secret` is used as a credential.",
                    "type": "string"
                }
            },
            "required": [
                "container_name",
                "account_name"
            ],
            "additionalProperties": false
        },
        "IcebergProfilingConfig": {
            "title": "IcebergProfilingConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether profiling should be done.",
                    "default": false,
                    "type": "boolean"
                },
                "include_field_null_count": {
                    "title": "Include Field Null Count",
                    "description": "Whether to profile for the number of nulls for each column.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_min_value": {
                    "title": "Include Field Min Value",
                    "description": "Whether to profile for the min value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_max_value": {
                    "title": "Include Field Max Value",
                    "description": "Whether to profile for the max value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "S3": {
            "title": "S3",
            "type": "object",
            "properties": {
                "aws_config": {
                    "title": "Aws Config",
                    "description": "AWS configuration",
                    "allOf": [
                        {
                            "$ref": "#/definitions/AwsConnectionConfig"
                        }
                    ]
                },
                "use_s3_bucket_tags": {
                    "title": "Use S3 Bucket Tags",
                    "description": "Whether or not to create tags in datahub from the s3 bucket",
                    "default": false,
                    "type": "boolean"
                },
                "use_s3_object_tags": {
                    "title": "Use S3 Object Tags",
                    "description": "# Whether or not to create tags in datahub from the s3 object",
                    "default": false,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "HMACKey": {
            "title": "HMACKey",
            "type": "object",
            "properties": {
                "hmac_access_id": {
                    "title": "Hmac Access Id",
                    "description": "Access ID",
                    "type": "string"
                },
                "hmac_access_secret": {
                    "title": "Hmac Access Secret",
                    "description": "Secret",
                    "type": "string",
                    "writeOnly": true,
                    "format": "password"
                }
            },
            "required": [
                "hmac_access_id",
                "hmac_access_secret"
            ],
            "additionalProperties": false
        },
        "TableauLineageOverrides": {
            "title": "TableauLineageOverrides",
            "type": "object",
            "properties": {
                "platform_override_map": {
                    "title": "Platform Override Map",
                    "description": "A holder for platform -> platform mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "database_override_map": {
                    "title": "Database Override Map",
                    "description": "A holder for database -> database mappings to generate correct dataset urns",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            },
            "additionalProperties": false
        },
        "NifiAuthType": {
            "title": "NifiAuthType",
            "description": "An enumeration.",
            "enum": [
                "NO_AUTH",
                "SINGLE_USER",
                "CLIENT_CERT",
                "KERBEROS",
                "BASIC_AUTH"
            ]
        },
        "FileReadMode": {
            "title": "FileReadMode",
            "description": "An enumeration.",
            "enum": [
                "STREAM",
                "BATCH",
                "AUTO"
            ]
        },
        "DataLakeProfilerConfig": {
            "title": "DataLakeProfilerConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether profiling should be done.",
                    "default": false,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                },
                "profile_table_level_only": {
                    "title": "Profile Table Level Only",
                    "description": "Whether to perform profiling at table-level only or include column-level profiling as well.",
                    "default": false,
                    "type": "boolean"
                },
                "max_number_of_fields_to_profile": {
                    "title": "Max Number Of Fields To Profile",
                    "description": "A positive integer that specifies the maximum number of columns to profile for any table. `None` implies all columns. The cost of profiling goes up significantly as the number of columns to profile goes up.",
                    "exclusiveMinimum": 0,
                    "type": "integer"
                },
                "include_field_null_count": {
                    "title": "Include Field Null Count",
                    "description": "Whether to profile for the number of nulls for each column.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_min_value": {
                    "title": "Include Field Min Value",
                    "description": "Whether to profile for the min value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_max_value": {
                    "title": "Include Field Max Value",
                    "description": "Whether to profile for the max value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_mean_value": {
                    "title": "Include Field Mean Value",
                    "description": "Whether to profile for the mean value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_median_value": {
                    "title": "Include Field Median Value",
                    "description": "Whether to profile for the median value of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_stddev_value": {
                    "title": "Include Field Stddev Value",
                    "description": "Whether to profile for the standard deviation of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_quantiles": {
                    "title": "Include Field Quantiles",
                    "description": "Whether to profile for the quantiles of numeric columns.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_distinct_value_frequencies": {
                    "title": "Include Field Distinct Value Frequencies",
                    "description": "Whether to profile for distinct value frequencies.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_histogram": {
                    "title": "Include Field Histogram",
                    "description": "Whether to profile for the histogram for numeric fields.",
                    "default": true,
                    "type": "boolean"
                },
                "include_field_sample_values": {
                    "title": "Include Field Sample Values",
                    "description": "Whether to profile for the sample values for all columns.",
                    "default": true,
                    "type": "boolean"
                }
            },
            "additionalProperties": false
        },
        "SalesforceAuthType": {
            "title": "SalesforceAuthType",
            "description": "An enumeration.",
            "enum": [
                "USERNAME_PASSWORD",
                "DIRECT_ACCESS_TOKEN",
                "JSON_WEB_TOKEN"
            ]
        },
        "SalesforceProfilingConfig": {
            "title": "SalesforceProfilingConfig",
            "type": "object",
            "properties": {
                "enabled": {
                    "title": "Enabled",
                    "description": "Whether profiling should be done. Supports only table-level profiling at this stage",
                    "default": false,
                    "type": "boolean"
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                }
            },
            "additionalProperties": false
        },
        "URIReplacePattern": {
            "title": "URIReplacePattern",
            "type": "object",
            "properties": {
                "match": {
                    "title": "Match",
                    "description": "Pattern to match on uri-s as part of reference resolution. See replace field",
                    "type": "string"
                },
                "replace": {
                    "title": "Replace",
                    "description": "Pattern to replace with as part of reference resolution. See match field",
                    "type": "string"
                }
            },
            "required": [
                "match",
                "replace"
            ],
            "additionalProperties": false
        },
        "ProvidedConfig": {
            "title": "ProvidedConfig",
            "type": "object",
            "properties": {
                "provider": {
                    "title": "Provider",
                    "type": "string"
                },
                "path_key": {
                    "title": "Path Key",
                    "type": "string"
                },
                "value": {
                    "title": "Value",
                    "type": "string"
                }
            },
            "required": [
                "provider",
                "path_key",
                "value"
            ],
            "additionalProperties": false
        },
        "GenericConnectorConfig": {
            "title": "GenericConnectorConfig",
            "type": "object",
            "properties": {
                "connector_name": {
                    "title": "Connector Name",
                    "type": "string"
                },
                "source_dataset": {
                    "title": "Source Dataset",
                    "type": "string"
                },
                "source_platform": {
                    "title": "Source Platform",
                    "type": "string"
                }
            },
            "required": [
                "connector_name",
                "source_dataset",
                "source_platform"
            ],
            "additionalProperties": false
        },
        "GlueProfilingConfig": {
            "title": "GlueProfilingConfig",
            "type": "object",
            "properties": {
                "row_count": {
                    "title": "Row Count",
                    "description": "The parameter name for row count in glue table.",
                    "type": "string"
                },
                "column_count": {
                    "title": "Column Count",
                    "description": "The parameter name for column count in glue table.",
                    "type": "string"
                },
                "unique_count": {
                    "title": "Unique Count",
                    "description": "The parameter name for the count of unique value in a column.",
                    "type": "string"
                },
                "unique_proportion": {
                    "title": "Unique Proportion",
                    "description": "The parameter name for the proportion of unique values in a column.",
                    "type": "string"
                },
                "null_count": {
                    "title": "Null Count",
                    "description": "The parameter name for the count of null values in a column.",
                    "type": "string"
                },
                "null_proportion": {
                    "title": "Null Proportion",
                    "description": "The parameter name for the proportion of null values in a column.",
                    "type": "string"
                },
                "min": {
                    "title": "Min",
                    "description": "The parameter name for the min value of a column.",
                    "type": "string"
                },
                "max": {
                    "title": "Max",
                    "description": "The parameter name for the max value of a column.",
                    "type": "string"
                },
                "mean": {
                    "title": "Mean",
                    "description": "The parameter name for the mean value of a column.",
                    "type": "string"
                },
                "median": {
                    "title": "Median",
                    "description": "The parameter name for the median value of a column.",
                    "type": "string"
                },
                "stdev": {
                    "title": "Stdev",
                    "description": "The parameter name for the standard deviation of a column.",
                    "type": "string"
                },
                "partition_patterns": {
                    "title": "Partition Patterns",
                    "description": "Regex patterns for filtering partitions for profile. The pattern should be a string like: \"{'key':'value'}\".",
                    "default": {
                        "allow": [
                            ".*"
                        ],
                        "deny": [],
                        "ignoreCase": true
                    },
                    "allOf": [
                        {
                            "$ref": "#/definitions/AllowDenyPattern"
                        }
                    ]
                },
                "operation_config": {
                    "title": "Operation Config",
                    "description": "Experimental feature. To specify operation configs.",
                    "allOf": [
                        {
                            "$ref": "#/definitions/OperationConfig"
                        }
                    ]
                }
            },
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "source": {
            "anyOf": [
                {
                    "$ref": "#/definitions/mysql"
                },
                {
                    "$ref": "#/definitions/oracle"
                },
                {
                    "$ref": "#/definitions/powerbi-report-server"
                },
                {
                    "$ref": "#/definitions/datahub"
                },
                {
                    "$ref": "#/definitions/bigquery"
                },
                {
                    "$ref": "#/definitions/okta"
                },
                {
                    "$ref": "#/definitions/lookml"
                },
                {
                    "$ref": "#/definitions/redshift"
                },
                {
                    "$ref": "#/definitions/redshift-usage-legacy"
                },
                {
                    "$ref": "#/definitions/demo-data"
                },
                {
                    "$ref": "#/definitions/vertica"
                },
                {
                    "$ref": "#/definitions/redash"
                },
                {
                    "$ref": "#/definitions/dbt"
                },
                {
                    "$ref": "#/definitions/presto-on-hive"
                },
                {
                    "$ref": "#/definitions/powerbi"
                },
                {
                    "$ref": "#/definitions/elasticsearch"
                },
                {
                    "$ref": "#/definitions/snowflake"
                },
                {
                    "$ref": "#/definitions/superset"
                },
                {
                    "$ref": "#/definitions/unity-catalog"
                },
                {
                    "$ref": "#/definitions/feast"
                },
                {
                    "$ref": "#/definitions/mode"
                },
                {
                    "$ref": "#/definitions/sqlalchemy"
                },
                {
                    "$ref": "#/definitions/hana"
                },
                {
                    "$ref": "#/definitions/iceberg"
                },
                {
                    "$ref": "#/definitions/pulsar"
                },
                {
                    "$ref": "#/definitions/delta-lake"
                },
                {
                    "$ref": "#/definitions/azure-ad"
                },
                {
                    "$ref": "#/definitions/openapi"
                },
                {
                    "$ref": "#/definitions/kafka"
                },
                {
                    "$ref": "#/definitions/datahub-lineage-file"
                },
                {
                    "$ref": "#/definitions/postgres"
                },
                {
                    "$ref": "#/definitions/gcs"
                },
                {
                    "$ref": "#/definitions/csv-enricher"
                },
                {
                    "$ref": "#/definitions/metabase"
                },
                {
                    "$ref": "#/definitions/athena"
                },
                {
                    "$ref": "#/definitions/trino"
                },
                {
                    "$ref": "#/definitions/tableau"
                },
                {
                    "$ref": "#/definitions/mssql"
                },
                {
                    "$ref": "#/definitions/nifi"
                },
                {
                    "$ref": "#/definitions/ldap"
                },
                {
                    "$ref": "#/definitions/dbt-cloud"
                },
                {
                    "$ref": "#/definitions/file"
                },
                {
                    "$ref": "#/definitions/s3"
                },
                {
                    "$ref": "#/definitions/looker"
                },
                {
                    "$ref": "#/definitions/salesforce"
                },
                {
                    "$ref": "#/definitions/hive"
                },
                {
                    "$ref": "#/definitions/mariadb"
                },
                {
                    "$ref": "#/definitions/clickhouse"
                },
                {
                    "$ref": "#/definitions/mongodb"
                },
                {
                    "$ref": "#/definitions/json-schema"
                },
                {
                    "$ref": "#/definitions/datahub-business-glossary"
                },
                {
                    "$ref": "#/definitions/presto"
                },
                {
                    "$ref": "#/definitions/redshift-legacy"
                },
                {
                    "$ref": "#/definitions/kafka-connect"
                },
                {
                    "$ref": "#/definitions/sagemaker"
                },
                {
                    "$ref": "#/definitions/druid"
                },
                {
                    "$ref": "#/definitions/glue"
                },
                {
                    "$ref": "#/definitions/clickhouse-usage"
                },
                {
                    "$ref": "#/definitions/starburst-trino-usage"
                }
            ]
        },
        "transformers": {
            "type": "array",
            "items": {
                "type": "object",
                "description": "Transformer configs see at https://datahubproject.io/docs/metadata-ingestion/docs/transformer",
                "properties": {
                    "type": {
                        "type": "string",
                        "description": "Transformer type"
                    },
                    "config": {
                        "type": "object",
                        "description": "Transformer config"
                    }
                },
                "required": [
                    "type"
                ],
                "additionalProperties": false
            }
        },
        "sink": {
            "description": "sink",
            "anyOf": [
                {
                    "$ref": "#/definitions/datahub_kafka_sink"
                },
                {
                    "$ref": "#/definitions/datahub_rest_sink"
                },
                {
                    "$ref": "#/definitions/console_sink"
                },
                {
                    "$ref": "#/definitions/file_sink"
                }
            ]
        }
    },
    "required": [
        "source"
    ]
}