# coding=utf-8
# pylint: disable=too-many-lines
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

import datetime
import sys
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union

from .. import _serialization

if sys.version_info >= (3, 9):
    from collections.abc import MutableMapping
else:
    from typing import MutableMapping  # type: ignore  # pylint: disable=ungrouped-imports

if TYPE_CHECKING:
    # pylint: disable=unused-import,ungrouped-imports
    from .. import models as _models
JSON = MutableMapping[str, Any]  # pylint: disable=unsubscriptable-object


class Activity(_serialization.Model):
    """A pipeline activity.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    ControlActivity, ExecutionActivity, SqlPoolStoredProcedureActivity

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
    }

    _subtype_map = {
        "type": {
            "Container": "ControlActivity",
            "Execution": "ExecutionActivity",
            "SqlPoolStoredProcedure": "SqlPoolStoredProcedureActivity",
        }
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.name = name
        self.type: Optional[str] = None
        self.description = description
        self.state = state
        self.on_inactive_mark_as = on_inactive_mark_as
        self.depends_on = depends_on
        self.user_properties = user_properties


class ActivityDependency(_serialization.Model):
    """Activity dependency information.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar activity: Activity name. Required.
    :vartype activity: str
    :ivar dependency_conditions: Match-Condition for the dependency. Required.
    :vartype dependency_conditions: list[str or
     ~azure.synapse.artifacts.models.DependencyCondition]
    """

    _validation = {
        "activity": {"required": True},
        "dependency_conditions": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "activity": {"key": "activity", "type": "str"},
        "dependency_conditions": {"key": "dependencyConditions", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        activity: str,
        dependency_conditions: List[Union[str, "_models.DependencyCondition"]],
        additional_properties: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword activity: Activity name. Required.
        :paramtype activity: str
        :keyword dependency_conditions: Match-Condition for the dependency. Required.
        :paramtype dependency_conditions: list[str or
         ~azure.synapse.artifacts.models.DependencyCondition]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.activity = activity
        self.dependency_conditions = dependency_conditions


class ActivityPolicy(_serialization.Model):
    """Execution policy for an activity.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar timeout: Specifies the timeout for the activity to run. The default timeout is 7 days.
     Type: string (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype timeout: JSON
    :ivar retry: Maximum ordinary retry attempts. Default is 0. Type: integer (or Expression with
     resultType integer), minimum: 0.
    :vartype retry: JSON
    :ivar retry_interval_in_seconds: Interval between each retry attempt (in seconds). The default
     is 30 sec.
    :vartype retry_interval_in_seconds: int
    :ivar secure_input: When set to true, Input from activity is considered as secure and will not
     be logged to monitoring.
    :vartype secure_input: bool
    :ivar secure_output: When set to true, Output from activity is considered as secure and will
     not be logged to monitoring.
    :vartype secure_output: bool
    """

    _validation = {
        "retry_interval_in_seconds": {"maximum": 86400, "minimum": 30},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "timeout": {"key": "timeout", "type": "object"},
        "retry": {"key": "retry", "type": "object"},
        "retry_interval_in_seconds": {"key": "retryIntervalInSeconds", "type": "int"},
        "secure_input": {"key": "secureInput", "type": "bool"},
        "secure_output": {"key": "secureOutput", "type": "bool"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        timeout: Optional[JSON] = None,
        retry: Optional[JSON] = None,
        retry_interval_in_seconds: Optional[int] = None,
        secure_input: Optional[bool] = None,
        secure_output: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword timeout: Specifies the timeout for the activity to run. The default timeout is 7 days.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype timeout: JSON
        :keyword retry: Maximum ordinary retry attempts. Default is 0. Type: integer (or Expression
         with resultType integer), minimum: 0.
        :paramtype retry: JSON
        :keyword retry_interval_in_seconds: Interval between each retry attempt (in seconds). The
         default is 30 sec.
        :paramtype retry_interval_in_seconds: int
        :keyword secure_input: When set to true, Input from activity is considered as secure and will
         not be logged to monitoring.
        :paramtype secure_input: bool
        :keyword secure_output: When set to true, Output from activity is considered as secure and will
         not be logged to monitoring.
        :paramtype secure_output: bool
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.timeout = timeout
        self.retry = retry
        self.retry_interval_in_seconds = retry_interval_in_seconds
        self.secure_input = secure_input
        self.secure_output = secure_output


class ActivityRun(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """Information about an activity run in a pipeline.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar pipeline_name: The name of the pipeline.
    :vartype pipeline_name: str
    :ivar pipeline_run_id: The id of the pipeline run.
    :vartype pipeline_run_id: str
    :ivar activity_name: The name of the activity.
    :vartype activity_name: str
    :ivar activity_type: The type of the activity.
    :vartype activity_type: str
    :ivar activity_run_id: The id of the activity run.
    :vartype activity_run_id: str
    :ivar linked_service_name: The name of the compute linked service.
    :vartype linked_service_name: str
    :ivar status: The status of the activity run.
    :vartype status: str
    :ivar activity_run_start: The start time of the activity run in 'ISO 8601' format.
    :vartype activity_run_start: ~datetime.datetime
    :ivar activity_run_end: The end time of the activity run in 'ISO 8601' format.
    :vartype activity_run_end: ~datetime.datetime
    :ivar duration_in_ms: The duration of the activity run.
    :vartype duration_in_ms: int
    :ivar input: The input for the activity.
    :vartype input: JSON
    :ivar output: The output for the activity.
    :vartype output: JSON
    :ivar error: The error if any from the activity run.
    :vartype error: JSON
    """

    _validation = {
        "pipeline_name": {"readonly": True},
        "pipeline_run_id": {"readonly": True},
        "activity_name": {"readonly": True},
        "activity_type": {"readonly": True},
        "activity_run_id": {"readonly": True},
        "linked_service_name": {"readonly": True},
        "status": {"readonly": True},
        "activity_run_start": {"readonly": True},
        "activity_run_end": {"readonly": True},
        "duration_in_ms": {"readonly": True},
        "input": {"readonly": True},
        "output": {"readonly": True},
        "error": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "pipeline_name": {"key": "pipelineName", "type": "str"},
        "pipeline_run_id": {"key": "pipelineRunId", "type": "str"},
        "activity_name": {"key": "activityName", "type": "str"},
        "activity_type": {"key": "activityType", "type": "str"},
        "activity_run_id": {"key": "activityRunId", "type": "str"},
        "linked_service_name": {"key": "linkedServiceName", "type": "str"},
        "status": {"key": "status", "type": "str"},
        "activity_run_start": {"key": "activityRunStart", "type": "iso-8601"},
        "activity_run_end": {"key": "activityRunEnd", "type": "iso-8601"},
        "duration_in_ms": {"key": "durationInMs", "type": "int"},
        "input": {"key": "input", "type": "object"},
        "output": {"key": "output", "type": "object"},
        "error": {"key": "error", "type": "object"},
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.pipeline_name = None
        self.pipeline_run_id = None
        self.activity_name = None
        self.activity_type = None
        self.activity_run_id = None
        self.linked_service_name = None
        self.status = None
        self.activity_run_start = None
        self.activity_run_end = None
        self.duration_in_ms = None
        self.input = None
        self.output = None
        self.error = None


class ActivityRunsQueryResponse(_serialization.Model):
    """A list activity runs.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of activity runs. Required.
    :vartype value: list[~azure.synapse.artifacts.models.ActivityRun]
    :ivar continuation_token: The continuation token for getting the next page of results, if any
     remaining results exist, null otherwise.
    :vartype continuation_token: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[ActivityRun]"},
        "continuation_token": {"key": "continuationToken", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.ActivityRun"], continuation_token: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of activity runs. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.ActivityRun]
        :keyword continuation_token: The continuation token for getting the next page of results, if
         any remaining results exist, null otherwise.
        :paramtype continuation_token: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.continuation_token = continuation_token


class AddDataFlowToDebugSessionResponse(_serialization.Model):
    """Response body structure for starting data flow debug session.

    :ivar job_version: The ID of data flow debug job version.
    :vartype job_version: str
    """

    _attribute_map = {
        "job_version": {"key": "jobVersion", "type": "str"},
    }

    def __init__(self, *, job_version: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword job_version: The ID of data flow debug job version.
        :paramtype job_version: str
        """
        super().__init__(**kwargs)
        self.job_version = job_version


class AdditionalColumns(_serialization.Model):
    """Specify the column name and value of additional columns.

    :ivar name: Additional column name. Type: string (or Expression with resultType string).
    :vartype name: JSON
    :ivar value: Additional column value. Type: string (or Expression with resultType string).
    :vartype value: JSON
    """

    _attribute_map = {
        "name": {"key": "name", "type": "object"},
        "value": {"key": "value", "type": "object"},
    }

    def __init__(self, *, name: Optional[JSON] = None, value: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword name: Additional column name. Type: string (or Expression with resultType string).
        :paramtype name: JSON
        :keyword value: Additional column value. Type: string (or Expression with resultType string).
        :paramtype value: JSON
        """
        super().__init__(**kwargs)
        self.name = name
        self.value = value


class LinkedService(_serialization.Model):
    """The Azure Synapse nested object which contains the information and credential which can be used
    to connect with related store or compute resource.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonMWSLinkedService, AmazonRdsForOracleLinkedService, AmazonRdsForSqlServerLinkedService,
    AmazonRedshiftLinkedService, AmazonS3LinkedService, AppFiguresLinkedService,
    AsanaLinkedService, AzureBatchLinkedService, AzureBlobFSLinkedService,
    AzureBlobStorageLinkedService, AzureDataExplorerLinkedService,
    AzureDataLakeAnalyticsLinkedService, AzureDataLakeStoreLinkedService,
    AzureDatabricksLinkedService, AzureDatabricksDeltaLakeLinkedService,
    AzureFileStorageLinkedService, AzureFunctionLinkedService, AzureKeyVaultLinkedService,
    AzureMLLinkedService, AzureMLServiceLinkedService, AzureMariaDBLinkedService,
    AzureMySqlLinkedService, AzurePostgreSqlLinkedService, AzureSearchLinkedService,
    AzureSqlDWLinkedService, AzureSqlDatabaseLinkedService, AzureSqlMILinkedService,
    AzureStorageLinkedService, AzureSynapseArtifactsLinkedService, AzureTableStorageLinkedService,
    CassandraLinkedService, CommonDataServiceForAppsLinkedService, ConcurLinkedService,
    CosmosDbLinkedService, CosmosDbMongoDbApiLinkedService, CouchbaseLinkedService,
    CustomDataSourceLinkedService, DataworldLinkedService, Db2LinkedService, DrillLinkedService,
    DynamicsLinkedService, DynamicsAXLinkedService, DynamicsCrmLinkedService, EloquaLinkedService,
    FileServerLinkedService, FtpServerLinkedService, GoogleAdWordsLinkedService,
    GoogleBigQueryLinkedService, GoogleBigQueryV2LinkedService, GoogleCloudStorageLinkedService,
    GoogleSheetsLinkedService, GreenplumLinkedService, HBaseLinkedService, HDInsightLinkedService,
    HDInsightOnDemandLinkedService, HdfsLinkedService, HiveLinkedService, HttpLinkedService,
    HubspotLinkedService, ImpalaLinkedService, InformixLinkedService, JiraLinkedService,
    LakeHouseLinkedService, MagentoLinkedService, MariaDBLinkedService, MarketoLinkedService,
    MicrosoftAccessLinkedService, MongoDbLinkedService, MongoDbAtlasLinkedService,
    MongoDbV2LinkedService, MySqlLinkedService, NetezzaLinkedService, ODataLinkedService,
    OdbcLinkedService, Office365LinkedService, OracleLinkedService,
    OracleServiceCloudLinkedService, PaypalLinkedService, PhoenixLinkedService,
    PostgreSqlLinkedService, PostgreSqlV2LinkedService, PowerBIWorkspaceLinkedService,
    PrestoLinkedService, QuickBooksLinkedService, QuickbaseLinkedService, ResponsysLinkedService,
    RestServiceLinkedService, SalesforceLinkedService, SalesforceMarketingCloudLinkedService,
    SalesforceServiceCloudLinkedService, SalesforceServiceCloudV2LinkedService,
    SalesforceV2LinkedService, SapBWLinkedService, SapCloudForCustomerLinkedService,
    SapEccLinkedService, SapHanaLinkedService, SapOdpLinkedService, SapOpenHubLinkedService,
    SapTableLinkedService, ServiceNowLinkedService, ServiceNowV2LinkedService,
    SftpServerLinkedService, SharePointOnlineListLinkedService, ShopifyLinkedService,
    SmartsheetLinkedService, SnowflakeLinkedService, SnowflakeV2LinkedService, SparkLinkedService,
    SqlServerLinkedService, SquareLinkedService, SybaseLinkedService, TeamDeskLinkedService,
    TeradataLinkedService, TwilioLinkedService, VerticaLinkedService, WarehouseLinkedService,
    WebLinkedService, XeroLinkedService, ZendeskLinkedService, ZohoLinkedService

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
    }

    _subtype_map = {
        "type": {
            "AmazonMWS": "AmazonMWSLinkedService",
            "AmazonRdsForOracle": "AmazonRdsForOracleLinkedService",
            "AmazonRdsForSqlServer": "AmazonRdsForSqlServerLinkedService",
            "AmazonRedshift": "AmazonRedshiftLinkedService",
            "AmazonS3": "AmazonS3LinkedService",
            "AppFigures": "AppFiguresLinkedService",
            "Asana": "AsanaLinkedService",
            "AzureBatch": "AzureBatchLinkedService",
            "AzureBlobFS": "AzureBlobFSLinkedService",
            "AzureBlobStorage": "AzureBlobStorageLinkedService",
            "AzureDataExplorer": "AzureDataExplorerLinkedService",
            "AzureDataLakeAnalytics": "AzureDataLakeAnalyticsLinkedService",
            "AzureDataLakeStore": "AzureDataLakeStoreLinkedService",
            "AzureDatabricks": "AzureDatabricksLinkedService",
            "AzureDatabricksDeltaLake": "AzureDatabricksDeltaLakeLinkedService",
            "AzureFileStorage": "AzureFileStorageLinkedService",
            "AzureFunction": "AzureFunctionLinkedService",
            "AzureKeyVault": "AzureKeyVaultLinkedService",
            "AzureML": "AzureMLLinkedService",
            "AzureMLService": "AzureMLServiceLinkedService",
            "AzureMariaDB": "AzureMariaDBLinkedService",
            "AzureMySql": "AzureMySqlLinkedService",
            "AzurePostgreSql": "AzurePostgreSqlLinkedService",
            "AzureSearch": "AzureSearchLinkedService",
            "AzureSqlDW": "AzureSqlDWLinkedService",
            "AzureSqlDatabase": "AzureSqlDatabaseLinkedService",
            "AzureSqlMI": "AzureSqlMILinkedService",
            "AzureStorage": "AzureStorageLinkedService",
            "AzureSynapseArtifacts": "AzureSynapseArtifactsLinkedService",
            "AzureTableStorage": "AzureTableStorageLinkedService",
            "Cassandra": "CassandraLinkedService",
            "CommonDataServiceForApps": "CommonDataServiceForAppsLinkedService",
            "Concur": "ConcurLinkedService",
            "CosmosDb": "CosmosDbLinkedService",
            "CosmosDbMongoDbApi": "CosmosDbMongoDbApiLinkedService",
            "Couchbase": "CouchbaseLinkedService",
            "CustomDataSource": "CustomDataSourceLinkedService",
            "Dataworld": "DataworldLinkedService",
            "Db2": "Db2LinkedService",
            "Drill": "DrillLinkedService",
            "Dynamics": "DynamicsLinkedService",
            "DynamicsAX": "DynamicsAXLinkedService",
            "DynamicsCrm": "DynamicsCrmLinkedService",
            "Eloqua": "EloquaLinkedService",
            "FileServer": "FileServerLinkedService",
            "FtpServer": "FtpServerLinkedService",
            "GoogleAdWords": "GoogleAdWordsLinkedService",
            "GoogleBigQuery": "GoogleBigQueryLinkedService",
            "GoogleBigQueryV2": "GoogleBigQueryV2LinkedService",
            "GoogleCloudStorage": "GoogleCloudStorageLinkedService",
            "GoogleSheets": "GoogleSheetsLinkedService",
            "Greenplum": "GreenplumLinkedService",
            "HBase": "HBaseLinkedService",
            "HDInsight": "HDInsightLinkedService",
            "HDInsightOnDemand": "HDInsightOnDemandLinkedService",
            "Hdfs": "HdfsLinkedService",
            "Hive": "HiveLinkedService",
            "HttpServer": "HttpLinkedService",
            "Hubspot": "HubspotLinkedService",
            "Impala": "ImpalaLinkedService",
            "Informix": "InformixLinkedService",
            "Jira": "JiraLinkedService",
            "Lakehouse": "LakeHouseLinkedService",
            "Magento": "MagentoLinkedService",
            "MariaDB": "MariaDBLinkedService",
            "Marketo": "MarketoLinkedService",
            "MicrosoftAccess": "MicrosoftAccessLinkedService",
            "MongoDb": "MongoDbLinkedService",
            "MongoDbAtlas": "MongoDbAtlasLinkedService",
            "MongoDbV2": "MongoDbV2LinkedService",
            "MySql": "MySqlLinkedService",
            "Netezza": "NetezzaLinkedService",
            "OData": "ODataLinkedService",
            "Odbc": "OdbcLinkedService",
            "Office365": "Office365LinkedService",
            "Oracle": "OracleLinkedService",
            "OracleServiceCloud": "OracleServiceCloudLinkedService",
            "Paypal": "PaypalLinkedService",
            "Phoenix": "PhoenixLinkedService",
            "PostgreSql": "PostgreSqlLinkedService",
            "PostgreSqlV2": "PostgreSqlV2LinkedService",
            "PowerBIWorkspace": "PowerBIWorkspaceLinkedService",
            "Presto": "PrestoLinkedService",
            "QuickBooks": "QuickBooksLinkedService",
            "Quickbase": "QuickbaseLinkedService",
            "Responsys": "ResponsysLinkedService",
            "RestService": "RestServiceLinkedService",
            "Salesforce": "SalesforceLinkedService",
            "SalesforceMarketingCloud": "SalesforceMarketingCloudLinkedService",
            "SalesforceServiceCloud": "SalesforceServiceCloudLinkedService",
            "SalesforceServiceCloudV2": "SalesforceServiceCloudV2LinkedService",
            "SalesforceV2": "SalesforceV2LinkedService",
            "SapBW": "SapBWLinkedService",
            "SapCloudForCustomer": "SapCloudForCustomerLinkedService",
            "SapEcc": "SapEccLinkedService",
            "SapHana": "SapHanaLinkedService",
            "SapOdp": "SapOdpLinkedService",
            "SapOpenHub": "SapOpenHubLinkedService",
            "SapTable": "SapTableLinkedService",
            "ServiceNow": "ServiceNowLinkedService",
            "ServiceNowV2": "ServiceNowV2LinkedService",
            "Sftp": "SftpServerLinkedService",
            "SharePointOnlineList": "SharePointOnlineListLinkedService",
            "Shopify": "ShopifyLinkedService",
            "Smartsheet": "SmartsheetLinkedService",
            "Snowflake": "SnowflakeLinkedService",
            "SnowflakeV2": "SnowflakeV2LinkedService",
            "Spark": "SparkLinkedService",
            "SqlServer": "SqlServerLinkedService",
            "Square": "SquareLinkedService",
            "Sybase": "SybaseLinkedService",
            "TeamDesk": "TeamDeskLinkedService",
            "Teradata": "TeradataLinkedService",
            "Twilio": "TwilioLinkedService",
            "Vertica": "VerticaLinkedService",
            "Warehouse": "WarehouseLinkedService",
            "Web": "WebLinkedService",
            "Xero": "XeroLinkedService",
            "Zendesk": "ZendeskLinkedService",
            "Zoho": "ZohoLinkedService",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.version = version
        self.connect_via = connect_via
        self.description = description
        self.parameters = parameters
        self.annotations = annotations


class AmazonMWSLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Amazon Marketplace Web Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the Amazon MWS server, (i.e. mws.amazonservices.com). Required.
    :vartype endpoint: JSON
    :ivar marketplace_id: The Amazon Marketplace ID you want to retrieve data from. To retrieve
     data from multiple Marketplace IDs, separate them with a comma (,). (i.e. A2EUQ1WTGCTBG2).
     Required.
    :vartype marketplace_id: JSON
    :ivar seller_id: The Amazon seller ID. Required.
    :vartype seller_id: JSON
    :ivar mws_auth_token: The Amazon MWS authentication token.
    :vartype mws_auth_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar access_key_id: The access key id used to access data. Required.
    :vartype access_key_id: JSON
    :ivar secret_key: The secret key used to access data.
    :vartype secret_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "marketplace_id": {"required": True},
        "seller_id": {"required": True},
        "access_key_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "marketplace_id": {"key": "typeProperties.marketplaceID", "type": "object"},
        "seller_id": {"key": "typeProperties.sellerID", "type": "object"},
        "mws_auth_token": {"key": "typeProperties.mwsAuthToken", "type": "SecretBase"},
        "access_key_id": {"key": "typeProperties.accessKeyId", "type": "object"},
        "secret_key": {"key": "typeProperties.secretKey", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        marketplace_id: JSON,
        seller_id: JSON,
        access_key_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        mws_auth_token: Optional["_models.SecretBase"] = None,
        secret_key: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the Amazon MWS server, (i.e. mws.amazonservices.com).
         Required.
        :paramtype endpoint: JSON
        :keyword marketplace_id: The Amazon Marketplace ID you want to retrieve data from. To retrieve
         data from multiple Marketplace IDs, separate them with a comma (,). (i.e. A2EUQ1WTGCTBG2).
         Required.
        :paramtype marketplace_id: JSON
        :keyword seller_id: The Amazon seller ID. Required.
        :paramtype seller_id: JSON
        :keyword mws_auth_token: The Amazon MWS authentication token.
        :paramtype mws_auth_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword access_key_id: The access key id used to access data. Required.
        :paramtype access_key_id: JSON
        :keyword secret_key: The secret key used to access data.
        :paramtype secret_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AmazonMWS"
        self.endpoint = endpoint
        self.marketplace_id = marketplace_id
        self.seller_id = seller_id
        self.mws_auth_token = mws_auth_token
        self.access_key_id = access_key_id
        self.secret_key = secret_key
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class Dataset(_serialization.Model):
    """The Azure Data Factory nested object which identifies data within different data stores, such
    as tables, files, folders, and documents.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonMWSObjectDataset, AmazonRdsForOracleTableDataset, AmazonRdsForSqlServerTableDataset,
    AmazonRedshiftTableDataset, AmazonS3Dataset, AvroDataset, AzureBlobDataset, AzureBlobFSDataset,
    AzureDataExplorerTableDataset, AzureDataLakeStoreDataset, AzureDatabricksDeltaLakeDataset,
    AzureMariaDBTableDataset, AzureMySqlTableDataset, AzurePostgreSqlTableDataset,
    AzureSearchIndexDataset, AzureSqlDWTableDataset, AzureSqlMITableDataset, AzureSqlTableDataset,
    AzureTableDataset, BinaryDataset, CassandraTableDataset, CommonDataServiceForAppsEntityDataset,
    ConcurObjectDataset, CosmosDbMongoDbApiCollectionDataset, CosmosDbSqlApiCollectionDataset,
    CouchbaseTableDataset, CustomDataset, Db2TableDataset, DelimitedTextDataset,
    DocumentDbCollectionDataset, DrillTableDataset, DynamicsAXResourceDataset,
    DynamicsCrmEntityDataset, DynamicsEntityDataset, EloquaObjectDataset, ExcelDataset,
    FileShareDataset, GoogleAdWordsObjectDataset, GoogleBigQueryObjectDataset,
    GoogleBigQueryV2ObjectDataset, GreenplumTableDataset, HBaseObjectDataset, HiveObjectDataset,
    HttpDataset, HubspotObjectDataset, IcebergDataset, ImpalaObjectDataset, InformixTableDataset,
    JiraObjectDataset, JsonDataset, LakeHouseTableDataset, MagentoObjectDataset,
    MariaDBTableDataset, MarketoObjectDataset, MicrosoftAccessTableDataset,
    MongoDbAtlasCollectionDataset, MongoDbCollectionDataset, MongoDbV2CollectionDataset,
    MySqlTableDataset, NetezzaTableDataset, ODataResourceDataset, OdbcTableDataset,
    Office365Dataset, OracleServiceCloudObjectDataset, OracleTableDataset, OrcDataset,
    ParquetDataset, PaypalObjectDataset, PhoenixObjectDataset, PostgreSqlTableDataset,
    PostgreSqlV2TableDataset, PrestoObjectDataset, QuickBooksObjectDataset, RelationalTableDataset,
    ResponsysObjectDataset, RestResourceDataset, SalesforceMarketingCloudObjectDataset,
    SalesforceObjectDataset, SalesforceServiceCloudObjectDataset,
    SalesforceServiceCloudV2ObjectDataset, SalesforceV2ObjectDataset, SapBwCubeDataset,
    SapCloudForCustomerResourceDataset, SapEccResourceDataset, SapHanaTableDataset,
    SapOdpResourceDataset, SapOpenHubTableDataset, SapTableResourceDataset,
    ServiceNowObjectDataset, ServiceNowV2ObjectDataset, SharePointOnlineListResourceDataset,
    ShopifyObjectDataset, SnowflakeDataset, SnowflakeV2Dataset, SparkObjectDataset,
    SqlServerTableDataset, SquareObjectDataset, SybaseTableDataset, TeradataTableDataset,
    VerticaTableDataset, WarehouseTableDataset, WebTableDataset, XeroObjectDataset, XmlDataset,
    ZohoObjectDataset

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
    }

    _subtype_map = {
        "type": {
            "AmazonMWSObject": "AmazonMWSObjectDataset",
            "AmazonRdsForOracleTable": "AmazonRdsForOracleTableDataset",
            "AmazonRdsForSqlServerTable": "AmazonRdsForSqlServerTableDataset",
            "AmazonRedshiftTable": "AmazonRedshiftTableDataset",
            "AmazonS3Object": "AmazonS3Dataset",
            "Avro": "AvroDataset",
            "AzureBlob": "AzureBlobDataset",
            "AzureBlobFSFile": "AzureBlobFSDataset",
            "AzureDataExplorerTable": "AzureDataExplorerTableDataset",
            "AzureDataLakeStoreFile": "AzureDataLakeStoreDataset",
            "AzureDatabricksDeltaLakeDataset": "AzureDatabricksDeltaLakeDataset",
            "AzureMariaDBTable": "AzureMariaDBTableDataset",
            "AzureMySqlTable": "AzureMySqlTableDataset",
            "AzurePostgreSqlTable": "AzurePostgreSqlTableDataset",
            "AzureSearchIndex": "AzureSearchIndexDataset",
            "AzureSqlDWTable": "AzureSqlDWTableDataset",
            "AzureSqlMITable": "AzureSqlMITableDataset",
            "AzureSqlTable": "AzureSqlTableDataset",
            "AzureTable": "AzureTableDataset",
            "Binary": "BinaryDataset",
            "CassandraTable": "CassandraTableDataset",
            "CommonDataServiceForAppsEntity": "CommonDataServiceForAppsEntityDataset",
            "ConcurObject": "ConcurObjectDataset",
            "CosmosDbMongoDbApiCollection": "CosmosDbMongoDbApiCollectionDataset",
            "CosmosDbSqlApiCollection": "CosmosDbSqlApiCollectionDataset",
            "CouchbaseTable": "CouchbaseTableDataset",
            "CustomDataset": "CustomDataset",
            "Db2Table": "Db2TableDataset",
            "DelimitedText": "DelimitedTextDataset",
            "DocumentDbCollection": "DocumentDbCollectionDataset",
            "DrillTable": "DrillTableDataset",
            "DynamicsAXResource": "DynamicsAXResourceDataset",
            "DynamicsCrmEntity": "DynamicsCrmEntityDataset",
            "DynamicsEntity": "DynamicsEntityDataset",
            "EloquaObject": "EloquaObjectDataset",
            "Excel": "ExcelDataset",
            "FileShare": "FileShareDataset",
            "GoogleAdWordsObject": "GoogleAdWordsObjectDataset",
            "GoogleBigQueryObject": "GoogleBigQueryObjectDataset",
            "GoogleBigQueryV2Object": "GoogleBigQueryV2ObjectDataset",
            "GreenplumTable": "GreenplumTableDataset",
            "HBaseObject": "HBaseObjectDataset",
            "HiveObject": "HiveObjectDataset",
            "HttpFile": "HttpDataset",
            "HubspotObject": "HubspotObjectDataset",
            "Iceberg": "IcebergDataset",
            "ImpalaObject": "ImpalaObjectDataset",
            "InformixTable": "InformixTableDataset",
            "JiraObject": "JiraObjectDataset",
            "Json": "JsonDataset",
            "LakehouseTable": "LakeHouseTableDataset",
            "MagentoObject": "MagentoObjectDataset",
            "MariaDBTable": "MariaDBTableDataset",
            "MarketoObject": "MarketoObjectDataset",
            "MicrosoftAccessTable": "MicrosoftAccessTableDataset",
            "MongoDbAtlasCollection": "MongoDbAtlasCollectionDataset",
            "MongoDbCollection": "MongoDbCollectionDataset",
            "MongoDbV2Collection": "MongoDbV2CollectionDataset",
            "MySqlTable": "MySqlTableDataset",
            "NetezzaTable": "NetezzaTableDataset",
            "ODataResource": "ODataResourceDataset",
            "OdbcTable": "OdbcTableDataset",
            "Office365Table": "Office365Dataset",
            "OracleServiceCloudObject": "OracleServiceCloudObjectDataset",
            "OracleTable": "OracleTableDataset",
            "Orc": "OrcDataset",
            "Parquet": "ParquetDataset",
            "PaypalObject": "PaypalObjectDataset",
            "PhoenixObject": "PhoenixObjectDataset",
            "PostgreSqlTable": "PostgreSqlTableDataset",
            "PostgreSqlV2Table": "PostgreSqlV2TableDataset",
            "PrestoObject": "PrestoObjectDataset",
            "QuickBooksObject": "QuickBooksObjectDataset",
            "RelationalTable": "RelationalTableDataset",
            "ResponsysObject": "ResponsysObjectDataset",
            "RestResource": "RestResourceDataset",
            "SalesforceMarketingCloudObject": "SalesforceMarketingCloudObjectDataset",
            "SalesforceObject": "SalesforceObjectDataset",
            "SalesforceServiceCloudObject": "SalesforceServiceCloudObjectDataset",
            "SalesforceServiceCloudV2Object": "SalesforceServiceCloudV2ObjectDataset",
            "SalesforceV2Object": "SalesforceV2ObjectDataset",
            "SapBwCube": "SapBwCubeDataset",
            "SapCloudForCustomerResource": "SapCloudForCustomerResourceDataset",
            "SapEccResource": "SapEccResourceDataset",
            "SapHanaTable": "SapHanaTableDataset",
            "SapOdpResource": "SapOdpResourceDataset",
            "SapOpenHubTable": "SapOpenHubTableDataset",
            "SapTableResource": "SapTableResourceDataset",
            "ServiceNowObject": "ServiceNowObjectDataset",
            "ServiceNowV2Object": "ServiceNowV2ObjectDataset",
            "SharePointOnlineListResource": "SharePointOnlineListResourceDataset",
            "ShopifyObject": "ShopifyObjectDataset",
            "SnowflakeTable": "SnowflakeDataset",
            "SnowflakeV2Table": "SnowflakeV2Dataset",
            "SparkObject": "SparkObjectDataset",
            "SqlServerTable": "SqlServerTableDataset",
            "SquareObject": "SquareObjectDataset",
            "SybaseTable": "SybaseTableDataset",
            "TeradataTable": "TeradataTableDataset",
            "VerticaTable": "VerticaTableDataset",
            "WarehouseTable": "WarehouseTableDataset",
            "WebTable": "WebTableDataset",
            "XeroObject": "XeroObjectDataset",
            "Xml": "XmlDataset",
            "ZohoObject": "ZohoObjectDataset",
        }
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.description = description
        self.structure = structure
        self.schema = schema
        self.linked_service_name = linked_service_name
        self.parameters = parameters
        self.annotations = annotations
        self.folder = folder


class AmazonMWSObjectDataset(Dataset):
    """Amazon Marketplace Web Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AmazonMWSObject"
        self.table_name = table_name


class CopySource(_serialization.Model):
    """A copy activity source.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonRdsForOracleSource, AvroSource, AzureBlobFSSource, AzureDataExplorerSource,
    AzureDataLakeStoreSource, AzureDatabricksDeltaLakeSource, BinarySource, BlobSource,
    CommonDataServiceForAppsSource, CosmosDbMongoDbApiSource, CosmosDbSqlApiSource,
    DelimitedTextSource, DocumentDbCollectionSource, DynamicsCrmSource, DynamicsSource,
    ExcelSource, FileSystemSource, HdfsSource, HttpSource, JsonSource, LakeHouseTableSource,
    MicrosoftAccessSource, MongoDbAtlasSource, MongoDbSource, MongoDbV2Source, ODataSource,
    Office365Source, OracleSource, OrcSource, ParquetSource, RelationalSource, RestSource,
    SalesforceServiceCloudSource, SalesforceServiceCloudV2Source, SharePointOnlineListSource,
    SnowflakeSource, SnowflakeV2Source, TabularSource, WebSource, XmlSource

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AmazonRdsForOracleSource": "AmazonRdsForOracleSource",
            "AvroSource": "AvroSource",
            "AzureBlobFSSource": "AzureBlobFSSource",
            "AzureDataExplorerSource": "AzureDataExplorerSource",
            "AzureDataLakeStoreSource": "AzureDataLakeStoreSource",
            "AzureDatabricksDeltaLakeSource": "AzureDatabricksDeltaLakeSource",
            "BinarySource": "BinarySource",
            "BlobSource": "BlobSource",
            "CommonDataServiceForAppsSource": "CommonDataServiceForAppsSource",
            "CosmosDbMongoDbApiSource": "CosmosDbMongoDbApiSource",
            "CosmosDbSqlApiSource": "CosmosDbSqlApiSource",
            "DelimitedTextSource": "DelimitedTextSource",
            "DocumentDbCollectionSource": "DocumentDbCollectionSource",
            "DynamicsCrmSource": "DynamicsCrmSource",
            "DynamicsSource": "DynamicsSource",
            "ExcelSource": "ExcelSource",
            "FileSystemSource": "FileSystemSource",
            "HdfsSource": "HdfsSource",
            "HttpSource": "HttpSource",
            "JsonSource": "JsonSource",
            "LakeHouseTableSource": "LakeHouseTableSource",
            "MicrosoftAccessSource": "MicrosoftAccessSource",
            "MongoDbAtlasSource": "MongoDbAtlasSource",
            "MongoDbSource": "MongoDbSource",
            "MongoDbV2Source": "MongoDbV2Source",
            "ODataSource": "ODataSource",
            "Office365Source": "Office365Source",
            "OracleSource": "OracleSource",
            "OrcSource": "OrcSource",
            "ParquetSource": "ParquetSource",
            "RelationalSource": "RelationalSource",
            "RestSource": "RestSource",
            "SalesforceServiceCloudSource": "SalesforceServiceCloudSource",
            "SalesforceServiceCloudV2Source": "SalesforceServiceCloudV2Source",
            "SharePointOnlineListSource": "SharePointOnlineListSource",
            "SnowflakeSource": "SnowflakeSource",
            "SnowflakeV2Source": "SnowflakeV2Source",
            "TabularSource": "TabularSource",
            "WebSource": "WebSource",
            "XmlSource": "XmlSource",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.source_retry_count = source_retry_count
        self.source_retry_wait = source_retry_wait
        self.max_concurrent_connections = max_concurrent_connections


class TabularSource(CopySource):
    """Copy activity sources of tabular type.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonMWSSource, AmazonRdsForSqlServerSource, AmazonRedshiftSource, AzureMariaDBSource,
    AzureMySqlSource, AzurePostgreSqlSource, AzureSqlSource, AzureTableSource, CassandraSource,
    ConcurSource, CouchbaseSource, Db2Source, DrillSource, DynamicsAXSource, EloquaSource,
    GoogleAdWordsSource, GoogleBigQuerySource, GoogleBigQueryV2Source, GreenplumSource,
    HBaseSource, HiveSource, HubspotSource, ImpalaSource, InformixSource, JiraSource,
    MagentoSource, MariaDBSource, MarketoSource, MySqlSource, NetezzaSource, OdbcSource,
    OracleServiceCloudSource, PaypalSource, PhoenixSource, PostgreSqlSource, PostgreSqlV2Source,
    PrestoSource, QuickBooksSource, ResponsysSource, SalesforceMarketingCloudSource,
    SalesforceSource, SalesforceV2Source, SapBwSource, SapCloudForCustomerSource, SapEccSource,
    SapHanaSource, SapOdpSource, SapOpenHubSource, SapTableSource, ServiceNowSource,
    ServiceNowV2Source, ShopifySource, SparkSource, SqlDWSource, SqlMISource, SqlServerSource,
    SqlSource, SquareSource, SybaseSource, TeradataSource, VerticaSource, WarehouseSource,
    XeroSource, ZohoSource

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AmazonMWSSource": "AmazonMWSSource",
            "AmazonRdsForSqlServerSource": "AmazonRdsForSqlServerSource",
            "AmazonRedshiftSource": "AmazonRedshiftSource",
            "AzureMariaDBSource": "AzureMariaDBSource",
            "AzureMySqlSource": "AzureMySqlSource",
            "AzurePostgreSqlSource": "AzurePostgreSqlSource",
            "AzureSqlSource": "AzureSqlSource",
            "AzureTableSource": "AzureTableSource",
            "CassandraSource": "CassandraSource",
            "ConcurSource": "ConcurSource",
            "CouchbaseSource": "CouchbaseSource",
            "Db2Source": "Db2Source",
            "DrillSource": "DrillSource",
            "DynamicsAXSource": "DynamicsAXSource",
            "EloquaSource": "EloquaSource",
            "GoogleAdWordsSource": "GoogleAdWordsSource",
            "GoogleBigQuerySource": "GoogleBigQuerySource",
            "GoogleBigQueryV2Source": "GoogleBigQueryV2Source",
            "GreenplumSource": "GreenplumSource",
            "HBaseSource": "HBaseSource",
            "HiveSource": "HiveSource",
            "HubspotSource": "HubspotSource",
            "ImpalaSource": "ImpalaSource",
            "InformixSource": "InformixSource",
            "JiraSource": "JiraSource",
            "MagentoSource": "MagentoSource",
            "MariaDBSource": "MariaDBSource",
            "MarketoSource": "MarketoSource",
            "MySqlSource": "MySqlSource",
            "NetezzaSource": "NetezzaSource",
            "OdbcSource": "OdbcSource",
            "OracleServiceCloudSource": "OracleServiceCloudSource",
            "PaypalSource": "PaypalSource",
            "PhoenixSource": "PhoenixSource",
            "PostgreSqlSource": "PostgreSqlSource",
            "PostgreSqlV2Source": "PostgreSqlV2Source",
            "PrestoSource": "PrestoSource",
            "QuickBooksSource": "QuickBooksSource",
            "ResponsysSource": "ResponsysSource",
            "SalesforceMarketingCloudSource": "SalesforceMarketingCloudSource",
            "SalesforceSource": "SalesforceSource",
            "SalesforceV2Source": "SalesforceV2Source",
            "SapBwSource": "SapBwSource",
            "SapCloudForCustomerSource": "SapCloudForCustomerSource",
            "SapEccSource": "SapEccSource",
            "SapHanaSource": "SapHanaSource",
            "SapOdpSource": "SapOdpSource",
            "SapOpenHubSource": "SapOpenHubSource",
            "SapTableSource": "SapTableSource",
            "ServiceNowSource": "ServiceNowSource",
            "ServiceNowV2Source": "ServiceNowV2Source",
            "ShopifySource": "ShopifySource",
            "SparkSource": "SparkSource",
            "SqlDWSource": "SqlDWSource",
            "SqlMISource": "SqlMISource",
            "SqlServerSource": "SqlServerSource",
            "SqlSource": "SqlSource",
            "SquareSource": "SquareSource",
            "SybaseSource": "SybaseSource",
            "TeradataSource": "TeradataSource",
            "VerticaSource": "VerticaSource",
            "WarehouseSource": "WarehouseSource",
            "XeroSource": "XeroSource",
            "ZohoSource": "ZohoSource",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "TabularSource"
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class AmazonMWSSource(TabularSource):
    """A copy activity Amazon Marketplace Web Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AmazonMWSSource"
        self.query = query


class AmazonRdsForOracleLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """AmazonRdsForOracle database. This linked service has supported version property. The Version
    1.0 is scheduled for deprecation while your pipeline will continue to run after EOL but without
    any bug fix or new features.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Only used for Version 1.0.
    :vartype connection_string: JSON
    :ivar server: The location of AmazonRdsForOracle database you want to connect to, the supported
     forms include connector descriptor, Easy Connect (Plus) Naming and Oracle Net Services Name
     (Only self-hosted IR). Type: string. Only used for Version 2.0.
    :vartype server: JSON
    :ivar authentication_type: Authentication type for connecting to the AmazonRdsForOracle
     database. Only used for Version 2.0. "Basic"
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AmazonRdsForOracleAuthenticationType
    :ivar username: The AmazonRdsForOracle database username. Type: string. Only used for Version
     2.0.
    :vartype username: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encryption_client: Specifies the encryption client behavior. Supported values are
     accepted, rejected, requested or required, default value is required. Type: string. Only used
     for Version 2.0.
    :vartype encryption_client: JSON
    :ivar encryption_types_client: Specifies the encryption algorithms that client can use.
     Supported values are AES128, AES192, AES256, 3DES112, 3DES168, default value is (AES256). Type:
     string. Only used for Version 2.0.
    :vartype encryption_types_client: JSON
    :ivar crypto_checksum_client: Specifies the desired data integrity behavior when this client
     connects to a server. Supported values are accepted, rejected, requested or required, default
     value is required. Type: string. Only used for Version 2.0.
    :vartype crypto_checksum_client: JSON
    :ivar crypto_checksum_types_client: Specifies the crypto-checksum algorithms that client can
     use. Supported values are SHA1, SHA256, SHA384, SHA512, default value is (SHA512). Type:
     string. Only used for Version 2.0.
    :vartype crypto_checksum_types_client: JSON
    :ivar initial_lob_fetch_size: Specifies the amount that the source initially fetches for LOB
     columns, default value is 0. Type: integer. Only used for Version 2.0.
    :vartype initial_lob_fetch_size: JSON
    :ivar fetch_size: Specifies the number of bytes that the driver allocates to fetch the data in
     one database round-trip, default value is 10485760. Type: integer. Only used for Version 2.0.
    :vartype fetch_size: JSON
    :ivar statement_cache_size: Specifies the number of cursors or statements to be cached for each
     database connection, default value is 0. Type: integer. Only used for Version 2.0.
    :vartype statement_cache_size: JSON
    :ivar initialization_string: Specifies a command that is issued immediately after connecting to
     the database to manage session settings. Type: string. Only used for Version 2.0.
    :vartype initialization_string: JSON
    :ivar enable_bulk_load: Specifies whether to use bulk copy or batch insert when loading data
     into the database, default value is true. Type: boolean. Only used for Version 2.0.
    :vartype enable_bulk_load: JSON
    :ivar support_v1_data_types: Specifies whether to use the Version 1.0 data type mappings. Do
     not set this to true unless you want to keep backward compatibility with Version 1.0's data
     type mappings, default value is false. Type: boolean. Only used for Version 2.0.
    :vartype support_v1_data_types: JSON
    :ivar fetch_tswtz_as_timestamp: Specifies whether the driver returns column value with the
     TIMESTAMP WITH TIME ZONE data type as DateTime or string. This setting is ignored if
     supportV1DataTypes is not true, default value is true. Type: boolean. Only used for Version
     2.0.
    :vartype fetch_tswtz_as_timestamp: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encryption_client": {"key": "typeProperties.encryptionClient", "type": "object"},
        "encryption_types_client": {"key": "typeProperties.encryptionTypesClient", "type": "object"},
        "crypto_checksum_client": {"key": "typeProperties.cryptoChecksumClient", "type": "object"},
        "crypto_checksum_types_client": {"key": "typeProperties.cryptoChecksumTypesClient", "type": "object"},
        "initial_lob_fetch_size": {"key": "typeProperties.initialLobFetchSize", "type": "object"},
        "fetch_size": {"key": "typeProperties.fetchSize", "type": "object"},
        "statement_cache_size": {"key": "typeProperties.statementCacheSize", "type": "object"},
        "initialization_string": {"key": "typeProperties.initializationString", "type": "object"},
        "enable_bulk_load": {"key": "typeProperties.enableBulkLoad", "type": "object"},
        "support_v1_data_types": {"key": "typeProperties.supportV1DataTypes", "type": "object"},
        "fetch_tswtz_as_timestamp": {"key": "typeProperties.fetchTswtzAsTimestamp", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AmazonRdsForOracleAuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encryption_client: Optional[JSON] = None,
        encryption_types_client: Optional[JSON] = None,
        crypto_checksum_client: Optional[JSON] = None,
        crypto_checksum_types_client: Optional[JSON] = None,
        initial_lob_fetch_size: Optional[JSON] = None,
        fetch_size: Optional[JSON] = None,
        statement_cache_size: Optional[JSON] = None,
        initialization_string: Optional[JSON] = None,
        enable_bulk_load: Optional[JSON] = None,
        support_v1_data_types: Optional[JSON] = None,
        fetch_tswtz_as_timestamp: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Only used for Version 1.0.
        :paramtype connection_string: JSON
        :keyword server: The location of AmazonRdsForOracle database you want to connect to, the
         supported forms include connector descriptor, Easy Connect (Plus) Naming and Oracle Net
         Services Name (Only self-hosted IR). Type: string. Only used for Version 2.0.
        :paramtype server: JSON
        :keyword authentication_type: Authentication type for connecting to the AmazonRdsForOracle
         database. Only used for Version 2.0. "Basic"
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AmazonRdsForOracleAuthenticationType
        :keyword username: The AmazonRdsForOracle database username. Type: string. Only used for
         Version 2.0.
        :paramtype username: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encryption_client: Specifies the encryption client behavior. Supported values are
         accepted, rejected, requested or required, default value is required. Type: string. Only used
         for Version 2.0.
        :paramtype encryption_client: JSON
        :keyword encryption_types_client: Specifies the encryption algorithms that client can use.
         Supported values are AES128, AES192, AES256, 3DES112, 3DES168, default value is (AES256). Type:
         string. Only used for Version 2.0.
        :paramtype encryption_types_client: JSON
        :keyword crypto_checksum_client: Specifies the desired data integrity behavior when this client
         connects to a server. Supported values are accepted, rejected, requested or required, default
         value is required. Type: string. Only used for Version 2.0.
        :paramtype crypto_checksum_client: JSON
        :keyword crypto_checksum_types_client: Specifies the crypto-checksum algorithms that client can
         use. Supported values are SHA1, SHA256, SHA384, SHA512, default value is (SHA512). Type:
         string. Only used for Version 2.0.
        :paramtype crypto_checksum_types_client: JSON
        :keyword initial_lob_fetch_size: Specifies the amount that the source initially fetches for LOB
         columns, default value is 0. Type: integer. Only used for Version 2.0.
        :paramtype initial_lob_fetch_size: JSON
        :keyword fetch_size: Specifies the number of bytes that the driver allocates to fetch the data
         in one database round-trip, default value is 10485760. Type: integer. Only used for Version
         2.0.
        :paramtype fetch_size: JSON
        :keyword statement_cache_size: Specifies the number of cursors or statements to be cached for
         each database connection, default value is 0. Type: integer. Only used for Version 2.0.
        :paramtype statement_cache_size: JSON
        :keyword initialization_string: Specifies a command that is issued immediately after connecting
         to the database to manage session settings. Type: string. Only used for Version 2.0.
        :paramtype initialization_string: JSON
        :keyword enable_bulk_load: Specifies whether to use bulk copy or batch insert when loading data
         into the database, default value is true. Type: boolean. Only used for Version 2.0.
        :paramtype enable_bulk_load: JSON
        :keyword support_v1_data_types: Specifies whether to use the Version 1.0 data type mappings. Do
         not set this to true unless you want to keep backward compatibility with Version 1.0's data
         type mappings, default value is false. Type: boolean. Only used for Version 2.0.
        :paramtype support_v1_data_types: JSON
        :keyword fetch_tswtz_as_timestamp: Specifies whether the driver returns column value with the
         TIMESTAMP WITH TIME ZONE data type as DateTime or string. This setting is ignored if
         supportV1DataTypes is not true, default value is true. Type: boolean. Only used for Version
         2.0.
        :paramtype fetch_tswtz_as_timestamp: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AmazonRdsForOracle"
        self.connection_string = connection_string
        self.server = server
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.encryption_client = encryption_client
        self.encryption_types_client = encryption_types_client
        self.crypto_checksum_client = crypto_checksum_client
        self.crypto_checksum_types_client = crypto_checksum_types_client
        self.initial_lob_fetch_size = initial_lob_fetch_size
        self.fetch_size = fetch_size
        self.statement_cache_size = statement_cache_size
        self.initialization_string = initialization_string
        self.enable_bulk_load = enable_bulk_load
        self.support_v1_data_types = support_v1_data_types
        self.fetch_tswtz_as_timestamp = fetch_tswtz_as_timestamp
        self.encrypted_credential = encrypted_credential


class AmazonRdsForOraclePartitionSettings(_serialization.Model):
    """The settings that will be leveraged for AmazonRdsForOracle source partitioning.

    :ivar partition_names: Names of the physical partitions of AmazonRdsForOracle table.
    :vartype partition_names: JSON
    :ivar partition_column_name: The name of the column in integer type that will be used for
     proceeding range partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_lower_bound: JSON
    """

    _attribute_map = {
        "partition_names": {"key": "partitionNames", "type": "object"},
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_names: Optional[JSON] = None,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_names: Names of the physical partitions of AmazonRdsForOracle table.
        :paramtype partition_names: JSON
        :keyword partition_column_name: The name of the column in integer type that will be used for
         proceeding range partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_lower_bound: JSON
        """
        super().__init__(**kwargs)
        self.partition_names = partition_names
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound


class AmazonRdsForOracleSource(CopySource):  # pylint: disable=too-many-instance-attributes
    """A copy activity AmazonRdsForOracle source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar oracle_reader_query: AmazonRdsForOracle reader query. Type: string (or Expression with
     resultType string).
    :vartype oracle_reader_query: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar partition_option: The partition mechanism that will be used for AmazonRdsForOracle read
     in parallel. Type: string (or Expression with resultType string).
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for AmazonRdsForOracle source
     partitioning.
    :vartype partition_settings:
     ~azure.synapse.artifacts.models.AmazonRdsForOraclePartitionSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar number_precision: The decimal precision used to represent Oracle NUMBER type without
     precision and scale. The range is 1 to 256 and default value is 256 if not specified. Type:
     integer (or Expression with resultType integer). Only used for Version 2.0.
    :vartype number_precision: JSON
    :ivar number_scale: The decimal scale used to represent Oracle NUMBER type without precision
     and scale. The range is 0 to 130 and default value is 130 if not specified. Type: integer (or
     Expression with resultType integer). Only used for Version 2.0.
    :vartype number_scale: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "oracle_reader_query": {"key": "oracleReaderQuery", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "AmazonRdsForOraclePartitionSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "number_precision": {"key": "numberPrecision", "type": "object"},
        "number_scale": {"key": "numberScale", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        oracle_reader_query: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.AmazonRdsForOraclePartitionSettings"] = None,
        additional_columns: Optional[JSON] = None,
        number_precision: Optional[JSON] = None,
        number_scale: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword oracle_reader_query: AmazonRdsForOracle reader query. Type: string (or Expression with
         resultType string).
        :paramtype oracle_reader_query: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword partition_option: The partition mechanism that will be used for AmazonRdsForOracle
         read in parallel. Type: string (or Expression with resultType string).
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for AmazonRdsForOracle source
         partitioning.
        :paramtype partition_settings:
         ~azure.synapse.artifacts.models.AmazonRdsForOraclePartitionSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword number_precision: The decimal precision used to represent Oracle NUMBER type without
         precision and scale. The range is 1 to 256 and default value is 256 if not specified. Type:
         integer (or Expression with resultType integer). Only used for Version 2.0.
        :paramtype number_precision: JSON
        :keyword number_scale: The decimal scale used to represent Oracle NUMBER type without precision
         and scale. The range is 0 to 130 and default value is 130 if not specified. Type: integer (or
         Expression with resultType integer). Only used for Version 2.0.
        :paramtype number_scale: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AmazonRdsForOracleSource"
        self.oracle_reader_query = oracle_reader_query
        self.query_timeout = query_timeout
        self.partition_option = partition_option
        self.partition_settings = partition_settings
        self.additional_columns = additional_columns
        self.number_precision = number_precision
        self.number_scale = number_scale


class AmazonRdsForOracleTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The AmazonRdsForOracle database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of the AmazonRdsForOracle database. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the AmazonRdsForOracle database. Type: string (or Expression
     with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of the AmazonRdsForOracle database.
         Type: string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the AmazonRdsForOracle database. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AmazonRdsForOracleTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class AmazonRdsForSqlServerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Amazon RDS for SQL Server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL" and "Windows".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AmazonRdsForSqlServerAuthenticationType
    :ivar user_name: The on-premises Windows authentication user name. Type: string (or Expression
     with resultType string).
    :vartype user_name: JSON
    :ivar password: The on-premises Windows authentication password.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "encrypt": {"key": "typeProperties.encrypt", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "typeProperties.hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "typeProperties.applicationIntent", "type": "object"},
        "connect_timeout": {"key": "typeProperties.connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "typeProperties.connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "typeProperties.connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "typeProperties.loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "integrated_security": {"key": "typeProperties.integratedSecurity", "type": "object"},
        "failover_partner": {"key": "typeProperties.failoverPartner", "type": "object"},
        "max_pool_size": {"key": "typeProperties.maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "typeProperties.minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "typeProperties.multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "typeProperties.multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "typeProperties.packetSize", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "always_encrypted_settings": {
            "key": "typeProperties.alwaysEncryptedSettings",
            "type": "SqlAlwaysEncryptedProperties",
        },
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AmazonRdsForSqlServerAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL" and "Windows".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AmazonRdsForSqlServerAuthenticationType
        :keyword user_name: The on-premises Windows authentication user name. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The on-premises Windows authentication password.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AmazonRdsForSqlServer"
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.always_encrypted_settings = always_encrypted_settings


class SqlServerBaseLinkedServiceTypeProperties(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """Sql Server family connector common linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        """
        super().__init__(**kwargs)
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling


class AmazonRdsForSqlServerLinkedServiceTypeProperties(
    SqlServerBaseLinkedServiceTypeProperties
):  # pylint: disable=too-many-instance-attributes
    """SQL Server linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL" and "Windows".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AmazonRdsForSqlServerAuthenticationType
    :ivar user_name: The on-premises Windows authentication user name. Type: string (or Expression
     with resultType string).
    :vartype user_name: JSON
    :ivar password: The on-premises Windows authentication password.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
        "connection_string": {"key": "connectionString", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "SecretBase"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "object"},
        "always_encrypted_settings": {"key": "alwaysEncryptedSettings", "type": "SqlAlwaysEncryptedProperties"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AmazonRdsForSqlServerAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL" and "Windows".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AmazonRdsForSqlServerAuthenticationType
        :keyword user_name: The on-premises Windows authentication user name. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The on-premises Windows authentication password.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        """
        super().__init__(
            server=server,
            database=database,
            encrypt=encrypt,
            trust_server_certificate=trust_server_certificate,
            host_name_in_certificate=host_name_in_certificate,
            application_intent=application_intent,
            connect_timeout=connect_timeout,
            connect_retry_count=connect_retry_count,
            connect_retry_interval=connect_retry_interval,
            load_balance_timeout=load_balance_timeout,
            command_timeout=command_timeout,
            integrated_security=integrated_security,
            failover_partner=failover_partner,
            max_pool_size=max_pool_size,
            min_pool_size=min_pool_size,
            multiple_active_result_sets=multiple_active_result_sets,
            multi_subnet_failover=multi_subnet_failover,
            packet_size=packet_size,
            pooling=pooling,
            **kwargs
        )
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.always_encrypted_settings = always_encrypted_settings


class AmazonRdsForSqlServerSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Amazon RDS for SQL Server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL reader query. Type: string (or Expression with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database source.
     This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression with
     resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar produce_additional_types: Which additional types to produce.
    :vartype produce_additional_types: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "produce_additional_types": {"key": "produceAdditionalTypes", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        produce_additional_types: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL reader query. Type: string (or Expression with resultType
         string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database
         source. This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression
         with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword produce_additional_types: Which additional types to produce.
        :paramtype produce_additional_types: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AmazonRdsForSqlServerSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.produce_additional_types = produce_additional_types
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class AmazonRdsForSqlServerTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Amazon RDS for SQL Server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of the SQL Server dataset. Type: string
     (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the SQL Server dataset. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of the SQL Server dataset. Type: string
         (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the SQL Server dataset. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AmazonRdsForSqlServerTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class AmazonRedshiftLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Amazon Redshift.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name of the Amazon Redshift server. Type: string (or Expression with
     resultType string). Required.
    :vartype server: JSON
    :ivar username: The username of the Amazon Redshift source. Type: string (or Expression with
     resultType string).
    :vartype username: JSON
    :ivar password: The password of the Amazon Redshift source.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar database: The database name of the Amazon Redshift source. Type: string (or Expression
     with resultType string). Required.
    :vartype database: JSON
    :ivar port: The TCP port number that the Amazon Redshift server uses to listen for client
     connections. The default value is 5439. Type: integer (or Expression with resultType integer).
    :vartype port: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        port: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name of the Amazon Redshift server. Type: string (or Expression with
         resultType string). Required.
        :paramtype server: JSON
        :keyword username: The username of the Amazon Redshift source. Type: string (or Expression with
         resultType string).
        :paramtype username: JSON
        :keyword password: The password of the Amazon Redshift source.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword database: The database name of the Amazon Redshift source. Type: string (or Expression
         with resultType string). Required.
        :paramtype database: JSON
        :keyword port: The TCP port number that the Amazon Redshift server uses to listen for client
         connections. The default value is 5439. Type: integer (or Expression with resultType integer).
        :paramtype port: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AmazonRedshift"
        self.server = server
        self.username = username
        self.password = password
        self.database = database
        self.port = port
        self.encrypted_credential = encrypted_credential


class AmazonRedshiftSource(TabularSource):
    """A copy activity source for Amazon Redshift Source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar redshift_unload_settings: The Amazon S3 settings needed for the interim Amazon S3 when
     copying from Amazon Redshift with unload. With this, data from Amazon Redshift source will be
     unloaded into S3 first and then copied into the targeted sink from the interim S3.
    :vartype redshift_unload_settings: ~azure.synapse.artifacts.models.RedshiftUnloadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "redshift_unload_settings": {"key": "redshiftUnloadSettings", "type": "RedshiftUnloadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        redshift_unload_settings: Optional["_models.RedshiftUnloadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword redshift_unload_settings: The Amazon S3 settings needed for the interim Amazon S3 when
         copying from Amazon Redshift with unload. With this, data from Amazon Redshift source will be
         unloaded into S3 first and then copied into the targeted sink from the interim S3.
        :paramtype redshift_unload_settings: ~azure.synapse.artifacts.models.RedshiftUnloadSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AmazonRedshiftSource"
        self.query = query
        self.redshift_unload_settings = redshift_unload_settings


class AmazonRedshiftTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Amazon Redshift table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The Amazon Redshift table name. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The Amazon Redshift schema name. Type: string (or
     Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The Amazon Redshift table name. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The Amazon Redshift schema name. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AmazonRedshiftTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class AmazonS3Dataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """A single Amazon Simple Storage Service (S3) object or a set of S3 objects.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar bucket_name: The name of the Amazon S3 bucket. Type: string (or Expression with
     resultType string). Required.
    :vartype bucket_name: JSON
    :ivar key: The key of the Amazon S3 object. Type: string (or Expression with resultType
     string).
    :vartype key: JSON
    :ivar prefix: The prefix filter for the S3 object name. Type: string (or Expression with
     resultType string).
    :vartype prefix: JSON
    :ivar version: The version for the S3 object. Type: string (or Expression with resultType
     string).
    :vartype version: JSON
    :ivar modified_datetime_start: The start of S3 object's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of S3 object's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar format: The format of files.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar compression: The data compression method used for the Amazon S3 object.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "bucket_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "bucket_name": {"key": "typeProperties.bucketName", "type": "object"},
        "key": {"key": "typeProperties.key", "type": "object"},
        "prefix": {"key": "typeProperties.prefix", "type": "object"},
        "version": {"key": "typeProperties.version", "type": "object"},
        "modified_datetime_start": {"key": "typeProperties.modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "typeProperties.modifiedDatetimeEnd", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        bucket_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        key: Optional[JSON] = None,
        prefix: Optional[JSON] = None,
        version: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword bucket_name: The name of the Amazon S3 bucket. Type: string (or Expression with
         resultType string). Required.
        :paramtype bucket_name: JSON
        :keyword key: The key of the Amazon S3 object. Type: string (or Expression with resultType
         string).
        :paramtype key: JSON
        :keyword prefix: The prefix filter for the S3 object name. Type: string (or Expression with
         resultType string).
        :paramtype prefix: JSON
        :keyword version: The version for the S3 object. Type: string (or Expression with resultType
         string).
        :paramtype version: JSON
        :keyword modified_datetime_start: The start of S3 object's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of S3 object's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword format: The format of files.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword compression: The data compression method used for the Amazon S3 object.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AmazonS3Object"
        self.bucket_name = bucket_name
        self.key = key
        self.prefix = prefix
        self.version = version
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.format = format
        self.compression = compression


class AmazonS3LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Amazon S3.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar authentication_type: The authentication type of S3. Allowed value: AccessKey (default) or
     TemporarySecurityCredentials. Type: string (or Expression with resultType string).
    :vartype authentication_type: JSON
    :ivar access_key_id: The access key identifier of the Amazon S3 Identity and Access Management
     (IAM) user. Type: string (or Expression with resultType string).
    :vartype access_key_id: JSON
    :ivar secret_access_key: The secret access key of the Amazon S3 Identity and Access Management
     (IAM) user.
    :vartype secret_access_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_url: This value specifies the endpoint to access with the S3 Connector. This is
     an optional property; change it only if you want to try a different service endpoint or want to
     switch between https and http. Type: string (or Expression with resultType string).
    :vartype service_url: JSON
    :ivar session_token: The session token for the S3 temporary security credential.
    :vartype session_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "access_key_id": {"key": "typeProperties.accessKeyId", "type": "object"},
        "secret_access_key": {"key": "typeProperties.secretAccessKey", "type": "SecretBase"},
        "service_url": {"key": "typeProperties.serviceUrl", "type": "object"},
        "session_token": {"key": "typeProperties.sessionToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        access_key_id: Optional[JSON] = None,
        secret_access_key: Optional["_models.SecretBase"] = None,
        service_url: Optional[JSON] = None,
        session_token: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword authentication_type: The authentication type of S3. Allowed value: AccessKey (default)
         or TemporarySecurityCredentials. Type: string (or Expression with resultType string).
        :paramtype authentication_type: JSON
        :keyword access_key_id: The access key identifier of the Amazon S3 Identity and Access
         Management (IAM) user. Type: string (or Expression with resultType string).
        :paramtype access_key_id: JSON
        :keyword secret_access_key: The secret access key of the Amazon S3 Identity and Access
         Management (IAM) user.
        :paramtype secret_access_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_url: This value specifies the endpoint to access with the S3 Connector. This
         is an optional property; change it only if you want to try a different service endpoint or want
         to switch between https and http. Type: string (or Expression with resultType string).
        :paramtype service_url: JSON
        :keyword session_token: The session token for the S3 temporary security credential.
        :paramtype session_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AmazonS3"
        self.authentication_type = authentication_type
        self.access_key_id = access_key_id
        self.secret_access_key = secret_access_key
        self.service_url = service_url
        self.session_token = session_token
        self.encrypted_credential = encrypted_credential


class DatasetLocation(_serialization.Model):
    """Dataset location.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonS3Location, AzureBlobFSLocation, AzureBlobStorageLocation, AzureDataLakeStoreLocation,
    AzureFileStorageLocation, FileServerLocation, FtpServerLocation, GoogleCloudStorageLocation,
    HdfsLocation, HttpServerLocation, LakeHouseLocation, SftpLocation

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AmazonS3Location": "AmazonS3Location",
            "AzureBlobFSLocation": "AzureBlobFSLocation",
            "AzureBlobStorageLocation": "AzureBlobStorageLocation",
            "AzureDataLakeStoreLocation": "AzureDataLakeStoreLocation",
            "AzureFileStorageLocation": "AzureFileStorageLocation",
            "FileServerLocation": "FileServerLocation",
            "FtpServerLocation": "FtpServerLocation",
            "GoogleCloudStorageLocation": "GoogleCloudStorageLocation",
            "HdfsLocation": "HdfsLocation",
            "HttpServerLocation": "HttpServerLocation",
            "LakeHouseLocation": "LakeHouseLocation",
            "SftpLocation": "SftpLocation",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.folder_path = folder_path
        self.file_name = file_name


class AmazonS3Location(DatasetLocation):
    """The location of amazon S3 dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar bucket_name: Specify the bucketName of amazon S3. Type: string (or Expression with
     resultType string).
    :vartype bucket_name: JSON
    :ivar version: Specify the version of amazon S3. Type: string (or Expression with resultType
     string).
    :vartype version: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
        "bucket_name": {"key": "bucketName", "type": "object"},
        "version": {"key": "version", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        bucket_name: Optional[JSON] = None,
        version: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword bucket_name: Specify the bucketName of amazon S3. Type: string (or Expression with
         resultType string).
        :paramtype bucket_name: JSON
        :keyword version: Specify the version of amazon S3. Type: string (or Expression with resultType
         string).
        :paramtype version: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "AmazonS3Location"
        self.bucket_name = bucket_name
        self.version = version


class StoreReadSettings(_serialization.Model):
    """Connector read setting.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AmazonS3ReadSettings, AzureBlobFSReadSettings, AzureBlobStorageReadSettings,
    AzureDataLakeStoreReadSettings, AzureFileStorageReadSettings, FileServerReadSettings,
    FtpReadSettings, GoogleCloudStorageReadSettings, HdfsReadSettings, HttpReadSettings,
    LakeHouseReadSettings, SftpReadSettings

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AmazonS3ReadSettings": "AmazonS3ReadSettings",
            "AzureBlobFSReadSettings": "AzureBlobFSReadSettings",
            "AzureBlobStorageReadSettings": "AzureBlobStorageReadSettings",
            "AzureDataLakeStoreReadSettings": "AzureDataLakeStoreReadSettings",
            "AzureFileStorageReadSettings": "AzureFileStorageReadSettings",
            "FileServerReadSettings": "FileServerReadSettings",
            "FtpReadSettings": "FtpReadSettings",
            "GoogleCloudStorageReadSettings": "GoogleCloudStorageReadSettings",
            "HdfsReadSettings": "HdfsReadSettings",
            "HttpReadSettings": "HttpReadSettings",
            "LakeHouseReadSettings": "LakeHouseReadSettings",
            "SftpReadSettings": "SftpReadSettings",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.max_concurrent_connections = max_concurrent_connections


class AmazonS3ReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Azure data lake store read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: AmazonS3 wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: AmazonS3 wildcardFileName. Type: string (or Expression with
     resultType string).
    :vartype wildcard_file_name: JSON
    :ivar prefix: The prefix filter for the S3 object name. Type: string (or Expression with
     resultType string).
    :vartype prefix: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "prefix": {"key": "prefix", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        prefix: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: AmazonS3 wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: AmazonS3 wildcardFileName. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword prefix: The prefix filter for the S3 object name. Type: string (or Expression with
         resultType string).
        :paramtype prefix: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "AmazonS3ReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.prefix = prefix
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class ControlActivity(Activity):
    """Base class for all control activities like IfCondition, ForEach , Until.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AppendVariableActivity, ExecutePipelineActivity, FailActivity, FilterActivity, ForEachActivity,
    IfConditionActivity, SetVariableActivity, SwitchActivity, UntilActivity, ValidationActivity,
    WaitActivity, WebHookActivity

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
    }

    _subtype_map = {
        "type": {
            "AppendVariable": "AppendVariableActivity",
            "ExecutePipeline": "ExecutePipelineActivity",
            "Fail": "FailActivity",
            "Filter": "FilterActivity",
            "ForEach": "ForEachActivity",
            "IfCondition": "IfConditionActivity",
            "SetVariable": "SetVariableActivity",
            "Switch": "SwitchActivity",
            "Until": "UntilActivity",
            "Validation": "ValidationActivity",
            "Wait": "WaitActivity",
            "WebHook": "WebHookActivity",
        }
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Container"


class AppendVariableActivity(ControlActivity):
    """Append value for a Variable of type Array.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar variable_name: Name of the variable whose value needs to be appended to.
    :vartype variable_name: str
    :ivar value: Value to be appended. Could be a static value or Expression.
    :vartype value: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "variable_name": {"key": "typeProperties.variableName", "type": "str"},
        "value": {"key": "typeProperties.value", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        variable_name: Optional[str] = None,
        value: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword variable_name: Name of the variable whose value needs to be appended to.
        :paramtype variable_name: str
        :keyword value: Value to be appended. Could be a static value or Expression.
        :paramtype value: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "AppendVariable"
        self.variable_name = variable_name
        self.value = value


class AppFiguresLinkedService(LinkedService):
    """Linked service for AppFigures.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar user_name: The username of the Appfigures source. Required.
    :vartype user_name: JSON
    :ivar password: The password of the AppFigures source. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar client_key: The client key for the AppFigures source. Required.
    :vartype client_key: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "type": {"required": True},
        "user_name": {"required": True},
        "password": {"required": True},
        "client_key": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "client_key": {"key": "typeProperties.clientKey", "type": "SecretBase"},
    }

    def __init__(
        self,
        *,
        user_name: JSON,
        password: "_models.SecretBase",
        client_key: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword user_name: The username of the Appfigures source. Required.
        :paramtype user_name: JSON
        :keyword password: The password of the AppFigures source. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword client_key: The client key for the AppFigures source. Required.
        :paramtype client_key: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AppFigures"
        self.user_name = user_name
        self.password = password
        self.client_key = client_key


class ArtifactRenameRequest(_serialization.Model):
    """Request body structure for rename artifact.

    :ivar new_name: New name of the artifact.
    :vartype new_name: str
    """

    _validation = {
        "new_name": {"max_length": 260, "min_length": 1, "pattern": r"^[A-Za-z0-9_][^<>*#.%&:\\+?/]*$"},
    }

    _attribute_map = {
        "new_name": {"key": "newName", "type": "str"},
    }

    def __init__(self, *, new_name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword new_name: New name of the artifact.
        :paramtype new_name: str
        """
        super().__init__(**kwargs)
        self.new_name = new_name


class AsanaLinkedService(LinkedService):
    """Linked service for Asana.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar api_token: The api token for the Asana source. Required.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "api_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        api_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword api_token: The api token for the Asana source. Required.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Asana"
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class AutoPauseProperties(_serialization.Model):
    """Auto-pausing properties of a Big Data pool powered by Apache Spark.

    :ivar delay_in_minutes: Number of minutes of idle time before the Big Data pool is
     automatically paused.
    :vartype delay_in_minutes: int
    :ivar enabled: Whether auto-pausing is enabled for the Big Data pool.
    :vartype enabled: bool
    """

    _attribute_map = {
        "delay_in_minutes": {"key": "delayInMinutes", "type": "int"},
        "enabled": {"key": "enabled", "type": "bool"},
    }

    def __init__(
        self, *, delay_in_minutes: Optional[int] = None, enabled: Optional[bool] = None, **kwargs: Any
    ) -> None:
        """
        :keyword delay_in_minutes: Number of minutes of idle time before the Big Data pool is
         automatically paused.
        :paramtype delay_in_minutes: int
        :keyword enabled: Whether auto-pausing is enabled for the Big Data pool.
        :paramtype enabled: bool
        """
        super().__init__(**kwargs)
        self.delay_in_minutes = delay_in_minutes
        self.enabled = enabled


class AutoScaleProperties(_serialization.Model):
    """Auto-scaling properties of a Big Data pool powered by Apache Spark.

    :ivar min_node_count: The minimum number of nodes the Big Data pool can support.
    :vartype min_node_count: int
    :ivar enabled: Whether automatic scaling is enabled for the Big Data pool.
    :vartype enabled: bool
    :ivar max_node_count: The maximum number of nodes the Big Data pool can support.
    :vartype max_node_count: int
    """

    _attribute_map = {
        "min_node_count": {"key": "minNodeCount", "type": "int"},
        "enabled": {"key": "enabled", "type": "bool"},
        "max_node_count": {"key": "maxNodeCount", "type": "int"},
    }

    def __init__(
        self,
        *,
        min_node_count: Optional[int] = None,
        enabled: Optional[bool] = None,
        max_node_count: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword min_node_count: The minimum number of nodes the Big Data pool can support.
        :paramtype min_node_count: int
        :keyword enabled: Whether automatic scaling is enabled for the Big Data pool.
        :paramtype enabled: bool
        :keyword max_node_count: The maximum number of nodes the Big Data pool can support.
        :paramtype max_node_count: int
        """
        super().__init__(**kwargs)
        self.min_node_count = min_node_count
        self.enabled = enabled
        self.max_node_count = max_node_count


class AvroDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Avro dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the avro storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar avro_compression_codec: A string from AvroCompressionCodecEnum or an expression.
    :vartype avro_compression_codec: JSON
    :ivar avro_compression_level:
    :vartype avro_compression_level: int
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "avro_compression_level": {"maximum": 9, "minimum": 1},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "avro_compression_codec": {"key": "typeProperties.avroCompressionCodec", "type": "object"},
        "avro_compression_level": {"key": "typeProperties.avroCompressionLevel", "type": "int"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        avro_compression_codec: Optional[JSON] = None,
        avro_compression_level: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the avro storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword avro_compression_codec: A string from AvroCompressionCodecEnum or an expression.
        :paramtype avro_compression_codec: JSON
        :keyword avro_compression_level:
        :paramtype avro_compression_level: int
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Avro"
        self.location = location
        self.avro_compression_codec = avro_compression_codec
        self.avro_compression_level = avro_compression_level


class DatasetStorageFormat(_serialization.Model):
    """The format definition of a storage.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AvroFormat, JsonFormat, OrcFormat, ParquetFormat, TextFormat

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AvroFormat": "AvroFormat",
            "JsonFormat": "JsonFormat",
            "OrcFormat": "OrcFormat",
            "ParquetFormat": "ParquetFormat",
            "TextFormat": "TextFormat",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.serializer = serializer
        self.deserializer = deserializer


class AvroFormat(DatasetStorageFormat):
    """The data stored in Avro format.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        """
        super().__init__(
            additional_properties=additional_properties, serializer=serializer, deserializer=deserializer, **kwargs
        )
        self.type: str = "AvroFormat"


class CopySink(_serialization.Model):
    """A copy activity sink.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AvroSink, AzureBlobFSSink, AzureDataExplorerSink, AzureDataLakeStoreSink,
    AzureDatabricksDeltaLakeSink, AzureMySqlSink, AzurePostgreSqlSink, AzureQueueSink,
    AzureSearchIndexSink, AzureSqlSink, AzureTableSink, BinarySink, BlobSink,
    CommonDataServiceForAppsSink, CosmosDbMongoDbApiSink, CosmosDbSqlApiSink, DelimitedTextSink,
    DocumentDbCollectionSink, DynamicsCrmSink, DynamicsSink, FileSystemSink, IcebergSink,
    InformixSink, JsonSink, LakeHouseTableSink, MicrosoftAccessSink, OdbcSink, OracleSink, OrcSink,
    ParquetSink, RestSink, SalesforceServiceCloudSink, SalesforceServiceCloudV2Sink,
    SalesforceSink, SalesforceV2Sink, SapCloudForCustomerSink, SnowflakeSink, SnowflakeV2Sink,
    SqlDWSink, SqlMISink, SqlServerSink, SqlSink, TeradataSink, WarehouseSink

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
    }

    _subtype_map = {
        "type": {
            "AvroSink": "AvroSink",
            "AzureBlobFSSink": "AzureBlobFSSink",
            "AzureDataExplorerSink": "AzureDataExplorerSink",
            "AzureDataLakeStoreSink": "AzureDataLakeStoreSink",
            "AzureDatabricksDeltaLakeSink": "AzureDatabricksDeltaLakeSink",
            "AzureMySqlSink": "AzureMySqlSink",
            "AzurePostgreSqlSink": "AzurePostgreSqlSink",
            "AzureQueueSink": "AzureQueueSink",
            "AzureSearchIndexSink": "AzureSearchIndexSink",
            "AzureSqlSink": "AzureSqlSink",
            "AzureTableSink": "AzureTableSink",
            "BinarySink": "BinarySink",
            "BlobSink": "BlobSink",
            "CommonDataServiceForAppsSink": "CommonDataServiceForAppsSink",
            "CosmosDbMongoDbApiSink": "CosmosDbMongoDbApiSink",
            "CosmosDbSqlApiSink": "CosmosDbSqlApiSink",
            "DelimitedTextSink": "DelimitedTextSink",
            "DocumentDbCollectionSink": "DocumentDbCollectionSink",
            "DynamicsCrmSink": "DynamicsCrmSink",
            "DynamicsSink": "DynamicsSink",
            "FileSystemSink": "FileSystemSink",
            "IcebergSink": "IcebergSink",
            "InformixSink": "InformixSink",
            "JsonSink": "JsonSink",
            "LakeHouseTableSink": "LakeHouseTableSink",
            "MicrosoftAccessSink": "MicrosoftAccessSink",
            "OdbcSink": "OdbcSink",
            "OracleSink": "OracleSink",
            "OrcSink": "OrcSink",
            "ParquetSink": "ParquetSink",
            "RestSink": "RestSink",
            "SalesforceServiceCloudSink": "SalesforceServiceCloudSink",
            "SalesforceServiceCloudV2Sink": "SalesforceServiceCloudV2Sink",
            "SalesforceSink": "SalesforceSink",
            "SalesforceV2Sink": "SalesforceV2Sink",
            "SapCloudForCustomerSink": "SapCloudForCustomerSink",
            "SnowflakeSink": "SnowflakeSink",
            "SnowflakeV2Sink": "SnowflakeV2Sink",
            "SqlDWSink": "SqlDWSink",
            "SqlMISink": "SqlMISink",
            "SqlServerSink": "SqlServerSink",
            "SqlSink": "SqlSink",
            "TeradataSink": "TeradataSink",
            "WarehouseSink": "WarehouseSink",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.write_batch_size = write_batch_size
        self.write_batch_timeout = write_batch_timeout
        self.sink_retry_count = sink_retry_count
        self.sink_retry_wait = sink_retry_wait
        self.max_concurrent_connections = max_concurrent_connections


class AvroSink(CopySink):
    """A copy activity Avro sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Avro store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: Avro format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.AvroWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "AvroWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.AvroWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Avro store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: Avro format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.AvroWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AvroSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class AvroSource(CopySource):
    """A copy activity Avro source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Avro store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Avro store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AvroSource"
        self.store_settings = store_settings
        self.additional_columns = additional_columns


class FormatWriteSettings(_serialization.Model):
    """Format write settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AvroWriteSettings, DelimitedTextWriteSettings, IcebergWriteSettings, JsonWriteSettings,
    OrcWriteSettings, ParquetWriteSettings

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "AvroWriteSettings": "AvroWriteSettings",
            "DelimitedTextWriteSettings": "DelimitedTextWriteSettings",
            "IcebergWriteSettings": "IcebergWriteSettings",
            "JsonWriteSettings": "JsonWriteSettings",
            "OrcWriteSettings": "OrcWriteSettings",
            "ParquetWriteSettings": "ParquetWriteSettings",
        }
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class AvroWriteSettings(FormatWriteSettings):
    """Avro write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar record_name: Top level record name in write result, which is required in AVRO spec.
    :vartype record_name: str
    :ivar record_namespace: Record namespace in the write result.
    :vartype record_namespace: str
    :ivar max_rows_per_file: Limit the written file's row count to be smaller than or equal to the
     specified count. Type: integer (or Expression with resultType integer).
    :vartype max_rows_per_file: JSON
    :ivar file_name_prefix: Specifies the file name pattern
     :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
     based store without partitionOptions. Type: string (or Expression with resultType string).
    :vartype file_name_prefix: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "record_name": {"key": "recordName", "type": "str"},
        "record_namespace": {"key": "recordNamespace", "type": "str"},
        "max_rows_per_file": {"key": "maxRowsPerFile", "type": "object"},
        "file_name_prefix": {"key": "fileNamePrefix", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        record_name: Optional[str] = None,
        record_namespace: Optional[str] = None,
        max_rows_per_file: Optional[JSON] = None,
        file_name_prefix: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword record_name: Top level record name in write result, which is required in AVRO spec.
        :paramtype record_name: str
        :keyword record_namespace: Record namespace in the write result.
        :paramtype record_namespace: str
        :keyword max_rows_per_file: Limit the written file's row count to be smaller than or equal to
         the specified count. Type: integer (or Expression with resultType integer).
        :paramtype max_rows_per_file: JSON
        :keyword file_name_prefix: Specifies the file name pattern
         :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
         based store without partitionOptions. Type: string (or Expression with resultType string).
        :paramtype file_name_prefix: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "AvroWriteSettings"
        self.record_name = record_name
        self.record_namespace = record_namespace
        self.max_rows_per_file = max_rows_per_file
        self.file_name_prefix = file_name_prefix


class AzureBatchLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Batch linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar account_name: The Azure Batch account name. Type: string (or Expression with resultType
     string). Required.
    :vartype account_name: JSON
    :ivar access_key: The Azure Batch account access key.
    :vartype access_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar batch_uri: The Azure Batch URI. Type: string (or Expression with resultType string).
     Required.
    :vartype batch_uri: JSON
    :ivar pool_name: The Azure Batch pool name. Type: string (or Expression with resultType
     string). Required.
    :vartype pool_name: JSON
    :ivar linked_service_name: The Azure Storage linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "account_name": {"required": True},
        "batch_uri": {"required": True},
        "pool_name": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "account_name": {"key": "typeProperties.accountName", "type": "object"},
        "access_key": {"key": "typeProperties.accessKey", "type": "SecretBase"},
        "batch_uri": {"key": "typeProperties.batchUri", "type": "object"},
        "pool_name": {"key": "typeProperties.poolName", "type": "object"},
        "linked_service_name": {"key": "typeProperties.linkedServiceName", "type": "LinkedServiceReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        account_name: JSON,
        batch_uri: JSON,
        pool_name: JSON,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        access_key: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword account_name: The Azure Batch account name. Type: string (or Expression with
         resultType string). Required.
        :paramtype account_name: JSON
        :keyword access_key: The Azure Batch account access key.
        :paramtype access_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword batch_uri: The Azure Batch URI. Type: string (or Expression with resultType string).
         Required.
        :paramtype batch_uri: JSON
        :keyword pool_name: The Azure Batch pool name. Type: string (or Expression with resultType
         string). Required.
        :paramtype pool_name: JSON
        :keyword linked_service_name: The Azure Storage linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureBatch"
        self.account_name = account_name
        self.access_key = access_key
        self.batch_uri = batch_uri
        self.pool_name = pool_name
        self.linked_service_name = linked_service_name
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureBlobDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure Blob storage.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar folder_path: The path of the Azure Blob storage. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar table_root_location: The root of blob path. Type: string (or Expression with resultType
     string).
    :vartype table_root_location: JSON
    :ivar file_name: The name of the Azure Blob. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar modified_datetime_start: The start of Azure Blob's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of Azure Blob's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar format: The format of the Azure Blob storage.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar compression: The data compression method used for the blob storage.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "object"},
        "table_root_location": {"key": "typeProperties.tableRootLocation", "type": "object"},
        "file_name": {"key": "typeProperties.fileName", "type": "object"},
        "modified_datetime_start": {"key": "typeProperties.modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "typeProperties.modifiedDatetimeEnd", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        folder_path: Optional[JSON] = None,
        table_root_location: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword folder_path: The path of the Azure Blob storage. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword table_root_location: The root of blob path. Type: string (or Expression with
         resultType string).
        :paramtype table_root_location: JSON
        :keyword file_name: The name of the Azure Blob. Type: string (or Expression with resultType
         string).
        :paramtype file_name: JSON
        :keyword modified_datetime_start: The start of Azure Blob's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of Azure Blob's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword format: The format of the Azure Blob storage.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword compression: The data compression method used for the blob storage.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureBlob"
        self.folder_path = folder_path
        self.table_root_location = table_root_location
        self.file_name = file_name
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.format = format
        self.compression = compression


class AzureBlobFSDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure Data Lake Storage Gen2 storage.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar folder_path: The path of the Azure Data Lake Storage Gen2 storage. Type: string (or
     Expression with resultType string).
    :vartype folder_path: JSON
    :ivar file_name: The name of the Azure Data Lake Storage Gen2. Type: string (or Expression with
     resultType string).
    :vartype file_name: JSON
    :ivar format: The format of the Azure Data Lake Storage Gen2 storage.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar compression: The data compression method used for the blob storage.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "object"},
        "file_name": {"key": "typeProperties.fileName", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword folder_path: The path of the Azure Data Lake Storage Gen2 storage. Type: string (or
         Expression with resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: The name of the Azure Data Lake Storage Gen2. Type: string (or Expression
         with resultType string).
        :paramtype file_name: JSON
        :keyword format: The format of the Azure Data Lake Storage Gen2 storage.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword compression: The data compression method used for the blob storage.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureBlobFSFile"
        self.folder_path = folder_path
        self.file_name = file_name
        self.format = format
        self.compression = compression


class AzureBlobFSLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Data Lake Storage Gen2 linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: Endpoint for the Azure Data Lake Storage Gen2 service. Type: string (or Expression
     with resultType string).
    :vartype url: JSON
    :ivar account_key: Account key for the Azure Data Lake Storage Gen2 service. Type: string (or
     Expression with resultType string).
    :vartype account_key: JSON
    :ivar service_principal_id: The ID of the application used to authenticate against the Azure
     Data Lake Storage Gen2 account. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The Key of the application used to authenticate against the Azure
     Data Lake Storage Gen2 account.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar sas_uri: SAS URI of the Azure Data Lake Storage Gen2 service. Type: string, SecureString
     or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "sas_uri": {"key": "typeProperties.sasUri", "type": "object"},
        "sas_token": {"key": "typeProperties.sasToken", "type": "SecretBase"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        url: Optional[JSON] = None,
        account_key: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.SecretBase"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: Endpoint for the Azure Data Lake Storage Gen2 service. Type: string (or
         Expression with resultType string).
        :paramtype url: JSON
        :keyword account_key: Account key for the Azure Data Lake Storage Gen2 service. Type: string
         (or Expression with resultType string).
        :paramtype account_key: JSON
        :keyword service_principal_id: The ID of the application used to authenticate against the Azure
         Data Lake Storage Gen2 account. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The Key of the application used to authenticate against the
         Azure Data Lake Storage Gen2 account.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword sas_uri: SAS URI of the Azure Data Lake Storage Gen2 service. Type: string,
         SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureBlobFS"
        self.url = url
        self.account_key = account_key
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.encrypted_credential = encrypted_credential
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.credential = credential


class AzureBlobFSLocation(DatasetLocation):
    """The location of azure blobFS dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar file_system: Specify the fileSystem of azure blobFS. Type: string (or Expression with
     resultType string).
    :vartype file_system: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
        "file_system": {"key": "fileSystem", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        file_system: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword file_system: Specify the fileSystem of azure blobFS. Type: string (or Expression with
         resultType string).
        :paramtype file_system: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "AzureBlobFSLocation"
        self.file_system = file_system


class AzureBlobFSReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Azure blobFS read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Azure blobFS wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Azure blobFS wildcardFileName. Type: string (or Expression with
     resultType string).
    :vartype wildcard_file_name: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Azure blobFS wildcardFolderPath. Type: string (or Expression
         with resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Azure blobFS wildcardFileName. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "AzureBlobFSReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class AzureBlobFSSink(CopySink):
    """A copy activity Azure Data Lake Storage Gen2 sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink. Type: string (or Expression with
     resultType string).
    :vartype copy_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink. Type: string (or Expression
         with resultType string).
        :paramtype copy_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureBlobFSSink"
        self.copy_behavior = copy_behavior


class AzureBlobFSSource(CopySource):
    """A copy activity Azure BlobFS source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar treat_empty_as_null: Treat empty as null. Type: boolean (or Expression with resultType
     boolean).
    :vartype treat_empty_as_null: JSON
    :ivar skip_header_line_count: Number of header lines to skip from each blob. Type: integer (or
     Expression with resultType integer).
    :vartype skip_header_line_count: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "treat_empty_as_null": {"key": "treatEmptyAsNull", "type": "object"},
        "skip_header_line_count": {"key": "skipHeaderLineCount", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        treat_empty_as_null: Optional[JSON] = None,
        skip_header_line_count: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword treat_empty_as_null: Treat empty as null. Type: boolean (or Expression with resultType
         boolean).
        :paramtype treat_empty_as_null: JSON
        :keyword skip_header_line_count: Number of header lines to skip from each blob. Type: integer
         (or Expression with resultType integer).
        :paramtype skip_header_line_count: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureBlobFSSource"
        self.treat_empty_as_null = treat_empty_as_null
        self.skip_header_line_count = skip_header_line_count
        self.recursive = recursive


class StoreWriteSettings(_serialization.Model):
    """Connector write settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AzureBlobFSWriteSettings, AzureBlobStorageWriteSettings, AzureDataLakeStoreWriteSettings,
    AzureFileStorageWriteSettings, FileServerWriteSettings, LakeHouseWriteSettings,
    SftpWriteSettings

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
    }

    _subtype_map = {
        "type": {
            "AzureBlobFSWriteSettings": "AzureBlobFSWriteSettings",
            "AzureBlobStorageWriteSettings": "AzureBlobStorageWriteSettings",
            "AzureDataLakeStoreWriteSettings": "AzureDataLakeStoreWriteSettings",
            "AzureFileStorageWriteSettings": "AzureFileStorageWriteSettings",
            "FileServerWriteSettings": "FileServerWriteSettings",
            "LakeHouseWriteSettings": "LakeHouseWriteSettings",
            "SftpWriteSettings": "SftpWriteSettings",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.max_concurrent_connections = max_concurrent_connections
        self.copy_behavior = copy_behavior
        self.metadata = metadata


class AzureBlobFSWriteSettings(StoreWriteSettings):
    """Azure blobFS write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    :ivar block_size_in_mb: Indicates the block size(MB) when writing data to blob. Type: integer
     (or Expression with resultType integer).
    :vartype block_size_in_mb: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
        "block_size_in_mb": {"key": "blockSizeInMB", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        block_size_in_mb: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        :keyword block_size_in_mb: Indicates the block size(MB) when writing data to blob. Type:
         integer (or Expression with resultType integer).
        :paramtype block_size_in_mb: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "AzureBlobFSWriteSettings"
        self.block_size_in_mb = block_size_in_mb


class AzureBlobStorageLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """The azure blob storage linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. It is mutually exclusive with sasUri,
     serviceEndpoint property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure Blob Storage resource. It is mutually exclusive with
     connectionString, serviceEndpoint property. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_endpoint: Blob service endpoint of the Azure Blob Storage resource. It is
     mutually exclusive with connectionString, sasUri property.
    :vartype service_endpoint: str
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Data Warehouse. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Data Warehouse.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar account_kind: Specify the kind of your storage account. Allowed values are: Storage
     (general purpose v1), StorageV2 (general purpose v2), BlobStorage, or BlockBlobStorage. Type:
     string (or Expression with resultType string).
    :vartype account_kind: str
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "Anonymous", "AccountKey", "SasUri", "ServicePrincipal", and "Msi".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureStorageAuthenticationType
    :ivar container_uri: Container uri of the Azure Blob Storage resource only support for
     anonymous access. Type: string (or Expression with resultType string).
    :vartype container_uri: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "typeProperties.sasUri", "type": "object"},
        "sas_token": {"key": "typeProperties.sasToken", "type": "AzureKeyVaultSecretReference"},
        "service_endpoint": {"key": "typeProperties.serviceEndpoint", "type": "str"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "account_kind": {"key": "typeProperties.accountKind", "type": "str"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "container_uri": {"key": "typeProperties.containerUri", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_endpoint: Optional[str] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        account_kind: Optional[str] = None,
        encrypted_credential: Optional[str] = None,
        credential: Optional["_models.CredentialReference"] = None,
        authentication_type: Optional[Union[str, "_models.AzureStorageAuthenticationType"]] = None,
        container_uri: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri,
         serviceEndpoint property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure Blob Storage resource. It is mutually exclusive with
         connectionString, serviceEndpoint property. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_endpoint: Blob service endpoint of the Azure Blob Storage resource. It is
         mutually exclusive with connectionString, sasUri property.
        :paramtype service_endpoint: str
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Data Warehouse. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Data Warehouse.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword account_kind: Specify the kind of your storage account. Allowed values are: Storage
         (general purpose v1), StorageV2 (general purpose v2), BlobStorage, or BlockBlobStorage. Type:
         string (or Expression with resultType string).
        :paramtype account_kind: str
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "Anonymous", "AccountKey", "SasUri", "ServicePrincipal", and "Msi".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureStorageAuthenticationType
        :keyword container_uri: Container uri of the Azure Blob Storage resource only support for
         anonymous access. Type: string (or Expression with resultType string).
        :paramtype container_uri: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureBlobStorage"
        self.connection_string = connection_string
        self.account_key = account_key
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.service_endpoint = service_endpoint
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.account_kind = account_kind
        self.encrypted_credential = encrypted_credential
        self.credential = credential
        self.authentication_type = authentication_type
        self.container_uri = container_uri


class AzureBlobStorageLocation(DatasetLocation):
    """The location of azure blob dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar container: Specify the container of azure blob. Type: string (or Expression with
     resultType string).
    :vartype container: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
        "container": {"key": "container", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        container: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword container: Specify the container of azure blob. Type: string (or Expression with
         resultType string).
        :paramtype container: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "AzureBlobStorageLocation"
        self.container = container


class AzureBlobStorageReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Azure blob read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Azure blob wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Azure blob wildcardFileName. Type: string (or Expression with
     resultType string).
    :vartype wildcard_file_name: JSON
    :ivar prefix: The prefix filter for the Azure Blob name. Type: string (or Expression with
     resultType string).
    :vartype prefix: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "prefix": {"key": "prefix", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        prefix: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Azure blob wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Azure blob wildcardFileName. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword prefix: The prefix filter for the Azure Blob name. Type: string (or Expression with
         resultType string).
        :paramtype prefix: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "AzureBlobStorageReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.prefix = prefix
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class AzureBlobStorageWriteSettings(StoreWriteSettings):
    """Azure blob write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    :ivar block_size_in_mb: Indicates the block size(MB) when writing data to blob. Type: integer
     (or Expression with resultType integer).
    :vartype block_size_in_mb: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
        "block_size_in_mb": {"key": "blockSizeInMB", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        block_size_in_mb: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        :keyword block_size_in_mb: Indicates the block size(MB) when writing data to blob. Type:
         integer (or Expression with resultType integer).
        :paramtype block_size_in_mb: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "AzureBlobStorageWriteSettings"
        self.block_size_in_mb = block_size_in_mb


class AzureDatabricksDeltaLakeDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Azure Databricks Delta Lake dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table: The name of delta table. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar database: The database name of delta table. Type: string (or Expression with resultType
     string).
    :vartype database: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table: Optional[JSON] = None,
        database: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table: The name of delta table. Type: string (or Expression with resultType string).
        :paramtype table: JSON
        :keyword database: The database name of delta table. Type: string (or Expression with
         resultType string).
        :paramtype database: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureDatabricksDeltaLakeDataset"
        self.table = table
        self.database = database


class ExportSettings(_serialization.Model):
    """Export command settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AzureDatabricksDeltaLakeExportCommand, SnowflakeExportCopyCommand

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The export setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "AzureDatabricksDeltaLakeExportCommand": "AzureDatabricksDeltaLakeExportCommand",
            "SnowflakeExportCopyCommand": "SnowflakeExportCopyCommand",
        }
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class AzureDatabricksDeltaLakeExportCommand(ExportSettings):
    """Azure Databricks Delta Lake export command settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The export setting type. Required.
    :vartype type: str
    :ivar date_format: Specify the date format for the csv in Azure Databricks Delta Lake Copy.
     Type: string (or Expression with resultType string).
    :vartype date_format: JSON
    :ivar timestamp_format: Specify the timestamp format for the csv in Azure Databricks Delta Lake
     Copy. Type: string (or Expression with resultType string).
    :vartype timestamp_format: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "date_format": {"key": "dateFormat", "type": "object"},
        "timestamp_format": {"key": "timestampFormat", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        date_format: Optional[JSON] = None,
        timestamp_format: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword date_format: Specify the date format for the csv in Azure Databricks Delta Lake Copy.
         Type: string (or Expression with resultType string).
        :paramtype date_format: JSON
        :keyword timestamp_format: Specify the timestamp format for the csv in Azure Databricks Delta
         Lake Copy. Type: string (or Expression with resultType string).
        :paramtype timestamp_format: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "AzureDatabricksDeltaLakeExportCommand"
        self.date_format = date_format
        self.timestamp_format = timestamp_format


class ImportSettings(_serialization.Model):
    """Import command settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AzureDatabricksDeltaLakeImportCommand, SnowflakeImportCopyCommand, TeradataImportCommand

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The import setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "AzureDatabricksDeltaLakeImportCommand": "AzureDatabricksDeltaLakeImportCommand",
            "SnowflakeImportCopyCommand": "SnowflakeImportCopyCommand",
            "TeradataImportCommand": "TeradataImportCommand",
        }
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class AzureDatabricksDeltaLakeImportCommand(ImportSettings):
    """Azure Databricks Delta Lake import command settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The import setting type. Required.
    :vartype type: str
    :ivar date_format: Specify the date format for csv in Azure Databricks Delta Lake Copy. Type:
     string (or Expression with resultType string).
    :vartype date_format: JSON
    :ivar timestamp_format: Specify the timestamp format for csv in Azure Databricks Delta Lake
     Copy. Type: string (or Expression with resultType string).
    :vartype timestamp_format: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "date_format": {"key": "dateFormat", "type": "object"},
        "timestamp_format": {"key": "timestampFormat", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        date_format: Optional[JSON] = None,
        timestamp_format: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword date_format: Specify the date format for csv in Azure Databricks Delta Lake Copy.
         Type: string (or Expression with resultType string).
        :paramtype date_format: JSON
        :keyword timestamp_format: Specify the timestamp format for csv in Azure Databricks Delta Lake
         Copy. Type: string (or Expression with resultType string).
        :paramtype timestamp_format: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "AzureDatabricksDeltaLakeImportCommand"
        self.date_format = date_format
        self.timestamp_format = timestamp_format


class AzureDatabricksDeltaLakeLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Databricks Delta Lake linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar domain: :code:`<REGION>`.azuredatabricks.net, domain name of your Databricks deployment.
     Type: string (or Expression with resultType string). Required.
    :vartype domain: JSON
    :ivar access_token: Access token for databricks REST API. Refer to
     https://docs.azuredatabricks.net/api/latest/authentication.html. Type: string, SecureString or
     AzureKeyVaultSecretReference. Required.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar cluster_id: The id of an existing interactive cluster that will be used for all runs of
     this job. Type: string (or Expression with resultType string).
    :vartype cluster_id: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "domain": {"required": True},
        "access_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "domain": {"key": "typeProperties.domain", "type": "object"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "cluster_id": {"key": "typeProperties.clusterId", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        domain: JSON,
        access_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        cluster_id: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword domain: :code:`<REGION>`.azuredatabricks.net, domain name of your Databricks
         deployment. Type: string (or Expression with resultType string). Required.
        :paramtype domain: JSON
        :keyword access_token: Access token for databricks REST API. Refer to
         https://docs.azuredatabricks.net/api/latest/authentication.html. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword cluster_id: The id of an existing interactive cluster that will be used for all runs
         of this job. Type: string (or Expression with resultType string).
        :paramtype cluster_id: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureDatabricksDeltaLake"
        self.domain = domain
        self.access_token = access_token
        self.cluster_id = cluster_id
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureDatabricksDeltaLakeSink(CopySink):
    """A copy activity Azure Databricks Delta Lake sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar import_settings: Azure Databricks Delta Lake import settings.
    :vartype import_settings: ~azure.synapse.artifacts.models.AzureDatabricksDeltaLakeImportCommand
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "import_settings": {"key": "importSettings", "type": "AzureDatabricksDeltaLakeImportCommand"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        import_settings: Optional["_models.AzureDatabricksDeltaLakeImportCommand"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword import_settings: Azure Databricks Delta Lake import settings.
        :paramtype import_settings:
         ~azure.synapse.artifacts.models.AzureDatabricksDeltaLakeImportCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDatabricksDeltaLakeSink"
        self.pre_copy_script = pre_copy_script
        self.import_settings = import_settings


class AzureDatabricksDeltaLakeSource(CopySource):
    """A copy activity Azure Databricks Delta Lake source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Azure Databricks Delta Lake Sql query. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    :ivar export_settings: Azure Databricks Delta Lake export settings.
    :vartype export_settings: ~azure.synapse.artifacts.models.AzureDatabricksDeltaLakeExportCommand
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "export_settings": {"key": "exportSettings", "type": "AzureDatabricksDeltaLakeExportCommand"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        export_settings: Optional["_models.AzureDatabricksDeltaLakeExportCommand"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Azure Databricks Delta Lake Sql query. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword export_settings: Azure Databricks Delta Lake export settings.
        :paramtype export_settings:
         ~azure.synapse.artifacts.models.AzureDatabricksDeltaLakeExportCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDatabricksDeltaLakeSource"
        self.query = query
        self.export_settings = export_settings


class AzureDatabricksLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Databricks linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar domain: :code:`<REGION>`.azuredatabricks.net, domain name of your Databricks deployment.
     Type: string (or Expression with resultType string). Required.
    :vartype domain: JSON
    :ivar access_token: Access token for databricks REST API. Refer to
     https://docs.azuredatabricks.net/api/latest/authentication.html. Type: string (or Expression
     with resultType string).
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar authentication: Required to specify MSI, if using Workspace resource id for databricks
     REST API. Type: string (or Expression with resultType string).
    :vartype authentication: JSON
    :ivar workspace_resource_id: Workspace resource id for databricks REST API. Type: string (or
     Expression with resultType string).
    :vartype workspace_resource_id: JSON
    :ivar existing_cluster_id: The id of an existing interactive cluster that will be used for all
     runs of this activity. Type: string (or Expression with resultType string).
    :vartype existing_cluster_id: JSON
    :ivar instance_pool_id: The id of an existing instance pool that will be used for all runs of
     this activity. Type: string (or Expression with resultType string).
    :vartype instance_pool_id: JSON
    :ivar new_cluster_version: If not using an existing interactive cluster, this specifies the
     Spark version of a new job cluster or instance pool nodes created for each run of this
     activity. Required if instancePoolId is specified. Type: string (or Expression with resultType
     string).
    :vartype new_cluster_version: JSON
    :ivar new_cluster_num_of_worker: If not using an existing interactive cluster, this specifies
     the number of worker nodes to use for the new job cluster or instance pool. For new job
     clusters, this a string-formatted Int32, like '1' means numOfWorker is 1 or '1:10' means
     auto-scale from 1 (min) to 10 (max). For instance pools, this is a string-formatted Int32, and
     can only specify a fixed number of worker nodes, such as '2'. Required if newClusterVersion is
     specified. Type: string (or Expression with resultType string).
    :vartype new_cluster_num_of_worker: JSON
    :ivar new_cluster_node_type: The node type of the new job cluster. This property is required if
     newClusterVersion is specified and instancePoolId is not specified. If instancePoolId is
     specified, this property is ignored. Type: string (or Expression with resultType string).
    :vartype new_cluster_node_type: JSON
    :ivar new_cluster_spark_conf: A set of optional, user-specified Spark configuration key-value
     pairs.
    :vartype new_cluster_spark_conf: dict[str, JSON]
    :ivar new_cluster_spark_env_vars: A set of optional, user-specified Spark environment variables
     key-value pairs.
    :vartype new_cluster_spark_env_vars: dict[str, JSON]
    :ivar new_cluster_custom_tags: Additional tags for cluster resources. This property is ignored
     in instance pool configurations.
    :vartype new_cluster_custom_tags: dict[str, JSON]
    :ivar new_cluster_log_destination: Specify a location to deliver Spark driver, worker, and
     event logs. Type: string (or Expression with resultType string).
    :vartype new_cluster_log_destination: JSON
    :ivar new_cluster_driver_node_type: The driver node type for the new job cluster. This property
     is ignored in instance pool configurations. Type: string (or Expression with resultType
     string).
    :vartype new_cluster_driver_node_type: JSON
    :ivar new_cluster_init_scripts: User-defined initialization scripts for the new cluster. Type:
     array of strings (or Expression with resultType array of strings).
    :vartype new_cluster_init_scripts: JSON
    :ivar new_cluster_enable_elastic_disk: Enable the elastic disk on the new cluster. This
     property is now ignored, and takes the default elastic disk behavior in Databricks (elastic
     disks are always enabled). Type: boolean (or Expression with resultType boolean).
    :vartype new_cluster_enable_elastic_disk: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar policy_id: The policy id for limiting the ability to configure clusters based on a user
     defined set of rules. Type: string (or Expression with resultType string).
    :vartype policy_id: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    :ivar data_security_mode: The data security mode for the Databricks Cluster. Type: string (or
     Expression with resultType string).
    :vartype data_security_mode: JSON
    """

    _validation = {
        "type": {"required": True},
        "domain": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "domain": {"key": "typeProperties.domain", "type": "object"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "authentication": {"key": "typeProperties.authentication", "type": "object"},
        "workspace_resource_id": {"key": "typeProperties.workspaceResourceId", "type": "object"},
        "existing_cluster_id": {"key": "typeProperties.existingClusterId", "type": "object"},
        "instance_pool_id": {"key": "typeProperties.instancePoolId", "type": "object"},
        "new_cluster_version": {"key": "typeProperties.newClusterVersion", "type": "object"},
        "new_cluster_num_of_worker": {"key": "typeProperties.newClusterNumOfWorker", "type": "object"},
        "new_cluster_node_type": {"key": "typeProperties.newClusterNodeType", "type": "object"},
        "new_cluster_spark_conf": {"key": "typeProperties.newClusterSparkConf", "type": "{object}"},
        "new_cluster_spark_env_vars": {"key": "typeProperties.newClusterSparkEnvVars", "type": "{object}"},
        "new_cluster_custom_tags": {"key": "typeProperties.newClusterCustomTags", "type": "{object}"},
        "new_cluster_log_destination": {"key": "typeProperties.newClusterLogDestination", "type": "object"},
        "new_cluster_driver_node_type": {"key": "typeProperties.newClusterDriverNodeType", "type": "object"},
        "new_cluster_init_scripts": {"key": "typeProperties.newClusterInitScripts", "type": "object"},
        "new_cluster_enable_elastic_disk": {"key": "typeProperties.newClusterEnableElasticDisk", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "policy_id": {"key": "typeProperties.policyId", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
        "data_security_mode": {"key": "typeProperties.dataSecurityMode", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        domain: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        access_token: Optional["_models.SecretBase"] = None,
        authentication: Optional[JSON] = None,
        workspace_resource_id: Optional[JSON] = None,
        existing_cluster_id: Optional[JSON] = None,
        instance_pool_id: Optional[JSON] = None,
        new_cluster_version: Optional[JSON] = None,
        new_cluster_num_of_worker: Optional[JSON] = None,
        new_cluster_node_type: Optional[JSON] = None,
        new_cluster_spark_conf: Optional[Dict[str, JSON]] = None,
        new_cluster_spark_env_vars: Optional[Dict[str, JSON]] = None,
        new_cluster_custom_tags: Optional[Dict[str, JSON]] = None,
        new_cluster_log_destination: Optional[JSON] = None,
        new_cluster_driver_node_type: Optional[JSON] = None,
        new_cluster_init_scripts: Optional[JSON] = None,
        new_cluster_enable_elastic_disk: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        policy_id: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        data_security_mode: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword domain: :code:`<REGION>`.azuredatabricks.net, domain name of your Databricks
         deployment. Type: string (or Expression with resultType string). Required.
        :paramtype domain: JSON
        :keyword access_token: Access token for databricks REST API. Refer to
         https://docs.azuredatabricks.net/api/latest/authentication.html. Type: string (or Expression
         with resultType string).
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword authentication: Required to specify MSI, if using Workspace resource id for databricks
         REST API. Type: string (or Expression with resultType string).
        :paramtype authentication: JSON
        :keyword workspace_resource_id: Workspace resource id for databricks REST API. Type: string (or
         Expression with resultType string).
        :paramtype workspace_resource_id: JSON
        :keyword existing_cluster_id: The id of an existing interactive cluster that will be used for
         all runs of this activity. Type: string (or Expression with resultType string).
        :paramtype existing_cluster_id: JSON
        :keyword instance_pool_id: The id of an existing instance pool that will be used for all runs
         of this activity. Type: string (or Expression with resultType string).
        :paramtype instance_pool_id: JSON
        :keyword new_cluster_version: If not using an existing interactive cluster, this specifies the
         Spark version of a new job cluster or instance pool nodes created for each run of this
         activity. Required if instancePoolId is specified. Type: string (or Expression with resultType
         string).
        :paramtype new_cluster_version: JSON
        :keyword new_cluster_num_of_worker: If not using an existing interactive cluster, this
         specifies the number of worker nodes to use for the new job cluster or instance pool. For new
         job clusters, this a string-formatted Int32, like '1' means numOfWorker is 1 or '1:10' means
         auto-scale from 1 (min) to 10 (max). For instance pools, this is a string-formatted Int32, and
         can only specify a fixed number of worker nodes, such as '2'. Required if newClusterVersion is
         specified. Type: string (or Expression with resultType string).
        :paramtype new_cluster_num_of_worker: JSON
        :keyword new_cluster_node_type: The node type of the new job cluster. This property is required
         if newClusterVersion is specified and instancePoolId is not specified. If instancePoolId is
         specified, this property is ignored. Type: string (or Expression with resultType string).
        :paramtype new_cluster_node_type: JSON
        :keyword new_cluster_spark_conf: A set of optional, user-specified Spark configuration
         key-value pairs.
        :paramtype new_cluster_spark_conf: dict[str, JSON]
        :keyword new_cluster_spark_env_vars: A set of optional, user-specified Spark environment
         variables key-value pairs.
        :paramtype new_cluster_spark_env_vars: dict[str, JSON]
        :keyword new_cluster_custom_tags: Additional tags for cluster resources. This property is
         ignored in instance pool configurations.
        :paramtype new_cluster_custom_tags: dict[str, JSON]
        :keyword new_cluster_log_destination: Specify a location to deliver Spark driver, worker, and
         event logs. Type: string (or Expression with resultType string).
        :paramtype new_cluster_log_destination: JSON
        :keyword new_cluster_driver_node_type: The driver node type for the new job cluster. This
         property is ignored in instance pool configurations. Type: string (or Expression with
         resultType string).
        :paramtype new_cluster_driver_node_type: JSON
        :keyword new_cluster_init_scripts: User-defined initialization scripts for the new cluster.
         Type: array of strings (or Expression with resultType array of strings).
        :paramtype new_cluster_init_scripts: JSON
        :keyword new_cluster_enable_elastic_disk: Enable the elastic disk on the new cluster. This
         property is now ignored, and takes the default elastic disk behavior in Databricks (elastic
         disks are always enabled). Type: boolean (or Expression with resultType boolean).
        :paramtype new_cluster_enable_elastic_disk: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword policy_id: The policy id for limiting the ability to configure clusters based on a
         user defined set of rules. Type: string (or Expression with resultType string).
        :paramtype policy_id: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        :keyword data_security_mode: The data security mode for the Databricks Cluster. Type: string
         (or Expression with resultType string).
        :paramtype data_security_mode: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureDatabricks"
        self.domain = domain
        self.access_token = access_token
        self.authentication = authentication
        self.workspace_resource_id = workspace_resource_id
        self.existing_cluster_id = existing_cluster_id
        self.instance_pool_id = instance_pool_id
        self.new_cluster_version = new_cluster_version
        self.new_cluster_num_of_worker = new_cluster_num_of_worker
        self.new_cluster_node_type = new_cluster_node_type
        self.new_cluster_spark_conf = new_cluster_spark_conf
        self.new_cluster_spark_env_vars = new_cluster_spark_env_vars
        self.new_cluster_custom_tags = new_cluster_custom_tags
        self.new_cluster_log_destination = new_cluster_log_destination
        self.new_cluster_driver_node_type = new_cluster_driver_node_type
        self.new_cluster_init_scripts = new_cluster_init_scripts
        self.new_cluster_enable_elastic_disk = new_cluster_enable_elastic_disk
        self.encrypted_credential = encrypted_credential
        self.policy_id = policy_id
        self.credential = credential
        self.data_security_mode = data_security_mode


class ExecutionActivity(Activity):
    """Base class for all execution activities.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AzureDataExplorerCommandActivity, AzureFunctionActivity, AzureMLBatchExecutionActivity,
    AzureMLExecutePipelineActivity, AzureMLUpdateResourceActivity, CopyActivity, CustomActivity,
    DataLakeAnalyticsUSQLActivity, DatabricksNotebookActivity, DatabricksSparkJarActivity,
    DatabricksSparkPythonActivity, DeleteActivity, ExecuteDataFlowActivity,
    ExecuteSSISPackageActivity, GetMetadataActivity, HDInsightHiveActivity,
    HDInsightMapReduceActivity, HDInsightPigActivity, HDInsightSparkActivity,
    HDInsightStreamingActivity, LookupActivity, ScriptActivity, SynapseSparkJobDefinitionActivity,
    SqlServerStoredProcedureActivity, SynapseNotebookActivity, WebActivity

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
    }

    _subtype_map = {
        "type": {
            "AzureDataExplorerCommand": "AzureDataExplorerCommandActivity",
            "AzureFunctionActivity": "AzureFunctionActivity",
            "AzureMLBatchExecution": "AzureMLBatchExecutionActivity",
            "AzureMLExecutePipeline": "AzureMLExecutePipelineActivity",
            "AzureMLUpdateResource": "AzureMLUpdateResourceActivity",
            "Copy": "CopyActivity",
            "Custom": "CustomActivity",
            "DataLakeAnalyticsU-SQL": "DataLakeAnalyticsUSQLActivity",
            "DatabricksNotebook": "DatabricksNotebookActivity",
            "DatabricksSparkJar": "DatabricksSparkJarActivity",
            "DatabricksSparkPython": "DatabricksSparkPythonActivity",
            "Delete": "DeleteActivity",
            "ExecuteDataFlow": "ExecuteDataFlowActivity",
            "ExecuteSSISPackage": "ExecuteSSISPackageActivity",
            "GetMetadata": "GetMetadataActivity",
            "HDInsightHive": "HDInsightHiveActivity",
            "HDInsightMapReduce": "HDInsightMapReduceActivity",
            "HDInsightPig": "HDInsightPigActivity",
            "HDInsightSpark": "HDInsightSparkActivity",
            "HDInsightStreaming": "HDInsightStreamingActivity",
            "Lookup": "LookupActivity",
            "Script": "ScriptActivity",
            "SparkJob": "SynapseSparkJobDefinitionActivity",
            "SqlServerStoredProcedure": "SqlServerStoredProcedureActivity",
            "SynapseNotebook": "SynapseNotebookActivity",
            "WebActivity": "WebActivity",
        }
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Execution"
        self.linked_service_name = linked_service_name
        self.policy = policy


class AzureDataExplorerCommandActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Azure Data Explorer command activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar command: A control command, according to the Azure Data Explorer command syntax. Type:
     string (or Expression with resultType string). Required.
    :vartype command: JSON
    :ivar command_timeout: Control command timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..).
    :vartype command_timeout: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "command": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "command": {"key": "typeProperties.command", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        command: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        command_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword command: A control command, according to the Azure Data Explorer command syntax. Type:
         string (or Expression with resultType string). Required.
        :paramtype command: JSON
        :keyword command_timeout: Control command timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..).
        :paramtype command_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "AzureDataExplorerCommand"
        self.command = command
        self.command_timeout = command_timeout


class AzureDataExplorerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Data Explorer (Kusto) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of Azure Data Explorer (the engine's endpoint). URL will be in the
     format https://:code:`<clusterName>`.:code:`<regionName>`.kusto.windows.net. Type: string (or
     Expression with resultType string). Required.
    :vartype endpoint: JSON
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     Data Explorer. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Kusto.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar database: Database name for connection. Type: string (or Expression with resultType
     string). Required.
    :vartype database: JSON
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of Azure Data Explorer (the engine's endpoint). URL will be in
         the format https://:code:`<clusterName>`.:code:`<regionName>`.kusto.windows.net. Type: string
         (or Expression with resultType string). Required.
        :paramtype endpoint: JSON
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure Data Explorer. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Kusto.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword database: Database name for connection. Type: string (or Expression with resultType
         string). Required.
        :paramtype database: JSON
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureDataExplorer"
        self.endpoint = endpoint
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.database = database
        self.tenant = tenant
        self.credential = credential


class AzureDataExplorerSink(CopySink):
    """A copy activity Azure Data Explorer sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar ingestion_mapping_name: A name of a pre-created csv mapping that was defined on the
     target Kusto table. Type: string.
    :vartype ingestion_mapping_name: JSON
    :ivar ingestion_mapping_as_json: An explicit column mapping description provided in a json
     format. Type: string.
    :vartype ingestion_mapping_as_json: JSON
    :ivar flush_immediately: If set to true, any aggregation will be skipped. Default is false.
     Type: boolean.
    :vartype flush_immediately: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "ingestion_mapping_name": {"key": "ingestionMappingName", "type": "object"},
        "ingestion_mapping_as_json": {"key": "ingestionMappingAsJson", "type": "object"},
        "flush_immediately": {"key": "flushImmediately", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        ingestion_mapping_name: Optional[JSON] = None,
        ingestion_mapping_as_json: Optional[JSON] = None,
        flush_immediately: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword ingestion_mapping_name: A name of a pre-created csv mapping that was defined on the
         target Kusto table. Type: string.
        :paramtype ingestion_mapping_name: JSON
        :keyword ingestion_mapping_as_json: An explicit column mapping description provided in a json
         format. Type: string.
        :paramtype ingestion_mapping_as_json: JSON
        :keyword flush_immediately: If set to true, any aggregation will be skipped. Default is false.
         Type: boolean.
        :paramtype flush_immediately: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDataExplorerSink"
        self.ingestion_mapping_name = ingestion_mapping_name
        self.ingestion_mapping_as_json = ingestion_mapping_as_json
        self.flush_immediately = flush_immediately


class AzureDataExplorerSource(CopySource):
    """A copy activity Azure Data Explorer (Kusto) source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Database query. Should be a Kusto Query Language (KQL) query. Type: string (or
     Expression with resultType string). Required.
    :vartype query: JSON
    :ivar no_truncation: The name of the Boolean option that controls whether truncation is applied
     to result-sets that go beyond a certain row-count limit.
    :vartype no_truncation: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
        "query": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "no_truncation": {"key": "noTruncation", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        query: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        no_truncation: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Database query. Should be a Kusto Query Language (KQL) query. Type: string (or
         Expression with resultType string). Required.
        :paramtype query: JSON
        :keyword no_truncation: The name of the Boolean option that controls whether truncation is
         applied to result-sets that go beyond a certain row-count limit.
        :paramtype no_truncation: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))..
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDataExplorerSource"
        self.query = query
        self.no_truncation = no_truncation
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class AzureDataExplorerTableDataset(Dataset):
    """The Azure Data Explorer (Kusto) dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table: The table name of the Azure Data Explorer database. Type: string (or Expression
     with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table: The table name of the Azure Data Explorer database. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureDataExplorerTable"
        self.table = table


class AzureDataLakeAnalyticsLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Data Lake Analytics linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar account_name: The Azure Data Lake Analytics account name. Type: string (or Expression
     with resultType string). Required.
    :vartype account_name: JSON
    :ivar service_principal_id: The ID of the application used to authenticate against the Azure
     Data Lake Analytics account. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The Key of the application used to authenticate against the Azure
     Data Lake Analytics account.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string). Required.
    :vartype tenant: JSON
    :ivar subscription_id: Data Lake Analytics account subscription ID (if different from Data
     Factory account). Type: string (or Expression with resultType string).
    :vartype subscription_id: JSON
    :ivar resource_group_name: Data Lake Analytics account resource group name (if different from
     Data Factory account). Type: string (or Expression with resultType string).
    :vartype resource_group_name: JSON
    :ivar data_lake_analytics_uri: Azure Data Lake Analytics URI Type: string (or Expression with
     resultType string).
    :vartype data_lake_analytics_uri: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "account_name": {"required": True},
        "tenant": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "account_name": {"key": "typeProperties.accountName", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "subscription_id": {"key": "typeProperties.subscriptionId", "type": "object"},
        "resource_group_name": {"key": "typeProperties.resourceGroupName", "type": "object"},
        "data_lake_analytics_uri": {"key": "typeProperties.dataLakeAnalyticsUri", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        account_name: JSON,
        tenant: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        subscription_id: Optional[JSON] = None,
        resource_group_name: Optional[JSON] = None,
        data_lake_analytics_uri: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword account_name: The Azure Data Lake Analytics account name. Type: string (or Expression
         with resultType string). Required.
        :paramtype account_name: JSON
        :keyword service_principal_id: The ID of the application used to authenticate against the Azure
         Data Lake Analytics account. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The Key of the application used to authenticate against the
         Azure Data Lake Analytics account.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string). Required.
        :paramtype tenant: JSON
        :keyword subscription_id: Data Lake Analytics account subscription ID (if different from Data
         Factory account). Type: string (or Expression with resultType string).
        :paramtype subscription_id: JSON
        :keyword resource_group_name: Data Lake Analytics account resource group name (if different
         from Data Factory account). Type: string (or Expression with resultType string).
        :paramtype resource_group_name: JSON
        :keyword data_lake_analytics_uri: Azure Data Lake Analytics URI Type: string (or Expression
         with resultType string).
        :paramtype data_lake_analytics_uri: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureDataLakeAnalytics"
        self.account_name = account_name
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.subscription_id = subscription_id
        self.resource_group_name = resource_group_name
        self.data_lake_analytics_uri = data_lake_analytics_uri
        self.encrypted_credential = encrypted_credential


class AzureDataLakeStoreDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Azure Data Lake Store dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar folder_path: Path to the folder in the Azure Data Lake Store. Type: string (or Expression
     with resultType string).
    :vartype folder_path: JSON
    :ivar file_name: The name of the file in the Azure Data Lake Store. Type: string (or Expression
     with resultType string).
    :vartype file_name: JSON
    :ivar format: The format of the Data Lake Store.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar compression: The data compression method used for the item(s) in the Azure Data Lake
     Store.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "object"},
        "file_name": {"key": "typeProperties.fileName", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword folder_path: Path to the folder in the Azure Data Lake Store. Type: string (or
         Expression with resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: The name of the file in the Azure Data Lake Store. Type: string (or
         Expression with resultType string).
        :paramtype file_name: JSON
        :keyword format: The format of the Data Lake Store.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword compression: The data compression method used for the item(s) in the Azure Data Lake
         Store.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureDataLakeStoreFile"
        self.folder_path = folder_path
        self.file_name = file_name
        self.format = format
        self.compression = compression


class AzureDataLakeStoreLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Data Lake Store linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar data_lake_store_uri: Data Lake Store service URI. Type: string (or Expression with
     resultType string). Required.
    :vartype data_lake_store_uri: JSON
    :ivar service_principal_id: The ID of the application used to authenticate against the Azure
     Data Lake Store account. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The Key of the application used to authenticate against the Azure
     Data Lake Store account.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar account_name: Data Lake Store account name. Type: string (or Expression with resultType
     string).
    :vartype account_name: JSON
    :ivar subscription_id: Data Lake Store account subscription ID (if different from Data Factory
     account). Type: string (or Expression with resultType string).
    :vartype subscription_id: JSON
    :ivar resource_group_name: Data Lake Store account resource group name (if different from Data
     Factory account). Type: string (or Expression with resultType string).
    :vartype resource_group_name: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "data_lake_store_uri": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "data_lake_store_uri": {"key": "typeProperties.dataLakeStoreUri", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "account_name": {"key": "typeProperties.accountName", "type": "object"},
        "subscription_id": {"key": "typeProperties.subscriptionId", "type": "object"},
        "resource_group_name": {"key": "typeProperties.resourceGroupName", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        data_lake_store_uri: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        account_name: Optional[JSON] = None,
        subscription_id: Optional[JSON] = None,
        resource_group_name: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword data_lake_store_uri: Data Lake Store service URI. Type: string (or Expression with
         resultType string). Required.
        :paramtype data_lake_store_uri: JSON
        :keyword service_principal_id: The ID of the application used to authenticate against the Azure
         Data Lake Store account. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The Key of the application used to authenticate against the
         Azure Data Lake Store account.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword account_name: Data Lake Store account name. Type: string (or Expression with
         resultType string).
        :paramtype account_name: JSON
        :keyword subscription_id: Data Lake Store account subscription ID (if different from Data
         Factory account). Type: string (or Expression with resultType string).
        :paramtype subscription_id: JSON
        :keyword resource_group_name: Data Lake Store account resource group name (if different from
         Data Factory account). Type: string (or Expression with resultType string).
        :paramtype resource_group_name: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureDataLakeStore"
        self.data_lake_store_uri = data_lake_store_uri
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.account_name = account_name
        self.subscription_id = subscription_id
        self.resource_group_name = resource_group_name
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureDataLakeStoreLocation(DatasetLocation):
    """The location of azure data lake store dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "AzureDataLakeStoreLocation"


class AzureDataLakeStoreReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Azure data lake store read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: ADLS wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: ADLS wildcardFileName. Type: string (or Expression with resultType
     string).
    :vartype wildcard_file_name: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar list_after: Lists files after the value (exclusive) based on file/folder names’
     lexicographical order. Applies under the folderPath in data set, and filter files/sub-folders
     under the folderPath. Type: string (or Expression with resultType string).
    :vartype list_after: JSON
    :ivar list_before: Lists files before the value (inclusive) based on file/folder names’
     lexicographical order. Applies under the folderPath in data set, and filter files/sub-folders
     under the folderPath. Type: string (or Expression with resultType string).
    :vartype list_before: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "list_after": {"key": "listAfter", "type": "object"},
        "list_before": {"key": "listBefore", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        list_after: Optional[JSON] = None,
        list_before: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: ADLS wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: ADLS wildcardFileName. Type: string (or Expression with resultType
         string).
        :paramtype wildcard_file_name: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword list_after: Lists files after the value (exclusive) based on file/folder names’
         lexicographical order. Applies under the folderPath in data set, and filter files/sub-folders
         under the folderPath. Type: string (or Expression with resultType string).
        :paramtype list_after: JSON
        :keyword list_before: Lists files before the value (inclusive) based on file/folder names’
         lexicographical order. Applies under the folderPath in data set, and filter files/sub-folders
         under the folderPath. Type: string (or Expression with resultType string).
        :paramtype list_before: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "AzureDataLakeStoreReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.file_list_path = file_list_path
        self.list_after = list_after
        self.list_before = list_before
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class AzureDataLakeStoreSink(CopySink):
    """A copy activity Azure Data Lake Store sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink. Type: string (or Expression with
     resultType string).
    :vartype copy_behavior: JSON
    :ivar enable_adls_single_file_parallel: Single File Parallel.
    :vartype enable_adls_single_file_parallel: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "enable_adls_single_file_parallel": {"key": "enableAdlsSingleFileParallel", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        enable_adls_single_file_parallel: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink. Type: string (or Expression
         with resultType string).
        :paramtype copy_behavior: JSON
        :keyword enable_adls_single_file_parallel: Single File Parallel.
        :paramtype enable_adls_single_file_parallel: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDataLakeStoreSink"
        self.copy_behavior = copy_behavior
        self.enable_adls_single_file_parallel = enable_adls_single_file_parallel


class AzureDataLakeStoreSource(CopySource):
    """A copy activity Azure Data Lake source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureDataLakeStoreSource"
        self.recursive = recursive


class AzureDataLakeStoreWriteSettings(StoreWriteSettings):
    """Azure data lake store write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    :ivar expiry_date_time: Specifies the expiry time of the written files. The time is applied to
     the UTC time zone in the format of "2018-12-01T05:00:00Z". Default value is NULL. Type: string
     (or Expression with resultType string).
    :vartype expiry_date_time: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
        "expiry_date_time": {"key": "expiryDateTime", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        expiry_date_time: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        :keyword expiry_date_time: Specifies the expiry time of the written files. The time is applied
         to the UTC time zone in the format of "2018-12-01T05:00:00Z". Default value is NULL. Type:
         string (or Expression with resultType string).
        :paramtype expiry_date_time: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "AzureDataLakeStoreWriteSettings"
        self.expiry_date_time = expiry_date_time


class Resource(_serialization.Model):
    """Common fields that are returned in the response for all Azure Resource Manager resources.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.id = None
        self.name = None
        self.type = None


class AzureEntityResource(Resource):
    """The resource model definition for an Azure Resource Manager resource with an etag.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.etag = None


class AzureFileStorageLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure File Storage linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: Host name of the server. Type: string (or Expression with resultType string).
     Required.
    :vartype host: JSON
    :ivar user_id: User ID to logon the server. Type: string (or Expression with resultType
     string).
    :vartype user_id: JSON
    :ivar password: Password to logon the server.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar connection_string: The connection string. It is mutually exclusive with sasUri property.
     Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure File resource. It is mutually exclusive with
     connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar file_share: The azure file share name. It is required when auth with accountKey/sasToken.
     Type: string (or Expression with resultType string).
    :vartype file_share: JSON
    :ivar snapshot: The azure file share snapshot version. Type: string (or Expression with
     resultType string).
    :vartype snapshot: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar service_endpoint: File service endpoint of the Azure File Storage resource. It is
     mutually exclusive with connectionString, sasUri property.
    :vartype service_endpoint: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "user_id": {"key": "typeProperties.userId", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "typeProperties.sasUri", "type": "object"},
        "sas_token": {"key": "typeProperties.sasToken", "type": "AzureKeyVaultSecretReference"},
        "file_share": {"key": "typeProperties.fileShare", "type": "object"},
        "snapshot": {"key": "typeProperties.snapshot", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "service_endpoint": {"key": "typeProperties.serviceEndpoint", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user_id: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        file_share: Optional[JSON] = None,
        snapshot: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        service_endpoint: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: Host name of the server. Type: string (or Expression with resultType string).
         Required.
        :paramtype host: JSON
        :keyword user_id: User ID to logon the server. Type: string (or Expression with resultType
         string).
        :paramtype user_id: JSON
        :keyword password: Password to logon the server.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri
         property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure File resource. It is mutually exclusive with
         connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword file_share: The azure file share name. It is required when auth with
         accountKey/sasToken. Type: string (or Expression with resultType string).
        :paramtype file_share: JSON
        :keyword snapshot: The azure file share snapshot version. Type: string (or Expression with
         resultType string).
        :paramtype snapshot: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword service_endpoint: File service endpoint of the Azure File Storage resource. It is
         mutually exclusive with connectionString, sasUri property.
        :paramtype service_endpoint: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureFileStorage"
        self.host = host
        self.user_id = user_id
        self.password = password
        self.connection_string = connection_string
        self.account_key = account_key
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.file_share = file_share
        self.snapshot = snapshot
        self.encrypted_credential = encrypted_credential
        self.service_endpoint = service_endpoint
        self.credential = credential


class AzureFileStorageLocation(DatasetLocation):
    """The location of file server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "AzureFileStorageLocation"


class AzureFileStorageReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Azure File Storage read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Azure File Storage wildcardFolderPath. Type: string (or Expression
     with resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Azure File Storage wildcardFileName. Type: string (or Expression with
     resultType string).
    :vartype wildcard_file_name: JSON
    :ivar prefix: The prefix filter for the Azure File name starting from root path. Type: string
     (or Expression with resultType string).
    :vartype prefix: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "prefix": {"key": "prefix", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        prefix: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Azure File Storage wildcardFolderPath. Type: string (or
         Expression with resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Azure File Storage wildcardFileName. Type: string (or Expression
         with resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword prefix: The prefix filter for the Azure File name starting from root path. Type:
         string (or Expression with resultType string).
        :paramtype prefix: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "AzureFileStorageReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.prefix = prefix
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class AzureFileStorageWriteSettings(StoreWriteSettings):
    """Azure File Storage write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "AzureFileStorageWriteSettings"


class AzureFunctionActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Azure Function activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar method: Rest API method for target endpoint. Required. Known values are: "GET", "POST",
     "PUT", "DELETE", "OPTIONS", "HEAD", and "TRACE".
    :vartype method: str or ~azure.synapse.artifacts.models.AzureFunctionActivityMethod
    :ivar function_name: Name of the Function that the Azure Function Activity will call. Type:
     string (or Expression with resultType string). Required.
    :vartype function_name: JSON
    :ivar headers: Represents the headers that will be sent to the request. For example, to set the
     language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
     "application/json" }. Type: string (or Expression with resultType string).
    :vartype headers: JSON
    :ivar body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
     method, not allowed for GET method Type: string (or Expression with resultType string).
    :vartype body: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "method": {"required": True},
        "function_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "method": {"key": "typeProperties.method", "type": "str"},
        "function_name": {"key": "typeProperties.functionName", "type": "object"},
        "headers": {"key": "typeProperties.headers", "type": "object"},
        "body": {"key": "typeProperties.body", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        method: Union[str, "_models.AzureFunctionActivityMethod"],
        function_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        headers: Optional[JSON] = None,
        body: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword method: Rest API method for target endpoint. Required. Known values are: "GET",
         "POST", "PUT", "DELETE", "OPTIONS", "HEAD", and "TRACE".
        :paramtype method: str or ~azure.synapse.artifacts.models.AzureFunctionActivityMethod
        :keyword function_name: Name of the Function that the Azure Function Activity will call. Type:
         string (or Expression with resultType string). Required.
        :paramtype function_name: JSON
        :keyword headers: Represents the headers that will be sent to the request. For example, to set
         the language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
         "application/json" }. Type: string (or Expression with resultType string).
        :paramtype headers: JSON
        :keyword body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
         method, not allowed for GET method Type: string (or Expression with resultType string).
        :paramtype body: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "AzureFunctionActivity"
        self.method = method
        self.function_name = function_name
        self.headers = headers
        self.body = body


class AzureFunctionLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure Function linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar function_app_url: The endpoint of the Azure Function App. URL will be in the format
     https://:code:`<accountName>`.azurewebsites.net. Required.
    :vartype function_app_url: JSON
    :ivar function_key: Function or Host key for Azure Function App.
    :vartype function_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    :ivar resource_id: Allowed token audiences for azure function.
    :vartype resource_id: JSON
    :ivar authentication: Type of authentication (Required to specify MSI) used to connect to
     AzureFunction. Type: string (or Expression with resultType string).
    :vartype authentication: JSON
    """

    _validation = {
        "type": {"required": True},
        "function_app_url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "function_app_url": {"key": "typeProperties.functionAppUrl", "type": "object"},
        "function_key": {"key": "typeProperties.functionKey", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
        "resource_id": {"key": "typeProperties.resourceId", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "object"},
    }

    def __init__(
        self,
        *,
        function_app_url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        function_key: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        resource_id: Optional[JSON] = None,
        authentication: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword function_app_url: The endpoint of the Azure Function App. URL will be in the format
         https://:code:`<accountName>`.azurewebsites.net. Required.
        :paramtype function_app_url: JSON
        :keyword function_key: Function or Host key for Azure Function App.
        :paramtype function_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        :keyword resource_id: Allowed token audiences for azure function.
        :paramtype resource_id: JSON
        :keyword authentication: Type of authentication (Required to specify MSI) used to connect to
         AzureFunction. Type: string (or Expression with resultType string).
        :paramtype authentication: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureFunction"
        self.function_app_url = function_app_url
        self.function_key = function_key
        self.encrypted_credential = encrypted_credential
        self.credential = credential
        self.resource_id = resource_id
        self.authentication = authentication


class AzureKeyVaultLinkedService(LinkedService):
    """Azure Key Vault linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar base_url: The base URL of the Azure Key Vault. e.g. https://myakv.vault.azure.net Type:
     string (or Expression with resultType string). Required.
    :vartype base_url: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "base_url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "base_url": {"key": "typeProperties.baseUrl", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        base_url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword base_url: The base URL of the Azure Key Vault. e.g. https://myakv.vault.azure.net
         Type: string (or Expression with resultType string). Required.
        :paramtype base_url: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureKeyVault"
        self.base_url = base_url
        self.credential = credential


class SecretBase(_serialization.Model):
    """The base definition of a secret type.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    AzureKeyVaultSecretReference, SecureString

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of the secret. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {"type": {"AzureKeyVaultSecret": "AzureKeyVaultSecretReference", "SecureString": "SecureString"}}

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.type: Optional[str] = None


class AzureKeyVaultSecretReference(SecretBase):
    """Azure Key Vault secret reference.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of the secret. Required.
    :vartype type: str
    :ivar store: The Azure Key Vault linked service reference. Required.
    :vartype store: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar secret_name: The name of the secret in Azure Key Vault. Type: string (or Expression with
     resultType string). Required.
    :vartype secret_name: JSON
    :ivar secret_version: The version of the secret in Azure Key Vault. The default value is the
     latest version of the secret. Type: string (or Expression with resultType string).
    :vartype secret_version: JSON
    """

    _validation = {
        "type": {"required": True},
        "store": {"required": True},
        "secret_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "store": {"key": "store", "type": "LinkedServiceReference"},
        "secret_name": {"key": "secretName", "type": "object"},
        "secret_version": {"key": "secretVersion", "type": "object"},
    }

    def __init__(
        self,
        *,
        store: "_models.LinkedServiceReference",
        secret_name: JSON,
        secret_version: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword store: The Azure Key Vault linked service reference. Required.
        :paramtype store: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword secret_name: The name of the secret in Azure Key Vault. Type: string (or Expression
         with resultType string). Required.
        :paramtype secret_name: JSON
        :keyword secret_version: The version of the secret in Azure Key Vault. The default value is the
         latest version of the secret. Type: string (or Expression with resultType string).
        :paramtype secret_version: JSON
        """
        super().__init__(**kwargs)
        self.type: str = "AzureKeyVaultSecret"
        self.store = store
        self.secret_name = secret_name
        self.secret_version = secret_version


class AzureMariaDBLinkedService(LinkedService):
    """Azure Database for MariaDB linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar pwd: The Azure key vault secret reference of password in connection string.
    :vartype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "pwd": {"key": "typeProperties.pwd", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        pwd: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword pwd: The Azure key vault secret reference of password in connection string.
        :paramtype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureMariaDB"
        self.connection_string = connection_string
        self.pwd = pwd
        self.encrypted_credential = encrypted_credential


class AzureMariaDBSource(TabularSource):
    """A copy activity Azure MariaDB source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AzureMariaDBSource"
        self.query = query


class AzureMariaDBTableDataset(Dataset):
    """Azure Database for MariaDB dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureMariaDBTable"
        self.table_name = table_name


class AzureMLBatchExecutionActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Azure ML Batch Execution activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar global_parameters: Key,Value pairs to be passed to the Azure ML Batch Execution Service
     endpoint. Keys must match the names of web service parameters defined in the published Azure ML
     web service. Values will be passed in the GlobalParameters property of the Azure ML batch
     execution request.
    :vartype global_parameters: dict[str, JSON]
    :ivar web_service_outputs: Key,Value pairs, mapping the names of Azure ML endpoint's Web
     Service Outputs to AzureMLWebServiceFile objects specifying the output Blob locations. This
     information will be passed in the WebServiceOutputs property of the Azure ML batch execution
     request.
    :vartype web_service_outputs: dict[str, ~azure.synapse.artifacts.models.AzureMLWebServiceFile]
    :ivar web_service_inputs: Key,Value pairs, mapping the names of Azure ML endpoint's Web Service
     Inputs to AzureMLWebServiceFile objects specifying the input Blob locations.. This information
     will be passed in the WebServiceInputs property of the Azure ML batch execution request.
    :vartype web_service_inputs: dict[str, ~azure.synapse.artifacts.models.AzureMLWebServiceFile]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "global_parameters": {"key": "typeProperties.globalParameters", "type": "{object}"},
        "web_service_outputs": {"key": "typeProperties.webServiceOutputs", "type": "{AzureMLWebServiceFile}"},
        "web_service_inputs": {"key": "typeProperties.webServiceInputs", "type": "{AzureMLWebServiceFile}"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        global_parameters: Optional[Dict[str, JSON]] = None,
        web_service_outputs: Optional[Dict[str, "_models.AzureMLWebServiceFile"]] = None,
        web_service_inputs: Optional[Dict[str, "_models.AzureMLWebServiceFile"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword global_parameters: Key,Value pairs to be passed to the Azure ML Batch Execution
         Service endpoint. Keys must match the names of web service parameters defined in the published
         Azure ML web service. Values will be passed in the GlobalParameters property of the Azure ML
         batch execution request.
        :paramtype global_parameters: dict[str, JSON]
        :keyword web_service_outputs: Key,Value pairs, mapping the names of Azure ML endpoint's Web
         Service Outputs to AzureMLWebServiceFile objects specifying the output Blob locations. This
         information will be passed in the WebServiceOutputs property of the Azure ML batch execution
         request.
        :paramtype web_service_outputs: dict[str,
         ~azure.synapse.artifacts.models.AzureMLWebServiceFile]
        :keyword web_service_inputs: Key,Value pairs, mapping the names of Azure ML endpoint's Web
         Service Inputs to AzureMLWebServiceFile objects specifying the input Blob locations.. This
         information will be passed in the WebServiceInputs property of the Azure ML batch execution
         request.
        :paramtype web_service_inputs: dict[str, ~azure.synapse.artifacts.models.AzureMLWebServiceFile]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "AzureMLBatchExecution"
        self.global_parameters = global_parameters
        self.web_service_outputs = web_service_outputs
        self.web_service_inputs = web_service_inputs


class AzureMLExecutePipelineActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Azure ML Execute Pipeline activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar ml_pipeline_id: ID of the published Azure ML pipeline. Type: string (or Expression with
     resultType string). Required.
    :vartype ml_pipeline_id: JSON
    :ivar experiment_name: Run history experiment name of the pipeline run. This information will
     be passed in the ExperimentName property of the published pipeline execution request. Type:
     string (or Expression with resultType string).
    :vartype experiment_name: JSON
    :ivar ml_pipeline_parameters: Key,Value pairs to be passed to the published Azure ML pipeline
     endpoint. Keys must match the names of pipeline parameters defined in the published pipeline.
     Values will be passed in the ParameterAssignments property of the published pipeline execution
     request. Type: object with key value pairs (or Expression with resultType object).
    :vartype ml_pipeline_parameters: JSON
    :ivar ml_parent_run_id: The parent Azure ML Service pipeline run id. This information will be
     passed in the ParentRunId property of the published pipeline execution request. Type: string
     (or Expression with resultType string).
    :vartype ml_parent_run_id: JSON
    :ivar continue_on_step_failure: Whether to continue execution of other steps in the PipelineRun
     if a step fails. This information will be passed in the continueOnStepFailure property of the
     published pipeline execution request. Type: boolean (or Expression with resultType boolean).
    :vartype continue_on_step_failure: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "ml_pipeline_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "ml_pipeline_id": {"key": "typeProperties.mlPipelineId", "type": "object"},
        "experiment_name": {"key": "typeProperties.experimentName", "type": "object"},
        "ml_pipeline_parameters": {"key": "typeProperties.mlPipelineParameters", "type": "object"},
        "ml_parent_run_id": {"key": "typeProperties.mlParentRunId", "type": "object"},
        "continue_on_step_failure": {"key": "typeProperties.continueOnStepFailure", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        ml_pipeline_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        experiment_name: Optional[JSON] = None,
        ml_pipeline_parameters: Optional[JSON] = None,
        ml_parent_run_id: Optional[JSON] = None,
        continue_on_step_failure: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword ml_pipeline_id: ID of the published Azure ML pipeline. Type: string (or Expression
         with resultType string). Required.
        :paramtype ml_pipeline_id: JSON
        :keyword experiment_name: Run history experiment name of the pipeline run. This information
         will be passed in the ExperimentName property of the published pipeline execution request.
         Type: string (or Expression with resultType string).
        :paramtype experiment_name: JSON
        :keyword ml_pipeline_parameters: Key,Value pairs to be passed to the published Azure ML
         pipeline endpoint. Keys must match the names of pipeline parameters defined in the published
         pipeline. Values will be passed in the ParameterAssignments property of the published pipeline
         execution request. Type: object with key value pairs (or Expression with resultType object).
        :paramtype ml_pipeline_parameters: JSON
        :keyword ml_parent_run_id: The parent Azure ML Service pipeline run id. This information will
         be passed in the ParentRunId property of the published pipeline execution request. Type: string
         (or Expression with resultType string).
        :paramtype ml_parent_run_id: JSON
        :keyword continue_on_step_failure: Whether to continue execution of other steps in the
         PipelineRun if a step fails. This information will be passed in the continueOnStepFailure
         property of the published pipeline execution request. Type: boolean (or Expression with
         resultType boolean).
        :paramtype continue_on_step_failure: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "AzureMLExecutePipeline"
        self.ml_pipeline_id = ml_pipeline_id
        self.experiment_name = experiment_name
        self.ml_pipeline_parameters = ml_pipeline_parameters
        self.ml_parent_run_id = ml_parent_run_id
        self.continue_on_step_failure = continue_on_step_failure


class AzureMLLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure ML Studio Web Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar ml_endpoint: The Batch Execution REST URL for an Azure ML Studio Web Service endpoint.
     Type: string (or Expression with resultType string). Required.
    :vartype ml_endpoint: JSON
    :ivar api_key: The API key for accessing the Azure ML model endpoint. Required.
    :vartype api_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar update_resource_endpoint: The Update Resource REST URL for an Azure ML Studio Web Service
     endpoint. Type: string (or Expression with resultType string).
    :vartype update_resource_endpoint: JSON
    :ivar service_principal_id: The ID of the service principal used to authenticate against the
     ARM-based updateResourceEndpoint of an Azure ML Studio web service. Type: string (or Expression
     with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against the
     ARM-based updateResourceEndpoint of an Azure ML Studio web service.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar authentication: Type of authentication (Required to specify MSI) used to connect to
     AzureML. Type: string (or Expression with resultType string).
    :vartype authentication: JSON
    """

    _validation = {
        "type": {"required": True},
        "ml_endpoint": {"required": True},
        "api_key": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "ml_endpoint": {"key": "typeProperties.mlEndpoint", "type": "object"},
        "api_key": {"key": "typeProperties.apiKey", "type": "SecretBase"},
        "update_resource_endpoint": {"key": "typeProperties.updateResourceEndpoint", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "object"},
    }

    def __init__(
        self,
        *,
        ml_endpoint: JSON,
        api_key: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        update_resource_endpoint: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        authentication: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword ml_endpoint: The Batch Execution REST URL for an Azure ML Studio Web Service endpoint.
         Type: string (or Expression with resultType string). Required.
        :paramtype ml_endpoint: JSON
        :keyword api_key: The API key for accessing the Azure ML model endpoint. Required.
        :paramtype api_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword update_resource_endpoint: The Update Resource REST URL for an Azure ML Studio Web
         Service endpoint. Type: string (or Expression with resultType string).
        :paramtype update_resource_endpoint: JSON
        :keyword service_principal_id: The ID of the service principal used to authenticate against the
         ARM-based updateResourceEndpoint of an Azure ML Studio web service. Type: string (or Expression
         with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         the ARM-based updateResourceEndpoint of an Azure ML Studio web service.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword authentication: Type of authentication (Required to specify MSI) used to connect to
         AzureML. Type: string (or Expression with resultType string).
        :paramtype authentication: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureML"
        self.ml_endpoint = ml_endpoint
        self.api_key = api_key
        self.update_resource_endpoint = update_resource_endpoint
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.encrypted_credential = encrypted_credential
        self.authentication = authentication


class AzureMLServiceLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure ML Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar subscription_id: Azure ML Service workspace subscription ID. Type: string (or Expression
     with resultType string). Required.
    :vartype subscription_id: JSON
    :ivar resource_group_name: Azure ML Service workspace resource group name. Type: string (or
     Expression with resultType string). Required.
    :vartype resource_group_name: JSON
    :ivar ml_workspace_name: Azure ML Service workspace name. Type: string (or Expression with
     resultType string). Required.
    :vartype ml_workspace_name: JSON
    :ivar authentication: Type of authentication (Required to specify MSI) used to connect to
     AzureML. Type: string (or Expression with resultType string).
    :vartype authentication: JSON
    :ivar service_principal_id: The ID of the service principal used to authenticate against the
     endpoint of a published Azure ML Service pipeline. Type: string (or Expression with resultType
     string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against the
     endpoint of a published Azure ML Service pipeline.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "subscription_id": {"required": True},
        "resource_group_name": {"required": True},
        "ml_workspace_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "subscription_id": {"key": "typeProperties.subscriptionId", "type": "object"},
        "resource_group_name": {"key": "typeProperties.resourceGroupName", "type": "object"},
        "ml_workspace_name": {"key": "typeProperties.mlWorkspaceName", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        subscription_id: JSON,
        resource_group_name: JSON,
        ml_workspace_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword subscription_id: Azure ML Service workspace subscription ID. Type: string (or
         Expression with resultType string). Required.
        :paramtype subscription_id: JSON
        :keyword resource_group_name: Azure ML Service workspace resource group name. Type: string (or
         Expression with resultType string). Required.
        :paramtype resource_group_name: JSON
        :keyword ml_workspace_name: Azure ML Service workspace name. Type: string (or Expression with
         resultType string). Required.
        :paramtype ml_workspace_name: JSON
        :keyword authentication: Type of authentication (Required to specify MSI) used to connect to
         AzureML. Type: string (or Expression with resultType string).
        :paramtype authentication: JSON
        :keyword service_principal_id: The ID of the service principal used to authenticate against the
         endpoint of a published Azure ML Service pipeline. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         the endpoint of a published Azure ML Service pipeline.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureMLService"
        self.subscription_id = subscription_id
        self.resource_group_name = resource_group_name
        self.ml_workspace_name = ml_workspace_name
        self.authentication = authentication
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.encrypted_credential = encrypted_credential


class AzureMLUpdateResourceActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Azure ML Update Resource management activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar trained_model_name: Name of the Trained Model module in the Web Service experiment to be
     updated. Type: string (or Expression with resultType string). Required.
    :vartype trained_model_name: JSON
    :ivar trained_model_linked_service_name: Name of Azure Storage linked service holding the
     .ilearner file that will be uploaded by the update operation. Required.
    :vartype trained_model_linked_service_name:
     ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar trained_model_file_path: The relative file path in trainedModelLinkedService to represent
     the .ilearner file that will be uploaded by the update operation.  Type: string (or Expression
     with resultType string). Required.
    :vartype trained_model_file_path: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "trained_model_name": {"required": True},
        "trained_model_linked_service_name": {"required": True},
        "trained_model_file_path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "trained_model_name": {"key": "typeProperties.trainedModelName", "type": "object"},
        "trained_model_linked_service_name": {
            "key": "typeProperties.trainedModelLinkedServiceName",
            "type": "LinkedServiceReference",
        },
        "trained_model_file_path": {"key": "typeProperties.trainedModelFilePath", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        trained_model_name: JSON,
        trained_model_linked_service_name: "_models.LinkedServiceReference",
        trained_model_file_path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword trained_model_name: Name of the Trained Model module in the Web Service experiment to
         be updated. Type: string (or Expression with resultType string). Required.
        :paramtype trained_model_name: JSON
        :keyword trained_model_linked_service_name: Name of Azure Storage linked service holding the
         .ilearner file that will be uploaded by the update operation. Required.
        :paramtype trained_model_linked_service_name:
         ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword trained_model_file_path: The relative file path in trainedModelLinkedService to
         represent the .ilearner file that will be uploaded by the update operation.  Type: string (or
         Expression with resultType string). Required.
        :paramtype trained_model_file_path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "AzureMLUpdateResource"
        self.trained_model_name = trained_model_name
        self.trained_model_linked_service_name = trained_model_linked_service_name
        self.trained_model_file_path = trained_model_file_path


class AzureMLWebServiceFile(_serialization.Model):
    """Azure ML WebService Input/Output file.

    All required parameters must be populated in order to send to Azure.

    :ivar file_path: The relative file path, including container name, in the Azure Blob Storage
     specified by the LinkedService. Type: string (or Expression with resultType string). Required.
    :vartype file_path: JSON
    :ivar linked_service_name: Reference to an Azure Storage LinkedService, where Azure ML
     WebService Input/Output file located. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    """

    _validation = {
        "file_path": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "file_path": {"key": "filePath", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
    }

    def __init__(
        self, *, file_path: JSON, linked_service_name: "_models.LinkedServiceReference", **kwargs: Any
    ) -> None:
        """
        :keyword file_path: The relative file path, including container name, in the Azure Blob Storage
         specified by the LinkedService. Type: string (or Expression with resultType string). Required.
        :paramtype file_path: JSON
        :keyword linked_service_name: Reference to an Azure Storage LinkedService, where Azure ML
         WebService Input/Output file located. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        """
        super().__init__(**kwargs)
        self.file_path = file_path
        self.linked_service_name = linked_service_name


class AzureMySqlLinkedService(LinkedService):
    """Azure MySQL database linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Required.
    :vartype connection_string: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype connection_string: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureMySql"
        self.connection_string = connection_string
        self.password = password
        self.encrypted_credential = encrypted_credential


class AzureMySqlSink(CopySink):
    """A copy activity Azure MySql sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: A query to execute before starting the copy. Type: string (or Expression
     with resultType string).
    :vartype pre_copy_script: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: A query to execute before starting the copy. Type: string (or
         Expression with resultType string).
        :paramtype pre_copy_script: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureMySqlSink"
        self.pre_copy_script = pre_copy_script


class AzureMySqlSource(TabularSource):
    """A copy activity Azure MySQL source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AzureMySqlSource"
        self.query = query


class AzureMySqlTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure MySQL database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The Azure MySQL database table name. Type: string (or Expression with
     resultType string).
    :vartype table_name: JSON
    :ivar table: The name of Azure MySQL database table. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The Azure MySQL database table name. Type: string (or Expression with
         resultType string).
        :paramtype table_name: JSON
        :keyword table: The name of Azure MySQL database table. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureMySqlTable"
        self.table_name = table_name
        self.table = table


class AzurePostgreSqlLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure PostgreSQL linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. Type: string.
    :vartype server: JSON
    :ivar port: The port for the connection. Type: integer.
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string.
    :vartype username: JSON
    :ivar database: Database name for connection. Type: string.
    :vartype database: JSON
    :ivar ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
     require, 4: verify-ca, 5: verify-full. Type: integer.
    :vartype ssl_mode: JSON
    :ivar timeout: The time to wait (in seconds) while trying to establish a connection before
     terminating the attempt and generating an error. Type: integer.
    :vartype timeout: JSON
    :ivar command_timeout: The time to wait (in seconds) while trying to execute a command before
     terminating the attempt and generating an error. Set to zero for infinity. Type: integer.
    :vartype command_timeout: JSON
    :ivar trust_server_certificate: Whether to trust the server certificate without validating it.
     Type: boolean.
    :vartype trust_server_certificate: JSON
    :ivar read_buffer_size: Determines the size of the internal buffer uses when reading.
     Increasing may improve performance if transferring large values from the database. Type:
     integer.
    :vartype read_buffer_size: JSON
    :ivar timezone: Gets or sets the session timezone. Type: string.
    :vartype timezone: JSON
    :ivar encoding: Gets or sets the .NET encoding that will be used to encode/decode PostgreSQL
     string data. Type: string.
    :vartype encoding: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     Database for PostgreSQL Flexible server. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure Database for PostgreSQL Flexible server.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_embedded_cert: Specify the base64 encoded certificate of your
     application registered in Azure Active Directory. Type: string (or Expression with resultType
     string).
    :vartype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert_password: Specify the password of your certificate if
     your certificate has a password and you are using AadServicePrincipal authentication. Type:
     string (or Expression with resultType string).
    :vartype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "timeout": {"key": "typeProperties.timeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "read_buffer_size": {"key": "typeProperties.readBufferSize", "type": "object"},
        "timezone": {"key": "typeProperties.timezone", "type": "object"},
        "encoding": {"key": "typeProperties.encoding", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_embedded_cert": {"key": "typeProperties.servicePrincipalEmbeddedCert", "type": "SecretBase"},
        "service_principal_embedded_cert_password": {
            "key": "typeProperties.servicePrincipalEmbeddedCertPassword",
            "type": "SecretBase",
        },
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        database: Optional[JSON] = None,
        ssl_mode: Optional[JSON] = None,
        timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        read_buffer_size: Optional[JSON] = None,
        timezone: Optional[JSON] = None,
        encoding: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_embedded_cert: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert_password: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. Type: string.
        :paramtype server: JSON
        :keyword port: The port for the connection. Type: integer.
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string.
        :paramtype username: JSON
        :keyword database: Database name for connection. Type: string.
        :paramtype database: JSON
        :keyword ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
         require, 4: verify-ca, 5: verify-full. Type: integer.
        :paramtype ssl_mode: JSON
        :keyword timeout: The time to wait (in seconds) while trying to establish a connection before
         terminating the attempt and generating an error. Type: integer.
        :paramtype timeout: JSON
        :keyword command_timeout: The time to wait (in seconds) while trying to execute a command
         before terminating the attempt and generating an error. Set to zero for infinity. Type:
         integer.
        :paramtype command_timeout: JSON
        :keyword trust_server_certificate: Whether to trust the server certificate without validating
         it. Type: boolean.
        :paramtype trust_server_certificate: JSON
        :keyword read_buffer_size: Determines the size of the internal buffer uses when reading.
         Increasing may improve performance if transferring large values from the database. Type:
         integer.
        :paramtype read_buffer_size: JSON
        :keyword timezone: Gets or sets the session timezone. Type: string.
        :paramtype timezone: JSON
        :keyword encoding: Gets or sets the .NET encoding that will be used to encode/decode PostgreSQL
         string data. Type: string.
        :paramtype encoding: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure Database for PostgreSQL Flexible server. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure Database for PostgreSQL Flexible server.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_embedded_cert: Specify the base64 encoded certificate of your
         application registered in Azure Active Directory. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert_password: Specify the password of your certificate if
         your certificate has a password and you are using AadServicePrincipal authentication. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzurePostgreSql"
        self.connection_string = connection_string
        self.server = server
        self.port = port
        self.username = username
        self.database = database
        self.ssl_mode = ssl_mode
        self.timeout = timeout
        self.command_timeout = command_timeout
        self.trust_server_certificate = trust_server_certificate
        self.read_buffer_size = read_buffer_size
        self.timezone = timezone
        self.encoding = encoding
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_embedded_cert = service_principal_embedded_cert
        self.service_principal_embedded_cert_password = service_principal_embedded_cert_password
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.credential = credential


class AzurePostgreSqlSink(CopySink):
    """A copy activity Azure Database for PostgreSQL sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: A query to execute before starting the copy. Type: string (or Expression
     with resultType string).
    :vartype pre_copy_script: JSON
    :ivar write_method: The write behavior for the operation. Default is Bulk Insert. Known values
     are: "BulkInsert", "CopyCommand", and "Upsert".
    :vartype write_method: str or ~azure.synapse.artifacts.models.AzurePostgreSqlWriteMethodEnum
    :ivar upsert_settings: Azure Database for PostgreSQL upsert option settings.
    :vartype upsert_settings: ~azure.synapse.artifacts.models.AzurePostgreSqlSinkUpsertSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "write_method": {"key": "writeMethod", "type": "str"},
        "upsert_settings": {"key": "upsertSettings", "type": "AzurePostgreSqlSinkUpsertSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        write_method: Optional[Union[str, "_models.AzurePostgreSqlWriteMethodEnum"]] = None,
        upsert_settings: Optional["_models.AzurePostgreSqlSinkUpsertSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: A query to execute before starting the copy. Type: string (or
         Expression with resultType string).
        :paramtype pre_copy_script: JSON
        :keyword write_method: The write behavior for the operation. Default is Bulk Insert. Known
         values are: "BulkInsert", "CopyCommand", and "Upsert".
        :paramtype write_method: str or ~azure.synapse.artifacts.models.AzurePostgreSqlWriteMethodEnum
        :keyword upsert_settings: Azure Database for PostgreSQL upsert option settings.
        :paramtype upsert_settings: ~azure.synapse.artifacts.models.AzurePostgreSqlSinkUpsertSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzurePostgreSqlSink"
        self.pre_copy_script = pre_copy_script
        self.write_method = write_method
        self.upsert_settings = upsert_settings


class AzurePostgreSqlSinkUpsertSettings(_serialization.Model):
    """Azure Database for PostgreSQL upsert option settings.

    :ivar keys: Key column names for unique row identification. Type: array of strings (or
     Expression with resultType array of strings).
    :vartype keys: JSON
    """

    _attribute_map = {
        "keys": {"key": "keys", "type": "object"},
    }

    def __init__(self, *, keys: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword keys: Key column names for unique row identification. Type: array of strings (or
         Expression with resultType array of strings).
        :paramtype keys: JSON
        """
        super().__init__(**kwargs)
        self.keys = keys


class AzurePostgreSqlSource(TabularSource):
    """A copy activity Azure Database for PostgreSQL source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AzurePostgreSqlSource"
        self.query = query


class AzurePostgreSqlTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Azure PostgreSQL dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name of the Azure PostgreSQL database which includes both schema
     and table. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    :ivar table: The table name of the Azure PostgreSQL database. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Azure PostgreSQL database. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name of the Azure PostgreSQL database which includes both schema
         and table. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        :keyword table: The table name of the Azure PostgreSQL database. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Azure PostgreSQL database. Type:
         string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzurePostgreSqlTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class AzureQueueSink(CopySink):
    """A copy activity Azure Queue sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureQueueSink"


class AzureSearchIndexDataset(Dataset):
    """The Azure Search Index.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar index_name: The name of the Azure Search Index. Type: string (or Expression with
     resultType string). Required.
    :vartype index_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "index_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "index_name": {"key": "typeProperties.indexName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        index_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword index_name: The name of the Azure Search Index. Type: string (or Expression with
         resultType string). Required.
        :paramtype index_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureSearchIndex"
        self.index_name = index_name


class AzureSearchIndexSink(CopySink):
    """A copy activity Azure Search Index sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: Specify the write behavior when upserting documents into Azure Search
     Index. Known values are: "Merge" and "Upload".
    :vartype write_behavior: str or
     ~azure.synapse.artifacts.models.AzureSearchIndexWriteBehaviorType
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.AzureSearchIndexWriteBehaviorType"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: Specify the write behavior when upserting documents into Azure Search
         Index. Known values are: "Merge" and "Upload".
        :paramtype write_behavior: str or
         ~azure.synapse.artifacts.models.AzureSearchIndexWriteBehaviorType
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureSearchIndexSink"
        self.write_behavior = write_behavior


class AzureSearchLinkedService(LinkedService):
    """Linked service for Windows Azure Search Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: URL for Azure Search service. Type: string (or Expression with resultType string).
     Required.
    :vartype url: JSON
    :ivar key: Admin Key for Azure Search service.
    :vartype key: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "key": {"key": "typeProperties.key", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        key: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: URL for Azure Search service. Type: string (or Expression with resultType
         string). Required.
        :paramtype url: JSON
        :keyword key: Admin Key for Azure Search service.
        :paramtype key: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureSearch"
        self.url = url
        self.key = key
        self.encrypted_credential = encrypted_credential


class AzureSqlDatabaseLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Microsoft Azure SQL Database linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlDatabaseAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Database. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Database.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "encrypt": {"key": "typeProperties.encrypt", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "typeProperties.hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "typeProperties.applicationIntent", "type": "object"},
        "connect_timeout": {"key": "typeProperties.connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "typeProperties.connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "typeProperties.connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "typeProperties.loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "integrated_security": {"key": "typeProperties.integratedSecurity", "type": "object"},
        "failover_partner": {"key": "typeProperties.failoverPartner", "type": "object"},
        "max_pool_size": {"key": "typeProperties.maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "typeProperties.minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "typeProperties.multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "typeProperties.multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "typeProperties.packetSize", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "always_encrypted_settings": {
            "key": "typeProperties.alwaysEncryptedSettings",
            "type": "SqlAlwaysEncryptedProperties",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlDatabaseAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlDatabaseAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Database. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Database.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureSqlDatabase"
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.always_encrypted_settings = always_encrypted_settings
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlDatabaseLinkedServiceTypeProperties(
    SqlServerBaseLinkedServiceTypeProperties
):  # pylint: disable=too-many-instance-attributes
    """Azure SQL Database linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlDatabaseAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Database. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Database.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
        "connection_string": {"key": "connectionString", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "tenant", "type": "object"},
        "azure_cloud_type": {"key": "azureCloudType", "type": "object"},
        "always_encrypted_settings": {"key": "alwaysEncryptedSettings", "type": "SqlAlwaysEncryptedProperties"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "object"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlDatabaseAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlDatabaseAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Database. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Database.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            server=server,
            database=database,
            encrypt=encrypt,
            trust_server_certificate=trust_server_certificate,
            host_name_in_certificate=host_name_in_certificate,
            application_intent=application_intent,
            connect_timeout=connect_timeout,
            connect_retry_count=connect_retry_count,
            connect_retry_interval=connect_retry_interval,
            load_balance_timeout=load_balance_timeout,
            command_timeout=command_timeout,
            integrated_security=integrated_security,
            failover_partner=failover_partner,
            max_pool_size=max_pool_size,
            min_pool_size=min_pool_size,
            multiple_active_result_sets=multiple_active_result_sets,
            multi_subnet_failover=multi_subnet_failover,
            packet_size=packet_size,
            pooling=pooling,
            **kwargs
        )
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.always_encrypted_settings = always_encrypted_settings
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlDWLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure SQL Data Warehouse linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlDWAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Data Warehouse. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Data Warehouse.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "encrypt": {"key": "typeProperties.encrypt", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "typeProperties.hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "typeProperties.applicationIntent", "type": "object"},
        "connect_timeout": {"key": "typeProperties.connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "typeProperties.connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "typeProperties.connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "typeProperties.loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "integrated_security": {"key": "typeProperties.integratedSecurity", "type": "object"},
        "failover_partner": {"key": "typeProperties.failoverPartner", "type": "object"},
        "max_pool_size": {"key": "typeProperties.maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "typeProperties.minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "typeProperties.multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "typeProperties.multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "typeProperties.packetSize", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlDWAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlDWAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Data Warehouse. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Data Warehouse.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureSqlDW"
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlDWLinkedServiceTypeProperties(
    SqlServerBaseLinkedServiceTypeProperties
):  # pylint: disable=too-many-instance-attributes
    """Azure SQL Data Warehouse linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlDWAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Data Warehouse. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Data Warehouse.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
        "connection_string": {"key": "connectionString", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "tenant", "type": "object"},
        "azure_cloud_type": {"key": "azureCloudType", "type": "object"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "object"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlDWAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlDWAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Data Warehouse. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Data Warehouse.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            server=server,
            database=database,
            encrypt=encrypt,
            trust_server_certificate=trust_server_certificate,
            host_name_in_certificate=host_name_in_certificate,
            application_intent=application_intent,
            connect_timeout=connect_timeout,
            connect_retry_count=connect_retry_count,
            connect_retry_interval=connect_retry_interval,
            load_balance_timeout=load_balance_timeout,
            command_timeout=command_timeout,
            integrated_security=integrated_security,
            failover_partner=failover_partner,
            max_pool_size=max_pool_size,
            min_pool_size=min_pool_size,
            multiple_active_result_sets=multiple_active_result_sets,
            multi_subnet_failover=multi_subnet_failover,
            packet_size=packet_size,
            pooling=pooling,
            **kwargs
        )
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlDWTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure SQL Data Warehouse dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The schema name of the Azure SQL Data Warehouse. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Azure SQL Data Warehouse. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The schema name of the Azure SQL Data Warehouse. Type:
         string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Azure SQL Data Warehouse. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureSqlDWTable"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class AzureSqlMILinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Azure SQL Managed Instance linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlMIAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Managed Instance. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Managed Instance.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "encrypt": {"key": "typeProperties.encrypt", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "typeProperties.hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "typeProperties.applicationIntent", "type": "object"},
        "connect_timeout": {"key": "typeProperties.connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "typeProperties.connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "typeProperties.connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "typeProperties.loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "integrated_security": {"key": "typeProperties.integratedSecurity", "type": "object"},
        "failover_partner": {"key": "typeProperties.failoverPartner", "type": "object"},
        "max_pool_size": {"key": "typeProperties.maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "typeProperties.minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "typeProperties.multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "typeProperties.multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "typeProperties.packetSize", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "always_encrypted_settings": {
            "key": "typeProperties.alwaysEncryptedSettings",
            "type": "SqlAlwaysEncryptedProperties",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlMIAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlMIAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Managed Instance. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Managed Instance.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureSqlMI"
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.always_encrypted_settings = always_encrypted_settings
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlMILinkedServiceTypeProperties(
    SqlServerBaseLinkedServiceTypeProperties
):  # pylint: disable=too-many-instance-attributes
    """Azure SQL Managed Instance linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.AzureSqlMIAuthenticationType
    :ivar user_name: The user name to be used when connecting to server. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar service_principal_id: The ID of the service principal used to authenticate against Azure
     SQL Managed Instance. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure SQL Managed Instance.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
        "connection_string": {"key": "connectionString", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "AzureKeyVaultSecretReference"},
        "service_principal_id": {"key": "servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "servicePrincipalCredential", "type": "SecretBase"},
        "tenant": {"key": "tenant", "type": "object"},
        "azure_cloud_type": {"key": "azureCloudType", "type": "object"},
        "always_encrypted_settings": {"key": "alwaysEncryptedSettings", "type": "SqlAlwaysEncryptedProperties"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "object"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.AzureSqlMIAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.AzureSqlMIAuthenticationType
        :keyword user_name: The user name to be used when connecting to server. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword service_principal_id: The ID of the service principal used to authenticate against
         Azure SQL Managed Instance. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure SQL Managed Instance.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            server=server,
            database=database,
            encrypt=encrypt,
            trust_server_certificate=trust_server_certificate,
            host_name_in_certificate=host_name_in_certificate,
            application_intent=application_intent,
            connect_timeout=connect_timeout,
            connect_retry_count=connect_retry_count,
            connect_retry_interval=connect_retry_interval,
            load_balance_timeout=load_balance_timeout,
            command_timeout=command_timeout,
            integrated_security=integrated_security,
            failover_partner=failover_partner,
            max_pool_size=max_pool_size,
            min_pool_size=min_pool_size,
            multiple_active_result_sets=multiple_active_result_sets,
            multi_subnet_failover=multi_subnet_failover,
            packet_size=packet_size,
            pooling=pooling,
            **kwargs
        )
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.always_encrypted_settings = always_encrypted_settings
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class AzureSqlMITableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure SQL Managed Instance dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The schema name of the Azure SQL Managed Instance. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Azure SQL Managed Instance dataset. Type: string (or
     Expression with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The schema name of the Azure SQL Managed Instance.
         Type: string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Azure SQL Managed Instance dataset. Type: string (or
         Expression with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureSqlMITable"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class AzureSqlSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure SQL sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
     Expression with resultType string).
    :vartype sql_writer_stored_procedure_name: JSON
    :ivar sql_writer_table_type: SQL writer table type. Type: string (or Expression with resultType
     string).
    :vartype sql_writer_table_type: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar stored_procedure_parameters: SQL stored procedure parameters.
    :vartype stored_procedure_parameters: JSON
    :ivar stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
     table type. Type: string (or Expression with resultType string).
    :vartype stored_procedure_table_type_parameter_name: JSON
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "sql_writer_stored_procedure_name": {"key": "sqlWriterStoredProcedureName", "type": "object"},
        "sql_writer_table_type": {"key": "sqlWriterTableType", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "stored_procedure_table_type_parameter_name": {
            "key": "storedProcedureTableTypeParameterName",
            "type": "object",
        },
        "table_option": {"key": "tableOption", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        sql_writer_stored_procedure_name: Optional[JSON] = None,
        sql_writer_table_type: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        stored_procedure_table_type_parameter_name: Optional[JSON] = None,
        table_option: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
         Expression with resultType string).
        :paramtype sql_writer_stored_procedure_name: JSON
        :keyword sql_writer_table_type: SQL writer table type. Type: string (or Expression with
         resultType string).
        :paramtype sql_writer_table_type: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword stored_procedure_parameters: SQL stored procedure parameters.
        :paramtype stored_procedure_parameters: JSON
        :keyword stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
         table type. Type: string (or Expression with resultType string).
        :paramtype stored_procedure_table_type_parameter_name: JSON
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureSqlSink"
        self.sql_writer_stored_procedure_name = sql_writer_stored_procedure_name
        self.sql_writer_table_type = sql_writer_table_type
        self.pre_copy_script = pre_copy_script
        self.stored_procedure_parameters = stored_procedure_parameters
        self.stored_procedure_table_type_parameter_name = stored_procedure_table_type_parameter_name
        self.table_option = table_option


class AzureSqlSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure SQL source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL reader query. Type: string (or Expression with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database source.
     This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression with
     resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar produce_additional_types: Which additional types to produce.
    :vartype produce_additional_types: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "produce_additional_types": {"key": "produceAdditionalTypes", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        produce_additional_types: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL reader query. Type: string (or Expression with resultType
         string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database
         source. This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression
         with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword produce_additional_types: Which additional types to produce.
        :paramtype produce_additional_types: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AzureSqlSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.produce_additional_types = produce_additional_types
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class AzureSqlTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Azure SQL Server database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The schema name of the Azure SQL database. Type: string
     (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Azure SQL database. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The schema name of the Azure SQL database. Type: string
         (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Azure SQL database. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureSqlTable"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class AzureStorageLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """The storage account linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. It is mutually exclusive with sasUri property.
     Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
     connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "typeProperties.sasUri", "type": "object"},
        "sas_token": {"key": "typeProperties.sasToken", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri
         property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
         connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureStorage"
        self.connection_string = connection_string
        self.account_key = account_key
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.encrypted_credential = encrypted_credential


class AzureStorageLinkedServiceTypeProperties(_serialization.Model):
    """Azure Storage linked service properties.

    :ivar connection_string: The connection string. It is mutually exclusive with sasUri property.
     Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
     connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    """

    _attribute_map = {
        "connection_string": {"key": "connectionString", "type": "object"},
        "account_key": {"key": "accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "sasUri", "type": "object"},
        "sas_token": {"key": "sasToken", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri
         property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
         connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        """
        super().__init__(**kwargs)
        self.connection_string = connection_string
        self.account_key = account_key
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.encrypted_credential = encrypted_credential


class AzureSynapseArtifactsLinkedService(LinkedService):
    """Azure Synapse Analytics (Artifacts) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: https://:code:`<workspacename>`.dev.azuresynapse.net, Azure Synapse Analytics
     workspace URL. Type: string (or Expression with resultType string). Required.
    :vartype endpoint: JSON
    :ivar authentication: Required to specify MSI, if using system assigned managed identity as
     authentication method. Type: string (or Expression with resultType string).
    :vartype authentication: JSON
    :ivar workspace_resource_id: The resource ID of the Synapse workspace. The format should be:
     /subscriptions/{subscriptionID}/resourceGroups/{resourceGroup}/providers/Microsoft.Synapse/workspaces/{workspaceName}.  # pylint: disable=line-too-long
     Type: string (or Expression with resultType string).
    :vartype workspace_resource_id: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "object"},
        "workspace_resource_id": {"key": "typeProperties.workspaceResourceId", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication: Optional[JSON] = None,
        workspace_resource_id: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: https://:code:`<workspacename>`.dev.azuresynapse.net, Azure Synapse
         Analytics workspace URL. Type: string (or Expression with resultType string). Required.
        :paramtype endpoint: JSON
        :keyword authentication: Required to specify MSI, if using system assigned managed identity as
         authentication method. Type: string (or Expression with resultType string).
        :paramtype authentication: JSON
        :keyword workspace_resource_id: The resource ID of the Synapse workspace. The format should be:
         /subscriptions/{subscriptionID}/resourceGroups/{resourceGroup}/providers/Microsoft.Synapse/workspaces/{workspaceName}.  # pylint: disable=line-too-long
         Type: string (or Expression with resultType string).
        :paramtype workspace_resource_id: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureSynapseArtifacts"
        self.endpoint = endpoint
        self.authentication = authentication
        self.workspace_resource_id = workspace_resource_id


class AzureTableDataset(Dataset):
    """The Azure Table storage dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name of the Azure Table storage. Type: string (or Expression with
     resultType string). Required.
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "table_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        table_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name of the Azure Table storage. Type: string (or Expression
         with resultType string). Required.
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "AzureTable"
        self.table_name = table_name


class AzureTableSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure Table sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar azure_table_default_partition_key_value: Azure Table default partition key value. Type:
     string (or Expression with resultType string).
    :vartype azure_table_default_partition_key_value: JSON
    :ivar azure_table_partition_key_name: Azure Table partition key name. Type: string (or
     Expression with resultType string).
    :vartype azure_table_partition_key_name: JSON
    :ivar azure_table_row_key_name: Azure Table row key name. Type: string (or Expression with
     resultType string).
    :vartype azure_table_row_key_name: JSON
    :ivar azure_table_insert_type: Azure Table insert type. Type: string (or Expression with
     resultType string).
    :vartype azure_table_insert_type: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "azure_table_default_partition_key_value": {"key": "azureTableDefaultPartitionKeyValue", "type": "object"},
        "azure_table_partition_key_name": {"key": "azureTablePartitionKeyName", "type": "object"},
        "azure_table_row_key_name": {"key": "azureTableRowKeyName", "type": "object"},
        "azure_table_insert_type": {"key": "azureTableInsertType", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        azure_table_default_partition_key_value: Optional[JSON] = None,
        azure_table_partition_key_name: Optional[JSON] = None,
        azure_table_row_key_name: Optional[JSON] = None,
        azure_table_insert_type: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword azure_table_default_partition_key_value: Azure Table default partition key value.
         Type: string (or Expression with resultType string).
        :paramtype azure_table_default_partition_key_value: JSON
        :keyword azure_table_partition_key_name: Azure Table partition key name. Type: string (or
         Expression with resultType string).
        :paramtype azure_table_partition_key_name: JSON
        :keyword azure_table_row_key_name: Azure Table row key name. Type: string (or Expression with
         resultType string).
        :paramtype azure_table_row_key_name: JSON
        :keyword azure_table_insert_type: Azure Table insert type. Type: string (or Expression with
         resultType string).
        :paramtype azure_table_insert_type: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "AzureTableSink"
        self.azure_table_default_partition_key_value = azure_table_default_partition_key_value
        self.azure_table_partition_key_name = azure_table_partition_key_name
        self.azure_table_row_key_name = azure_table_row_key_name
        self.azure_table_insert_type = azure_table_insert_type


class AzureTableSource(TabularSource):
    """A copy activity Azure Table source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar azure_table_source_query: Azure Table source query. Type: string (or Expression with
     resultType string).
    :vartype azure_table_source_query: JSON
    :ivar azure_table_source_ignore_table_not_found: Azure Table source ignore table not found.
     Type: boolean (or Expression with resultType boolean).
    :vartype azure_table_source_ignore_table_not_found: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "azure_table_source_query": {"key": "azureTableSourceQuery", "type": "object"},
        "azure_table_source_ignore_table_not_found": {"key": "azureTableSourceIgnoreTableNotFound", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        azure_table_source_query: Optional[JSON] = None,
        azure_table_source_ignore_table_not_found: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword azure_table_source_query: Azure Table source query. Type: string (or Expression with
         resultType string).
        :paramtype azure_table_source_query: JSON
        :keyword azure_table_source_ignore_table_not_found: Azure Table source ignore table not found.
         Type: boolean (or Expression with resultType boolean).
        :paramtype azure_table_source_ignore_table_not_found: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "AzureTableSource"
        self.azure_table_source_query = azure_table_source_query
        self.azure_table_source_ignore_table_not_found = azure_table_source_ignore_table_not_found


class AzureTableStorageLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """The azure table storage linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. It is mutually exclusive with sasUri property.
     Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
     connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    :ivar service_endpoint: Table service endpoint of the Azure Table Storage resource. It is
     mutually exclusive with connectionString, sasUri property.
    :vartype service_endpoint: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "typeProperties.sasUri", "type": "object"},
        "sas_token": {"key": "typeProperties.sasToken", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
        "service_endpoint": {"key": "typeProperties.serviceEndpoint", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[str] = None,
        service_endpoint: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri
         property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
         connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        :keyword service_endpoint: Table service endpoint of the Azure Table Storage resource. It is
         mutually exclusive with connectionString, sasUri property.
        :paramtype service_endpoint: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "AzureTableStorage"
        self.connection_string = connection_string
        self.account_key = account_key
        self.sas_uri = sas_uri
        self.sas_token = sas_token
        self.encrypted_credential = encrypted_credential
        self.service_endpoint = service_endpoint
        self.credential = credential


class AzureTableStorageLinkedServiceTypeProperties(AzureStorageLinkedServiceTypeProperties):
    """Azure Table Storage linked service properties.

    :ivar connection_string: The connection string. It is mutually exclusive with sasUri property.
     Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_key: The Azure key vault secret reference of accountKey in connection string.
    :vartype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
     connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
    :vartype sas_uri: JSON
    :ivar sas_token: The Azure key vault secret reference of sasToken in sas uri.
    :vartype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    :ivar service_endpoint: Table service endpoint of the Azure Table Storage resource. It is
     mutually exclusive with connectionString, sasUri property.
    :vartype service_endpoint: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _attribute_map = {
        "connection_string": {"key": "connectionString", "type": "object"},
        "account_key": {"key": "accountKey", "type": "AzureKeyVaultSecretReference"},
        "sas_uri": {"key": "sasUri", "type": "object"},
        "sas_token": {"key": "sasToken", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "str"},
        "service_endpoint": {"key": "serviceEndpoint", "type": "object"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        connection_string: Optional[JSON] = None,
        account_key: Optional["_models.AzureKeyVaultSecretReference"] = None,
        sas_uri: Optional[JSON] = None,
        sas_token: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[str] = None,
        service_endpoint: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword connection_string: The connection string. It is mutually exclusive with sasUri
         property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_key: The Azure key vault secret reference of accountKey in connection string.
        :paramtype account_key: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword sas_uri: SAS URI of the Azure Storage resource. It is mutually exclusive with
         connectionString property. Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype sas_uri: JSON
        :keyword sas_token: The Azure key vault secret reference of sasToken in sas uri.
        :paramtype sas_token: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        :keyword service_endpoint: Table service endpoint of the Azure Table Storage resource. It is
         mutually exclusive with connectionString, sasUri property.
        :paramtype service_endpoint: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            connection_string=connection_string,
            account_key=account_key,
            sas_uri=sas_uri,
            sas_token=sas_token,
            encrypted_credential=encrypted_credential,
            **kwargs
        )
        self.service_endpoint = service_endpoint
        self.credential = credential


class BigDataPoolParametrizationReference(_serialization.Model):
    """Big data pool reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Big data pool reference type. Required. "BigDataPoolReference"
    :vartype type: str or ~azure.synapse.artifacts.models.BigDataPoolReferenceType
    :ivar reference_name: Reference big data pool name. Type: string (or Expression with resultType
     string). Required.
    :vartype reference_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "object"},
    }

    def __init__(
        self, *, type: Union[str, "_models.BigDataPoolReferenceType"], reference_name: JSON, **kwargs: Any
    ) -> None:
        """
        :keyword type: Big data pool reference type. Required. "BigDataPoolReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.BigDataPoolReferenceType
        :keyword reference_name: Reference big data pool name. Type: string (or Expression with
         resultType string). Required.
        :paramtype reference_name: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class BigDataPoolReference(_serialization.Model):
    """Big data pool reference.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Big data pool reference type. Required. "BigDataPoolReference"
    :vartype type: str or ~azure.synapse.artifacts.models.BigDataPoolReferenceType
    :ivar reference_name: Reference big data pool name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self, *, type: Union[str, "_models.BigDataPoolReferenceType"], reference_name: str, **kwargs: Any
    ) -> None:
        """
        :keyword type: Big data pool reference type. Required. "BigDataPoolReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.BigDataPoolReferenceType
        :keyword reference_name: Reference big data pool name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class TrackedResource(Resource):
    """The resource model definition for an Azure Resource Manager tracked top level resource which
    has 'tags' and a 'location'.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "location": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "tags": {"key": "tags", "type": "{str}"},
        "location": {"key": "location", "type": "str"},
    }

    def __init__(self, *, location: str, tags: Optional[Dict[str, str]] = None, **kwargs: Any) -> None:
        """
        :keyword tags: Resource tags.
        :paramtype tags: dict[str, str]
        :keyword location: The geo-location where the resource lives. Required.
        :paramtype location: str
        """
        super().__init__(**kwargs)
        self.tags = tags
        self.location = location


class BigDataPoolResourceInfo(TrackedResource):  # pylint: disable=too-many-instance-attributes
    """A Big Data pool.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar provisioning_state: The state of the Big Data pool.
    :vartype provisioning_state: str
    :ivar auto_scale: Auto-scaling properties.
    :vartype auto_scale: ~azure.synapse.artifacts.models.AutoScaleProperties
    :ivar creation_date: The time when the Big Data pool was created.
    :vartype creation_date: ~datetime.datetime
    :ivar auto_pause: Auto-pausing properties.
    :vartype auto_pause: ~azure.synapse.artifacts.models.AutoPauseProperties
    :ivar is_compute_isolation_enabled: Whether compute isolation is required or not.
    :vartype is_compute_isolation_enabled: bool
    :ivar session_level_packages_enabled: Whether session level packages enabled.
    :vartype session_level_packages_enabled: bool
    :ivar cache_size: The cache size.
    :vartype cache_size: int
    :ivar dynamic_executor_allocation: Dynamic Executor Allocation.
    :vartype dynamic_executor_allocation: ~azure.synapse.artifacts.models.DynamicExecutorAllocation
    :ivar spark_events_folder: The Spark events folder.
    :vartype spark_events_folder: str
    :ivar node_count: The number of nodes in the Big Data pool.
    :vartype node_count: int
    :ivar library_requirements: Library version requirements.
    :vartype library_requirements: ~azure.synapse.artifacts.models.LibraryRequirements
    :ivar custom_libraries: List of custom libraries/packages associated with the spark pool.
    :vartype custom_libraries: list[~azure.synapse.artifacts.models.LibraryInfo]
    :ivar spark_config_properties: Spark configuration file to specify additional properties.
    :vartype spark_config_properties: ~azure.synapse.artifacts.models.LibraryRequirements
    :ivar spark_version: The Apache Spark version.
    :vartype spark_version: str
    :ivar default_spark_log_folder: The default folder where Spark logs will be written.
    :vartype default_spark_log_folder: str
    :ivar node_size: The level of compute power that each node in the Big Data pool has. Known
     values are: "None", "Small", "Medium", "Large", "XLarge", "XXLarge", and "XXXLarge".
    :vartype node_size: str or ~azure.synapse.artifacts.models.NodeSize
    :ivar node_size_family: The kind of nodes that the Big Data pool provides. Known values are:
     "None" and "MemoryOptimized".
    :vartype node_size_family: str or ~azure.synapse.artifacts.models.NodeSizeFamily
    :ivar last_succeeded_timestamp: The time when the Big Data pool was updated successfully.
    :vartype last_succeeded_timestamp: ~datetime.datetime
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "location": {"required": True},
        "last_succeeded_timestamp": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "tags": {"key": "tags", "type": "{str}"},
        "location": {"key": "location", "type": "str"},
        "provisioning_state": {"key": "properties.provisioningState", "type": "str"},
        "auto_scale": {"key": "properties.autoScale", "type": "AutoScaleProperties"},
        "creation_date": {"key": "properties.creationDate", "type": "iso-8601"},
        "auto_pause": {"key": "properties.autoPause", "type": "AutoPauseProperties"},
        "is_compute_isolation_enabled": {"key": "properties.isComputeIsolationEnabled", "type": "bool"},
        "session_level_packages_enabled": {"key": "properties.sessionLevelPackagesEnabled", "type": "bool"},
        "cache_size": {"key": "properties.cacheSize", "type": "int"},
        "dynamic_executor_allocation": {
            "key": "properties.dynamicExecutorAllocation",
            "type": "DynamicExecutorAllocation",
        },
        "spark_events_folder": {"key": "properties.sparkEventsFolder", "type": "str"},
        "node_count": {"key": "properties.nodeCount", "type": "int"},
        "library_requirements": {"key": "properties.libraryRequirements", "type": "LibraryRequirements"},
        "custom_libraries": {"key": "properties.customLibraries", "type": "[LibraryInfo]"},
        "spark_config_properties": {"key": "properties.sparkConfigProperties", "type": "LibraryRequirements"},
        "spark_version": {"key": "properties.sparkVersion", "type": "str"},
        "default_spark_log_folder": {"key": "properties.defaultSparkLogFolder", "type": "str"},
        "node_size": {"key": "properties.nodeSize", "type": "str"},
        "node_size_family": {"key": "properties.nodeSizeFamily", "type": "str"},
        "last_succeeded_timestamp": {"key": "properties.lastSucceededTimestamp", "type": "iso-8601"},
    }

    def __init__(
        self,
        *,
        location: str,
        tags: Optional[Dict[str, str]] = None,
        provisioning_state: Optional[str] = None,
        auto_scale: Optional["_models.AutoScaleProperties"] = None,
        creation_date: Optional[datetime.datetime] = None,
        auto_pause: Optional["_models.AutoPauseProperties"] = None,
        is_compute_isolation_enabled: Optional[bool] = None,
        session_level_packages_enabled: Optional[bool] = None,
        cache_size: Optional[int] = None,
        dynamic_executor_allocation: Optional["_models.DynamicExecutorAllocation"] = None,
        spark_events_folder: Optional[str] = None,
        node_count: Optional[int] = None,
        library_requirements: Optional["_models.LibraryRequirements"] = None,
        custom_libraries: Optional[List["_models.LibraryInfo"]] = None,
        spark_config_properties: Optional["_models.LibraryRequirements"] = None,
        spark_version: Optional[str] = None,
        default_spark_log_folder: Optional[str] = None,
        node_size: Optional[Union[str, "_models.NodeSize"]] = None,
        node_size_family: Optional[Union[str, "_models.NodeSizeFamily"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword tags: Resource tags.
        :paramtype tags: dict[str, str]
        :keyword location: The geo-location where the resource lives. Required.
        :paramtype location: str
        :keyword provisioning_state: The state of the Big Data pool.
        :paramtype provisioning_state: str
        :keyword auto_scale: Auto-scaling properties.
        :paramtype auto_scale: ~azure.synapse.artifacts.models.AutoScaleProperties
        :keyword creation_date: The time when the Big Data pool was created.
        :paramtype creation_date: ~datetime.datetime
        :keyword auto_pause: Auto-pausing properties.
        :paramtype auto_pause: ~azure.synapse.artifacts.models.AutoPauseProperties
        :keyword is_compute_isolation_enabled: Whether compute isolation is required or not.
        :paramtype is_compute_isolation_enabled: bool
        :keyword session_level_packages_enabled: Whether session level packages enabled.
        :paramtype session_level_packages_enabled: bool
        :keyword cache_size: The cache size.
        :paramtype cache_size: int
        :keyword dynamic_executor_allocation: Dynamic Executor Allocation.
        :paramtype dynamic_executor_allocation:
         ~azure.synapse.artifacts.models.DynamicExecutorAllocation
        :keyword spark_events_folder: The Spark events folder.
        :paramtype spark_events_folder: str
        :keyword node_count: The number of nodes in the Big Data pool.
        :paramtype node_count: int
        :keyword library_requirements: Library version requirements.
        :paramtype library_requirements: ~azure.synapse.artifacts.models.LibraryRequirements
        :keyword custom_libraries: List of custom libraries/packages associated with the spark pool.
        :paramtype custom_libraries: list[~azure.synapse.artifacts.models.LibraryInfo]
        :keyword spark_config_properties: Spark configuration file to specify additional properties.
        :paramtype spark_config_properties: ~azure.synapse.artifacts.models.LibraryRequirements
        :keyword spark_version: The Apache Spark version.
        :paramtype spark_version: str
        :keyword default_spark_log_folder: The default folder where Spark logs will be written.
        :paramtype default_spark_log_folder: str
        :keyword node_size: The level of compute power that each node in the Big Data pool has. Known
         values are: "None", "Small", "Medium", "Large", "XLarge", "XXLarge", and "XXXLarge".
        :paramtype node_size: str or ~azure.synapse.artifacts.models.NodeSize
        :keyword node_size_family: The kind of nodes that the Big Data pool provides. Known values are:
         "None" and "MemoryOptimized".
        :paramtype node_size_family: str or ~azure.synapse.artifacts.models.NodeSizeFamily
        """
        super().__init__(tags=tags, location=location, **kwargs)
        self.provisioning_state = provisioning_state
        self.auto_scale = auto_scale
        self.creation_date = creation_date
        self.auto_pause = auto_pause
        self.is_compute_isolation_enabled = is_compute_isolation_enabled
        self.session_level_packages_enabled = session_level_packages_enabled
        self.cache_size = cache_size
        self.dynamic_executor_allocation = dynamic_executor_allocation
        self.spark_events_folder = spark_events_folder
        self.node_count = node_count
        self.library_requirements = library_requirements
        self.custom_libraries = custom_libraries
        self.spark_config_properties = spark_config_properties
        self.spark_version = spark_version
        self.default_spark_log_folder = default_spark_log_folder
        self.node_size = node_size
        self.node_size_family = node_size_family
        self.last_succeeded_timestamp = None


class BigDataPoolResourceInfoListResult(_serialization.Model):
    """Collection of Big Data pool information.

    :ivar next_link: Link to the next page of results.
    :vartype next_link: str
    :ivar value: List of Big Data pools.
    :vartype value: list[~azure.synapse.artifacts.models.BigDataPoolResourceInfo]
    """

    _attribute_map = {
        "next_link": {"key": "nextLink", "type": "str"},
        "value": {"key": "value", "type": "[BigDataPoolResourceInfo]"},
    }

    def __init__(
        self,
        *,
        next_link: Optional[str] = None,
        value: Optional[List["_models.BigDataPoolResourceInfo"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword next_link: Link to the next page of results.
        :paramtype next_link: str
        :keyword value: List of Big Data pools.
        :paramtype value: list[~azure.synapse.artifacts.models.BigDataPoolResourceInfo]
        """
        super().__init__(**kwargs)
        self.next_link = next_link
        self.value = value


class BinaryDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Binary dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the Binary storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar compression: The data compression method used for the binary dataset.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the Binary storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword compression: The data compression method used for the binary dataset.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Binary"
        self.location = location
        self.compression = compression


class FormatReadSettings(_serialization.Model):
    """Format read settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    BinaryReadSettings, DelimitedTextReadSettings, JsonReadSettings, ParquetReadSettings,
    XmlReadSettings

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "BinaryReadSettings": "BinaryReadSettings",
            "DelimitedTextReadSettings": "DelimitedTextReadSettings",
            "JsonReadSettings": "JsonReadSettings",
            "ParquetReadSettings": "ParquetReadSettings",
            "XmlReadSettings": "XmlReadSettings",
        }
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class BinaryReadSettings(FormatReadSettings):
    """Binary read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar compression_properties: Compression settings.
    :vartype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "compression_properties": {"key": "compressionProperties", "type": "CompressionReadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        compression_properties: Optional["_models.CompressionReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword compression_properties: Compression settings.
        :paramtype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "BinaryReadSettings"
        self.compression_properties = compression_properties


class BinarySink(CopySink):
    """A copy activity Binary sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Binary store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Binary store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "BinarySink"
        self.store_settings = store_settings


class BinarySource(CopySource):
    """A copy activity Binary source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Binary store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: Binary format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.BinaryReadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "formatSettings", "type": "BinaryReadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.BinaryReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Binary store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: Binary format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.BinaryReadSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "BinarySource"
        self.store_settings = store_settings
        self.format_settings = format_settings


class Trigger(_serialization.Model):
    """Azure Synapse nested object which contains information about creating pipeline run.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    ChainingTrigger, MultiplePipelineTrigger, RerunTumblingWindowTrigger, TumblingWindowTrigger

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
    }

    _subtype_map = {
        "type": {
            "ChainingTrigger": "ChainingTrigger",
            "MultiplePipelineTrigger": "MultiplePipelineTrigger",
            "RerunTumblingWindowTrigger": "RerunTumblingWindowTrigger",
            "TumblingWindowTrigger": "TumblingWindowTrigger",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.description = description
        self.runtime_state = None
        self.annotations = annotations


class MultiplePipelineTrigger(Trigger):
    """Base class for all triggers that support one to many model for trigger to pipeline.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    BlobEventsTrigger, BlobTrigger, CustomEventsTrigger, ScheduleTrigger

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipelines: Pipelines that need to be started.
    :vartype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipelines": {"key": "pipelines", "type": "[TriggerPipelineReference]"},
    }

    _subtype_map = {
        "type": {
            "BlobEventsTrigger": "BlobEventsTrigger",
            "BlobTrigger": "BlobTrigger",
            "CustomEventsTrigger": "CustomEventsTrigger",
            "ScheduleTrigger": "ScheduleTrigger",
        }
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        pipelines: Optional[List["_models.TriggerPipelineReference"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipelines: Pipelines that need to be started.
        :paramtype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
        """
        super().__init__(
            additional_properties=additional_properties, description=description, annotations=annotations, **kwargs
        )
        self.type: str = "MultiplePipelineTrigger"
        self.pipelines = pipelines


class BlobEventsTrigger(MultiplePipelineTrigger):  # pylint: disable=too-many-instance-attributes
    """Trigger that runs every time a Blob event occurs.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipelines: Pipelines that need to be started.
    :vartype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
    :ivar blob_path_begins_with: The blob path must begin with the pattern provided for trigger to
     fire. For example, '/records/blobs/december/' will only fire the trigger for blobs in the
     december folder under the records container. At least one of these must be provided:
     blobPathBeginsWith, blobPathEndsWith.
    :vartype blob_path_begins_with: str
    :ivar blob_path_ends_with: The blob path must end with the pattern provided for trigger to
     fire. For example, 'december/boxes.csv' will only fire the trigger for blobs named boxes in a
     december folder. At least one of these must be provided: blobPathBeginsWith, blobPathEndsWith.
    :vartype blob_path_ends_with: str
    :ivar ignore_empty_blobs: If set to true, blobs with zero bytes will be ignored.
    :vartype ignore_empty_blobs: bool
    :ivar events: The type of events that cause this trigger to fire. Required.
    :vartype events: list[str or ~azure.synapse.artifacts.models.BlobEventType]
    :ivar scope: The ARM resource ID of the Storage Account. Required.
    :vartype scope: str
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "events": {"required": True},
        "scope": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipelines": {"key": "pipelines", "type": "[TriggerPipelineReference]"},
        "blob_path_begins_with": {"key": "typeProperties.blobPathBeginsWith", "type": "str"},
        "blob_path_ends_with": {"key": "typeProperties.blobPathEndsWith", "type": "str"},
        "ignore_empty_blobs": {"key": "typeProperties.ignoreEmptyBlobs", "type": "bool"},
        "events": {"key": "typeProperties.events", "type": "[str]"},
        "scope": {"key": "typeProperties.scope", "type": "str"},
    }

    def __init__(
        self,
        *,
        events: List[Union[str, "_models.BlobEventType"]],
        scope: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        pipelines: Optional[List["_models.TriggerPipelineReference"]] = None,
        blob_path_begins_with: Optional[str] = None,
        blob_path_ends_with: Optional[str] = None,
        ignore_empty_blobs: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipelines: Pipelines that need to be started.
        :paramtype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
        :keyword blob_path_begins_with: The blob path must begin with the pattern provided for trigger
         to fire. For example, '/records/blobs/december/' will only fire the trigger for blobs in the
         december folder under the records container. At least one of these must be provided:
         blobPathBeginsWith, blobPathEndsWith.
        :paramtype blob_path_begins_with: str
        :keyword blob_path_ends_with: The blob path must end with the pattern provided for trigger to
         fire. For example, 'december/boxes.csv' will only fire the trigger for blobs named boxes in a
         december folder. At least one of these must be provided: blobPathBeginsWith, blobPathEndsWith.
        :paramtype blob_path_ends_with: str
        :keyword ignore_empty_blobs: If set to true, blobs with zero bytes will be ignored.
        :paramtype ignore_empty_blobs: bool
        :keyword events: The type of events that cause this trigger to fire. Required.
        :paramtype events: list[str or ~azure.synapse.artifacts.models.BlobEventType]
        :keyword scope: The ARM resource ID of the Storage Account. Required.
        :paramtype scope: str
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            annotations=annotations,
            pipelines=pipelines,
            **kwargs
        )
        self.type: str = "BlobEventsTrigger"
        self.blob_path_begins_with = blob_path_begins_with
        self.blob_path_ends_with = blob_path_ends_with
        self.ignore_empty_blobs = ignore_empty_blobs
        self.events = events
        self.scope = scope


class BlobSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure Blob sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar blob_writer_overwrite_files: Blob writer overwrite files. Type: boolean (or Expression
     with resultType boolean).
    :vartype blob_writer_overwrite_files: JSON
    :ivar blob_writer_date_time_format: Blob writer date time format. Type: string (or Expression
     with resultType string).
    :vartype blob_writer_date_time_format: JSON
    :ivar blob_writer_add_header: Blob writer add header. Type: boolean (or Expression with
     resultType boolean).
    :vartype blob_writer_add_header: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "blob_writer_overwrite_files": {"key": "blobWriterOverwriteFiles", "type": "object"},
        "blob_writer_date_time_format": {"key": "blobWriterDateTimeFormat", "type": "object"},
        "blob_writer_add_header": {"key": "blobWriterAddHeader", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        blob_writer_overwrite_files: Optional[JSON] = None,
        blob_writer_date_time_format: Optional[JSON] = None,
        blob_writer_add_header: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword blob_writer_overwrite_files: Blob writer overwrite files. Type: boolean (or Expression
         with resultType boolean).
        :paramtype blob_writer_overwrite_files: JSON
        :keyword blob_writer_date_time_format: Blob writer date time format. Type: string (or
         Expression with resultType string).
        :paramtype blob_writer_date_time_format: JSON
        :keyword blob_writer_add_header: Blob writer add header. Type: boolean (or Expression with
         resultType boolean).
        :paramtype blob_writer_add_header: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "BlobSink"
        self.blob_writer_overwrite_files = blob_writer_overwrite_files
        self.blob_writer_date_time_format = blob_writer_date_time_format
        self.blob_writer_add_header = blob_writer_add_header
        self.copy_behavior = copy_behavior


class BlobSource(CopySource):
    """A copy activity Azure Blob source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar treat_empty_as_null: Treat empty as null. Type: boolean (or Expression with resultType
     boolean).
    :vartype treat_empty_as_null: JSON
    :ivar skip_header_line_count: Number of header lines to skip from each blob. Type: integer (or
     Expression with resultType integer).
    :vartype skip_header_line_count: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "treat_empty_as_null": {"key": "treatEmptyAsNull", "type": "object"},
        "skip_header_line_count": {"key": "skipHeaderLineCount", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        treat_empty_as_null: Optional[JSON] = None,
        skip_header_line_count: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword treat_empty_as_null: Treat empty as null. Type: boolean (or Expression with resultType
         boolean).
        :paramtype treat_empty_as_null: JSON
        :keyword skip_header_line_count: Number of header lines to skip from each blob. Type: integer
         (or Expression with resultType integer).
        :paramtype skip_header_line_count: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "BlobSource"
        self.treat_empty_as_null = treat_empty_as_null
        self.skip_header_line_count = skip_header_line_count
        self.recursive = recursive


class BlobTrigger(MultiplePipelineTrigger):
    """Trigger that runs every time the selected Blob container changes.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipelines: Pipelines that need to be started.
    :vartype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
    :ivar folder_path: The path of the container/folder that will trigger the pipeline. Required.
    :vartype folder_path: str
    :ivar max_concurrency: The max number of parallel files to handle when it is triggered.
     Required.
    :vartype max_concurrency: int
    :ivar linked_service: The Azure Storage linked service reference. Required.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "folder_path": {"required": True},
        "max_concurrency": {"required": True},
        "linked_service": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipelines": {"key": "pipelines", "type": "[TriggerPipelineReference]"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "str"},
        "max_concurrency": {"key": "typeProperties.maxConcurrency", "type": "int"},
        "linked_service": {"key": "typeProperties.linkedService", "type": "LinkedServiceReference"},
    }

    def __init__(
        self,
        *,
        folder_path: str,
        max_concurrency: int,
        linked_service: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        pipelines: Optional[List["_models.TriggerPipelineReference"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipelines: Pipelines that need to be started.
        :paramtype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
        :keyword folder_path: The path of the container/folder that will trigger the pipeline.
         Required.
        :paramtype folder_path: str
        :keyword max_concurrency: The max number of parallel files to handle when it is triggered.
         Required.
        :paramtype max_concurrency: int
        :keyword linked_service: The Azure Storage linked service reference. Required.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            annotations=annotations,
            pipelines=pipelines,
            **kwargs
        )
        self.type: str = "BlobTrigger"
        self.folder_path = folder_path
        self.max_concurrency = max_concurrency
        self.linked_service = linked_service


class CassandraLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Cassandra data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: Host name for connection. Type: string (or Expression with resultType string).
     Required.
    :vartype host: JSON
    :ivar authentication_type: AuthenticationType to be used for connection. Type: string (or
     Expression with resultType string).
    :vartype authentication_type: JSON
    :ivar port: The port for the connection. Type: integer (or Expression with resultType integer).
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string (or Expression with resultType
     string).
    :vartype username: JSON
    :ivar password: Password for authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: Host name for connection. Type: string (or Expression with resultType string).
         Required.
        :paramtype host: JSON
        :keyword authentication_type: AuthenticationType to be used for connection. Type: string (or
         Expression with resultType string).
        :paramtype authentication_type: JSON
        :keyword port: The port for the connection. Type: integer (or Expression with resultType
         integer).
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string (or Expression with resultType
         string).
        :paramtype username: JSON
        :keyword password: Password for authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Cassandra"
        self.host = host
        self.authentication_type = authentication_type
        self.port = port
        self.username = username
        self.password = password
        self.encrypted_credential = encrypted_credential


class CassandraSource(TabularSource):
    """A copy activity source for a Cassandra database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Should be a SQL-92 query expression or Cassandra Query Language
     (CQL) command. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar consistency_level: The consistency level specifies how many Cassandra servers must
     respond to a read request before returning data to the client application. Cassandra checks the
     specified number of Cassandra servers for data to satisfy the read request. Must be one of
     cassandraSourceReadConsistencyLevels. The default value is 'ONE'. It is case-insensitive. Known
     values are: "ALL", "EACH_QUORUM", "QUORUM", "LOCAL_QUORUM", "ONE", "TWO", "THREE", "LOCAL_ONE",
     "SERIAL", and "LOCAL_SERIAL".
    :vartype consistency_level: str or
     ~azure.synapse.artifacts.models.CassandraSourceReadConsistencyLevels
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "consistency_level": {"key": "consistencyLevel", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        consistency_level: Optional[Union[str, "_models.CassandraSourceReadConsistencyLevels"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Should be a SQL-92 query expression or Cassandra Query Language
         (CQL) command. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword consistency_level: The consistency level specifies how many Cassandra servers must
         respond to a read request before returning data to the client application. Cassandra checks the
         specified number of Cassandra servers for data to satisfy the read request. Must be one of
         cassandraSourceReadConsistencyLevels. The default value is 'ONE'. It is case-insensitive. Known
         values are: "ALL", "EACH_QUORUM", "QUORUM", "LOCAL_QUORUM", "ONE", "TWO", "THREE", "LOCAL_ONE",
         "SERIAL", and "LOCAL_SERIAL".
        :paramtype consistency_level: str or
         ~azure.synapse.artifacts.models.CassandraSourceReadConsistencyLevels
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "CassandraSource"
        self.query = query
        self.consistency_level = consistency_level


class CassandraTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Cassandra database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name of the Cassandra database. Type: string (or Expression with
     resultType string).
    :vartype table_name: JSON
    :ivar keyspace: The keyspace of the Cassandra database. Type: string (or Expression with
     resultType string).
    :vartype keyspace: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "keyspace": {"key": "typeProperties.keyspace", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        keyspace: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name of the Cassandra database. Type: string (or Expression with
         resultType string).
        :paramtype table_name: JSON
        :keyword keyspace: The keyspace of the Cassandra database. Type: string (or Expression with
         resultType string).
        :paramtype keyspace: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CassandraTable"
        self.table_name = table_name
        self.keyspace = keyspace


class ChainingTrigger(Trigger):
    """Trigger that allows the referenced pipeline to depend on other pipeline runs based on
    runDimension Name/Value pairs. Upstream pipelines should declare the same runDimension Name and
    their runs should have the values for those runDimensions. The referenced pipeline run would be
    triggered if the values for the runDimension match for all upstream pipeline runs.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipeline: Pipeline for which runs are created when all upstream pipelines complete
     successfully. Required.
    :vartype pipeline: ~azure.synapse.artifacts.models.TriggerPipelineReference
    :ivar depends_on: Upstream Pipelines. Required.
    :vartype depends_on: list[~azure.synapse.artifacts.models.PipelineReference]
    :ivar run_dimension: Run Dimension property that needs to be emitted by upstream pipelines.
     Required.
    :vartype run_dimension: str
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "pipeline": {"required": True},
        "depends_on": {"required": True},
        "run_dimension": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipeline": {"key": "pipeline", "type": "TriggerPipelineReference"},
        "depends_on": {"key": "typeProperties.dependsOn", "type": "[PipelineReference]"},
        "run_dimension": {"key": "typeProperties.runDimension", "type": "str"},
    }

    def __init__(
        self,
        *,
        pipeline: "_models.TriggerPipelineReference",
        depends_on: List["_models.PipelineReference"],
        run_dimension: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipeline: Pipeline for which runs are created when all upstream pipelines complete
         successfully. Required.
        :paramtype pipeline: ~azure.synapse.artifacts.models.TriggerPipelineReference
        :keyword depends_on: Upstream Pipelines. Required.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.PipelineReference]
        :keyword run_dimension: Run Dimension property that needs to be emitted by upstream pipelines.
         Required.
        :paramtype run_dimension: str
        """
        super().__init__(
            additional_properties=additional_properties, description=description, annotations=annotations, **kwargs
        )
        self.type: str = "ChainingTrigger"
        self.pipeline = pipeline
        self.depends_on = depends_on
        self.run_dimension = run_dimension


class CloudError(_serialization.Model):
    """The object that defines the structure of an Azure Synapse error response.

    All required parameters must be populated in order to send to Azure.

    :ivar code: Error code. Required.
    :vartype code: str
    :ivar message: Error message. Required.
    :vartype message: str
    :ivar target: Property name/path in request associated with error.
    :vartype target: str
    :ivar details: Array with additional error details.
    :vartype details: list[~azure.synapse.artifacts.models.CloudError]
    """

    _validation = {
        "code": {"required": True},
        "message": {"required": True},
    }

    _attribute_map = {
        "code": {"key": "error.code", "type": "str"},
        "message": {"key": "error.message", "type": "str"},
        "target": {"key": "error.target", "type": "str"},
        "details": {"key": "error.details", "type": "[CloudError]"},
    }

    def __init__(
        self,
        *,
        code: str,
        message: str,
        target: Optional[str] = None,
        details: Optional[List["_models.CloudError"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword code: Error code. Required.
        :paramtype code: str
        :keyword message: Error message. Required.
        :paramtype message: str
        :keyword target: Property name/path in request associated with error.
        :paramtype target: str
        :keyword details: Array with additional error details.
        :paramtype details: list[~azure.synapse.artifacts.models.CloudError]
        """
        super().__init__(**kwargs)
        self.code = code
        self.message = message
        self.target = target
        self.details = details


class CommonDataServiceForAppsEntityDataset(Dataset):
    """The Common Data Service for Apps entity dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar entity_name: The logical name of the entity. Type: string (or Expression with resultType
     string).
    :vartype entity_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "entity_name": {"key": "typeProperties.entityName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        entity_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword entity_name: The logical name of the entity. Type: string (or Expression with
         resultType string).
        :paramtype entity_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CommonDataServiceForAppsEntity"
        self.entity_name = entity_name


class CommonDataServiceForAppsLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Common Data Service for Apps linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar deployment_type: The deployment type of the Common Data Service for Apps instance.
     'Online' for Common Data Service for Apps Online and 'OnPremisesWithIfd' for Common Data
     Service for Apps on-premises with Ifd. Type: string (or Expression with resultType string).
     Required.
    :vartype deployment_type: JSON
    :ivar host_name: The host name of the on-premises Common Data Service for Apps server. The
     property is required for on-prem and not allowed for online. Type: string (or Expression with
     resultType string).
    :vartype host_name: JSON
    :ivar port: The port of on-premises Common Data Service for Apps server. The property is
     required for on-prem and not allowed for online. Default is 443. Type: integer (or Expression
     with resultType integer), minimum: 0.
    :vartype port: JSON
    :ivar service_uri: The URL to the Microsoft Common Data Service for Apps server. The property
     is required for on-line and not allowed for on-prem. Type: string (or Expression with
     resultType string).
    :vartype service_uri: JSON
    :ivar organization_name: The organization name of the Common Data Service for Apps instance.
     The property is required for on-prem and required for online when there are more than one
     Common Data Service for Apps instances associated with the user. Type: string (or Expression
     with resultType string).
    :vartype organization_name: JSON
    :ivar authentication_type: The authentication type to connect to Common Data Service for Apps
     server. 'Office365' for online scenario, 'Ifd' for on-premises with Ifd scenario.
     'AADServicePrincipal' for Server-To-Server authentication in online scenario, 'Active
     Directory' for Dynamics on-premises with IFD. Type: string (or Expression with resultType
     string). Required.
    :vartype authentication_type: JSON
    :ivar domain: The Active Directory domain that will verify user credentials. Type: string (or
     Expression with resultType string).
    :vartype domain: JSON
    :ivar username: User name to access the Common Data Service for Apps instance. Type: string (or
     Expression with resultType string).
    :vartype username: JSON
    :ivar password: Password to access the Common Data Service for Apps instance.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_id: The client ID of the application in Azure Active Directory used for
     Server-To-Server authentication. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_credential_type: A string from ServicePrincipalCredentialEnum or an
     expression.
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "deployment_type": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "deployment_type": {"key": "typeProperties.deploymentType", "type": "object"},
        "host_name": {"key": "typeProperties.hostName", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "service_uri": {"key": "typeProperties.serviceUri", "type": "object"},
        "organization_name": {"key": "typeProperties.organizationName", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "domain": {"key": "typeProperties.domain", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        deployment_type: JSON,
        authentication_type: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        host_name: Optional[JSON] = None,
        port: Optional[JSON] = None,
        service_uri: Optional[JSON] = None,
        organization_name: Optional[JSON] = None,
        domain: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword deployment_type: The deployment type of the Common Data Service for Apps instance.
         'Online' for Common Data Service for Apps Online and 'OnPremisesWithIfd' for Common Data
         Service for Apps on-premises with Ifd. Type: string (or Expression with resultType string).
         Required.
        :paramtype deployment_type: JSON
        :keyword host_name: The host name of the on-premises Common Data Service for Apps server. The
         property is required for on-prem and not allowed for online. Type: string (or Expression with
         resultType string).
        :paramtype host_name: JSON
        :keyword port: The port of on-premises Common Data Service for Apps server. The property is
         required for on-prem and not allowed for online. Default is 443. Type: integer (or Expression
         with resultType integer), minimum: 0.
        :paramtype port: JSON
        :keyword service_uri: The URL to the Microsoft Common Data Service for Apps server. The
         property is required for on-line and not allowed for on-prem. Type: string (or Expression with
         resultType string).
        :paramtype service_uri: JSON
        :keyword organization_name: The organization name of the Common Data Service for Apps instance.
         The property is required for on-prem and required for online when there are more than one
         Common Data Service for Apps instances associated with the user. Type: string (or Expression
         with resultType string).
        :paramtype organization_name: JSON
        :keyword authentication_type: The authentication type to connect to Common Data Service for
         Apps server. 'Office365' for online scenario, 'Ifd' for on-premises with Ifd scenario.
         'AADServicePrincipal' for Server-To-Server authentication in online scenario, 'Active
         Directory' for Dynamics on-premises with IFD. Type: string (or Expression with resultType
         string). Required.
        :paramtype authentication_type: JSON
        :keyword domain: The Active Directory domain that will verify user credentials. Type: string
         (or Expression with resultType string).
        :paramtype domain: JSON
        :keyword username: User name to access the Common Data Service for Apps instance. Type: string
         (or Expression with resultType string).
        :paramtype username: JSON
        :keyword password: Password to access the Common Data Service for Apps instance.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_id: The client ID of the application in Azure Active Directory used
         for Server-To-Server authentication. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_credential_type: A string from ServicePrincipalCredentialEnum or an
         expression.
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "CommonDataServiceForApps"
        self.deployment_type = deployment_type
        self.host_name = host_name
        self.port = port
        self.service_uri = service_uri
        self.organization_name = organization_name
        self.authentication_type = authentication_type
        self.domain = domain
        self.username = username
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.encrypted_credential = encrypted_credential


class CommonDataServiceForAppsSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Common Data Service for Apps sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Required. "Upsert"
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
    :ivar ignore_null_values: The flag indicating whether to ignore null values from input dataset
     (except key fields) during write operation. Default is false. Type: boolean (or Expression with
     resultType boolean).
    :vartype ignore_null_values: JSON
    :ivar alternate_key_name: The logical name of the alternate key which will be used when
     upserting records. Type: string (or Expression with resultType string).
    :vartype alternate_key_name: JSON
    :ivar bypass_business_logic_execution: Controls the bypass of Dataverse custom business logic.
     Type: string (or Expression with resultType string). Type: string (or Expression with
     resultType string).
    :vartype bypass_business_logic_execution: JSON
    :ivar bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype bypass_power_automate_flows: JSON
    """

    _validation = {
        "type": {"required": True},
        "write_behavior": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
        "alternate_key_name": {"key": "alternateKeyName", "type": "object"},
        "bypass_business_logic_execution": {"key": "bypassBusinessLogicExecution", "type": "object"},
        "bypass_power_automate_flows": {"key": "bypassPowerAutomateFlows", "type": "object"},
    }

    def __init__(
        self,
        *,
        write_behavior: Union[str, "_models.DynamicsSinkWriteBehavior"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        alternate_key_name: Optional[JSON] = None,
        bypass_business_logic_execution: Optional[JSON] = None,
        bypass_power_automate_flows: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Required. "Upsert"
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
        :keyword ignore_null_values: The flag indicating whether to ignore null values from input
         dataset (except key fields) during write operation. Default is false. Type: boolean (or
         Expression with resultType boolean).
        :paramtype ignore_null_values: JSON
        :keyword alternate_key_name: The logical name of the alternate key which will be used when
         upserting records. Type: string (or Expression with resultType string).
        :paramtype alternate_key_name: JSON
        :keyword bypass_business_logic_execution: Controls the bypass of Dataverse custom business
         logic. Type: string (or Expression with resultType string). Type: string (or Expression with
         resultType string).
        :paramtype bypass_business_logic_execution: JSON
        :keyword bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype bypass_power_automate_flows: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CommonDataServiceForAppsSink"
        self.write_behavior = write_behavior
        self.ignore_null_values = ignore_null_values
        self.alternate_key_name = alternate_key_name
        self.bypass_business_logic_execution = bypass_business_logic_execution
        self.bypass_power_automate_flows = bypass_power_automate_flows


class CommonDataServiceForAppsSource(CopySource):
    """A copy activity Common Data Service for Apps source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: FetchXML is a proprietary query language that is used in Microsoft Common Data
     Service for Apps (online & on-premises). Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: FetchXML is a proprietary query language that is used in Microsoft Common Data
         Service for Apps (online & on-premises). Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CommonDataServiceForAppsSource"
        self.query = query
        self.additional_columns = additional_columns


class CompressionReadSettings(_serialization.Model):
    """Compression read settings.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    TarGZipReadSettings, TarReadSettings, ZipDeflateReadSettings

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The Compression setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "TarGZipReadSettings": "TarGZipReadSettings",
            "TarReadSettings": "TarReadSettings",
            "ZipDeflateReadSettings": "ZipDeflateReadSettings",
        }
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class ConcurLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Concur Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to Concur. It is mutually exclusive
     with any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar client_id: Application client_id supplied by Concur App Management. Required.
    :vartype client_id: JSON
    :ivar username: The user name that you use to access Concur Service. Required.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name that you provided in the username
     field.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "client_id": {"required": True},
        "username": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        client_id: JSON,
        username: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to Concur. It is mutually exclusive
         with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword client_id: Application client_id supplied by Concur App Management. Required.
        :paramtype client_id: JSON
        :keyword username: The user name that you use to access Concur Service. Required.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name that you provided in the
         username field.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Concur"
        self.connection_properties = connection_properties
        self.client_id = client_id
        self.username = username
        self.password = password
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class ConcurObjectDataset(Dataset):
    """Concur Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ConcurObject"
        self.table_name = table_name


class ConcurSource(TabularSource):
    """A copy activity Concur Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ConcurSource"
        self.query = query


class ContinuationSettingsReference(_serialization.Model):
    """Continuation settings for execute data flow activity.

    :ivar continuation_ttl_in_minutes: Continuation TTL in minutes.
    :vartype continuation_ttl_in_minutes: JSON
    :ivar idle_condition: Idle condition.
    :vartype idle_condition: JSON
    :ivar customized_checkpoint_key: Customized checkpoint key.
    :vartype customized_checkpoint_key: JSON
    """

    _attribute_map = {
        "continuation_ttl_in_minutes": {"key": "continuationTtlInMinutes", "type": "object"},
        "idle_condition": {"key": "idleCondition", "type": "object"},
        "customized_checkpoint_key": {"key": "customizedCheckpointKey", "type": "object"},
    }

    def __init__(
        self,
        *,
        continuation_ttl_in_minutes: Optional[JSON] = None,
        idle_condition: Optional[JSON] = None,
        customized_checkpoint_key: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword continuation_ttl_in_minutes: Continuation TTL in minutes.
        :paramtype continuation_ttl_in_minutes: JSON
        :keyword idle_condition: Idle condition.
        :paramtype idle_condition: JSON
        :keyword customized_checkpoint_key: Customized checkpoint key.
        :paramtype customized_checkpoint_key: JSON
        """
        super().__init__(**kwargs)
        self.continuation_ttl_in_minutes = continuation_ttl_in_minutes
        self.idle_condition = idle_condition
        self.customized_checkpoint_key = customized_checkpoint_key


class CopyActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Copy activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar inputs: List of inputs for the activity.
    :vartype inputs: list[~azure.synapse.artifacts.models.DatasetReference]
    :ivar outputs: List of outputs for the activity.
    :vartype outputs: list[~azure.synapse.artifacts.models.DatasetReference]
    :ivar source: Copy activity source. Required.
    :vartype source: ~azure.synapse.artifacts.models.CopySource
    :ivar sink: Copy activity sink. Required.
    :vartype sink: ~azure.synapse.artifacts.models.CopySink
    :ivar translator: Copy activity translator. If not specified, tabular translator is used.
    :vartype translator: JSON
    :ivar enable_staging: Specifies whether to copy data via an interim staging. Default value is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype enable_staging: JSON
    :ivar staging_settings: Specifies interim staging settings when EnableStaging is true.
    :vartype staging_settings: ~azure.synapse.artifacts.models.StagingSettings
    :ivar parallel_copies: Maximum number of concurrent sessions opened on the source or sink to
     avoid overloading the data store. Type: integer (or Expression with resultType integer),
     minimum: 0.
    :vartype parallel_copies: JSON
    :ivar data_integration_units: Maximum number of data integration units that can be used to
     perform this data movement. Type: integer (or Expression with resultType integer), minimum: 0.
    :vartype data_integration_units: JSON
    :ivar enable_skip_incompatible_row: Whether to skip incompatible row. Default value is false.
     Type: boolean (or Expression with resultType boolean).
    :vartype enable_skip_incompatible_row: JSON
    :ivar redirect_incompatible_row_settings: Redirect incompatible row settings when
     EnableSkipIncompatibleRow is true.
    :vartype redirect_incompatible_row_settings:
     ~azure.synapse.artifacts.models.RedirectIncompatibleRowSettings
    :ivar log_storage_settings: (Deprecated. Please use LogSettings) Log storage settings customer
     need to provide when enabling session log.
    :vartype log_storage_settings: ~azure.synapse.artifacts.models.LogStorageSettings
    :ivar log_settings: Log settings customer needs provide when enabling log.
    :vartype log_settings: ~azure.synapse.artifacts.models.LogSettings
    :ivar preserve_rules: Preserve Rules.
    :vartype preserve_rules: list[JSON]
    :ivar preserve: Preserve rules.
    :vartype preserve: list[JSON]
    :ivar validate_data_consistency: Whether to enable Data Consistency validation. Type: boolean
     (or Expression with resultType boolean).
    :vartype validate_data_consistency: JSON
    :ivar skip_error_file: Specify the fault tolerance for data consistency.
    :vartype skip_error_file: ~azure.synapse.artifacts.models.SkipErrorFile
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "source": {"required": True},
        "sink": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "inputs": {"key": "inputs", "type": "[DatasetReference]"},
        "outputs": {"key": "outputs", "type": "[DatasetReference]"},
        "source": {"key": "typeProperties.source", "type": "CopySource"},
        "sink": {"key": "typeProperties.sink", "type": "CopySink"},
        "translator": {"key": "typeProperties.translator", "type": "object"},
        "enable_staging": {"key": "typeProperties.enableStaging", "type": "object"},
        "staging_settings": {"key": "typeProperties.stagingSettings", "type": "StagingSettings"},
        "parallel_copies": {"key": "typeProperties.parallelCopies", "type": "object"},
        "data_integration_units": {"key": "typeProperties.dataIntegrationUnits", "type": "object"},
        "enable_skip_incompatible_row": {"key": "typeProperties.enableSkipIncompatibleRow", "type": "object"},
        "redirect_incompatible_row_settings": {
            "key": "typeProperties.redirectIncompatibleRowSettings",
            "type": "RedirectIncompatibleRowSettings",
        },
        "log_storage_settings": {"key": "typeProperties.logStorageSettings", "type": "LogStorageSettings"},
        "log_settings": {"key": "typeProperties.logSettings", "type": "LogSettings"},
        "preserve_rules": {"key": "typeProperties.preserveRules", "type": "[object]"},
        "preserve": {"key": "typeProperties.preserve", "type": "[object]"},
        "validate_data_consistency": {"key": "typeProperties.validateDataConsistency", "type": "object"},
        "skip_error_file": {"key": "typeProperties.skipErrorFile", "type": "SkipErrorFile"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        name: str,
        source: "_models.CopySource",
        sink: "_models.CopySink",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        inputs: Optional[List["_models.DatasetReference"]] = None,
        outputs: Optional[List["_models.DatasetReference"]] = None,
        translator: Optional[JSON] = None,
        enable_staging: Optional[JSON] = None,
        staging_settings: Optional["_models.StagingSettings"] = None,
        parallel_copies: Optional[JSON] = None,
        data_integration_units: Optional[JSON] = None,
        enable_skip_incompatible_row: Optional[JSON] = None,
        redirect_incompatible_row_settings: Optional["_models.RedirectIncompatibleRowSettings"] = None,
        log_storage_settings: Optional["_models.LogStorageSettings"] = None,
        log_settings: Optional["_models.LogSettings"] = None,
        preserve_rules: Optional[List[JSON]] = None,
        preserve: Optional[List[JSON]] = None,
        validate_data_consistency: Optional[JSON] = None,
        skip_error_file: Optional["_models.SkipErrorFile"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword inputs: List of inputs for the activity.
        :paramtype inputs: list[~azure.synapse.artifacts.models.DatasetReference]
        :keyword outputs: List of outputs for the activity.
        :paramtype outputs: list[~azure.synapse.artifacts.models.DatasetReference]
        :keyword source: Copy activity source. Required.
        :paramtype source: ~azure.synapse.artifacts.models.CopySource
        :keyword sink: Copy activity sink. Required.
        :paramtype sink: ~azure.synapse.artifacts.models.CopySink
        :keyword translator: Copy activity translator. If not specified, tabular translator is used.
        :paramtype translator: JSON
        :keyword enable_staging: Specifies whether to copy data via an interim staging. Default value
         is false. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_staging: JSON
        :keyword staging_settings: Specifies interim staging settings when EnableStaging is true.
        :paramtype staging_settings: ~azure.synapse.artifacts.models.StagingSettings
        :keyword parallel_copies: Maximum number of concurrent sessions opened on the source or sink to
         avoid overloading the data store. Type: integer (or Expression with resultType integer),
         minimum: 0.
        :paramtype parallel_copies: JSON
        :keyword data_integration_units: Maximum number of data integration units that can be used to
         perform this data movement. Type: integer (or Expression with resultType integer), minimum: 0.
        :paramtype data_integration_units: JSON
        :keyword enable_skip_incompatible_row: Whether to skip incompatible row. Default value is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_skip_incompatible_row: JSON
        :keyword redirect_incompatible_row_settings: Redirect incompatible row settings when
         EnableSkipIncompatibleRow is true.
        :paramtype redirect_incompatible_row_settings:
         ~azure.synapse.artifacts.models.RedirectIncompatibleRowSettings
        :keyword log_storage_settings: (Deprecated. Please use LogSettings) Log storage settings
         customer need to provide when enabling session log.
        :paramtype log_storage_settings: ~azure.synapse.artifacts.models.LogStorageSettings
        :keyword log_settings: Log settings customer needs provide when enabling log.
        :paramtype log_settings: ~azure.synapse.artifacts.models.LogSettings
        :keyword preserve_rules: Preserve Rules.
        :paramtype preserve_rules: list[JSON]
        :keyword preserve: Preserve rules.
        :paramtype preserve: list[JSON]
        :keyword validate_data_consistency: Whether to enable Data Consistency validation. Type:
         boolean (or Expression with resultType boolean).
        :paramtype validate_data_consistency: JSON
        :keyword skip_error_file: Specify the fault tolerance for data consistency.
        :paramtype skip_error_file: ~azure.synapse.artifacts.models.SkipErrorFile
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "Copy"
        self.inputs = inputs
        self.outputs = outputs
        self.source = source
        self.sink = sink
        self.translator = translator
        self.enable_staging = enable_staging
        self.staging_settings = staging_settings
        self.parallel_copies = parallel_copies
        self.data_integration_units = data_integration_units
        self.enable_skip_incompatible_row = enable_skip_incompatible_row
        self.redirect_incompatible_row_settings = redirect_incompatible_row_settings
        self.log_storage_settings = log_storage_settings
        self.log_settings = log_settings
        self.preserve_rules = preserve_rules
        self.preserve = preserve
        self.validate_data_consistency = validate_data_consistency
        self.skip_error_file = skip_error_file


class CopyActivityLogSettings(_serialization.Model):
    """Settings for copy activity log.

    :ivar log_level: Gets or sets the log level, support: Info, Warning. Type: string (or
     Expression with resultType string).
    :vartype log_level: JSON
    :ivar enable_reliable_logging: Specifies whether to enable reliable logging. Type: boolean (or
     Expression with resultType boolean).
    :vartype enable_reliable_logging: JSON
    """

    _attribute_map = {
        "log_level": {"key": "logLevel", "type": "object"},
        "enable_reliable_logging": {"key": "enableReliableLogging", "type": "object"},
    }

    def __init__(
        self, *, log_level: Optional[JSON] = None, enable_reliable_logging: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword log_level: Gets or sets the log level, support: Info, Warning. Type: string (or
         Expression with resultType string).
        :paramtype log_level: JSON
        :keyword enable_reliable_logging: Specifies whether to enable reliable logging. Type: boolean
         (or Expression with resultType boolean).
        :paramtype enable_reliable_logging: JSON
        """
        super().__init__(**kwargs)
        self.log_level = log_level
        self.enable_reliable_logging = enable_reliable_logging


class CopyTranslator(_serialization.Model):
    """A copy activity translator.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    TabularTranslator

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy translator type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {"type": {"TabularTranslator": "TabularTranslator"}}

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None


class CosmosDbLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Microsoft Azure Cosmos Database (CosmosDB) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar account_endpoint: The endpoint of the Azure CosmosDB account. Type: string (or Expression
     with resultType string).
    :vartype account_endpoint: JSON
    :ivar database: The name of the database. Type: string (or Expression with resultType string).
    :vartype database: JSON
    :ivar account_key: The account key of the Azure CosmosDB account. Type: SecureString or
     AzureKeyVaultSecretReference.
    :vartype account_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "account_endpoint": {"key": "typeProperties.accountEndpoint", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "account_key": {"key": "typeProperties.accountKey", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        account_endpoint: Optional[JSON] = None,
        database: Optional[JSON] = None,
        account_key: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword account_endpoint: The endpoint of the Azure CosmosDB account. Type: string (or
         Expression with resultType string).
        :paramtype account_endpoint: JSON
        :keyword database: The name of the database. Type: string (or Expression with resultType
         string).
        :paramtype database: JSON
        :keyword account_key: The account key of the Azure CosmosDB account. Type: SecureString or
         AzureKeyVaultSecretReference.
        :paramtype account_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "CosmosDb"
        self.connection_string = connection_string
        self.account_endpoint = account_endpoint
        self.database = database
        self.account_key = account_key
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class CosmosDbMongoDbApiCollectionDataset(Dataset):
    """The CosmosDB (MongoDB API) database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection: The collection name of the CosmosDB (MongoDB API) database. Type: string (or
     Expression with resultType string). Required.
    :vartype collection: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection": {"key": "typeProperties.collection", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection: The collection name of the CosmosDB (MongoDB API) database. Type: string
         (or Expression with resultType string). Required.
        :paramtype collection: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CosmosDbMongoDbApiCollection"
        self.collection = collection


class CosmosDbMongoDbApiLinkedService(LinkedService):
    """Linked service for CosmosDB (MongoDB API) data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The CosmosDB (MongoDB API) connection string. Type: string,
     SecureString or AzureKeyVaultSecretReference. Type: string, SecureString or
     AzureKeyVaultSecretReference. Required.
    :vartype connection_string: JSON
    :ivar database: The name of the CosmosDB (MongoDB API) database that you want to access. Type:
     string (or Expression with resultType string). Required.
    :vartype database: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The CosmosDB (MongoDB API) connection string. Type: string,
         SecureString or AzureKeyVaultSecretReference. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype connection_string: JSON
        :keyword database: The name of the CosmosDB (MongoDB API) database that you want to access.
         Type: string (or Expression with resultType string). Required.
        :paramtype database: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "CosmosDbMongoDbApi"
        self.connection_string = connection_string
        self.database = database


class CosmosDbMongoDbApiSink(CopySink):
    """A copy activity sink for a CosmosDB (MongoDB API) database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: Specifies whether the document with same key to be overwritten (upsert)
     rather than throw exception (insert). The default value is "insert". Type: string (or
     Expression with resultType string). Type: string (or Expression with resultType string).
    :vartype write_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: Specifies whether the document with same key to be overwritten
         (upsert) rather than throw exception (insert). The default value is "insert". Type: string (or
         Expression with resultType string). Type: string (or Expression with resultType string).
        :paramtype write_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CosmosDbMongoDbApiSink"
        self.write_behavior = write_behavior


class CosmosDbMongoDbApiSource(CopySource):
    """A copy activity source for a CosmosDB (MongoDB API) database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar filter: Specifies selection filter using query operators. To return all documents in a
     collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
     with resultType string).
    :vartype filter: JSON
    :ivar cursor_methods: Cursor methods for Mongodb query.
    :vartype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
    :ivar batch_size: Specifies the number of documents to return in each batch of the response
     from MongoDB instance. In most cases, modifying the batch size will not affect the user or the
     application. This property's main purpose is to avoid hit the limitation of response size.
     Type: integer (or Expression with resultType integer).
    :vartype batch_size: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "filter": {"key": "filter", "type": "object"},
        "cursor_methods": {"key": "cursorMethods", "type": "MongoDbCursorMethodsProperties"},
        "batch_size": {"key": "batchSize", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        filter: Optional[JSON] = None,  # pylint: disable=redefined-builtin
        cursor_methods: Optional["_models.MongoDbCursorMethodsProperties"] = None,
        batch_size: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword filter: Specifies selection filter using query operators. To return all documents in a
         collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
         with resultType string).
        :paramtype filter: JSON
        :keyword cursor_methods: Cursor methods for Mongodb query.
        :paramtype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
        :keyword batch_size: Specifies the number of documents to return in each batch of the response
         from MongoDB instance. In most cases, modifying the batch size will not affect the user or the
         application. This property's main purpose is to avoid hit the limitation of response size.
         Type: integer (or Expression with resultType integer).
        :paramtype batch_size: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CosmosDbMongoDbApiSource"
        self.filter = filter
        self.cursor_methods = cursor_methods
        self.batch_size = batch_size
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class CosmosDbSqlApiCollectionDataset(Dataset):
    """Microsoft Azure CosmosDB (SQL API) Collection dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection_name: CosmosDB (SQL API) collection name. Type: string (or Expression with
     resultType string). Required.
    :vartype collection_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection_name": {"key": "typeProperties.collectionName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection_name: CosmosDB (SQL API) collection name. Type: string (or Expression with
         resultType string). Required.
        :paramtype collection_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CosmosDbSqlApiCollection"
        self.collection_name = collection_name


class CosmosDbSqlApiSink(CopySink):
    """A copy activity Azure CosmosDB (SQL API) Collection sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: Describes how to write data to Azure Cosmos DB. Type: string (or
     Expression with resultType string). Allowed values: insert and upsert.
    :vartype write_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: Describes how to write data to Azure Cosmos DB. Type: string (or
         Expression with resultType string). Allowed values: insert and upsert.
        :paramtype write_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CosmosDbSqlApiSink"
        self.write_behavior = write_behavior


class CosmosDbSqlApiSource(CopySource):
    """A copy activity Azure CosmosDB (SQL API) Collection source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: SQL API query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar page_size: Page size of the result. Type: integer (or Expression with resultType
     integer).
    :vartype page_size: JSON
    :ivar preferred_regions: Preferred regions. Type: array of strings (or Expression with
     resultType array of strings).
    :vartype preferred_regions: JSON
    :ivar detect_datetime: Whether detect primitive values as datetime values. Type: boolean (or
     Expression with resultType boolean).
    :vartype detect_datetime: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "page_size": {"key": "pageSize", "type": "object"},
        "preferred_regions": {"key": "preferredRegions", "type": "object"},
        "detect_datetime": {"key": "detectDatetime", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        page_size: Optional[JSON] = None,
        preferred_regions: Optional[JSON] = None,
        detect_datetime: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: SQL API query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword page_size: Page size of the result. Type: integer (or Expression with resultType
         integer).
        :paramtype page_size: JSON
        :keyword preferred_regions: Preferred regions. Type: array of strings (or Expression with
         resultType array of strings).
        :paramtype preferred_regions: JSON
        :keyword detect_datetime: Whether detect primitive values as datetime values. Type: boolean (or
         Expression with resultType boolean).
        :paramtype detect_datetime: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "CosmosDbSqlApiSource"
        self.query = query
        self.page_size = page_size
        self.preferred_regions = preferred_regions
        self.detect_datetime = detect_datetime
        self.additional_columns = additional_columns


class CouchbaseLinkedService(LinkedService):
    """Couchbase server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar cred_string: The Azure key vault secret reference of credString in connection string.
    :vartype cred_string: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "cred_string": {"key": "typeProperties.credString", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        cred_string: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword cred_string: The Azure key vault secret reference of credString in connection string.
        :paramtype cred_string: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Couchbase"
        self.connection_string = connection_string
        self.cred_string = cred_string
        self.encrypted_credential = encrypted_credential


class CouchbaseSource(TabularSource):
    """A copy activity Couchbase server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "CouchbaseSource"
        self.query = query


class CouchbaseTableDataset(Dataset):
    """Couchbase server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CouchbaseTable"
        self.table_name = table_name


class CreateDataFlowDebugSessionRequest(_serialization.Model):
    """Request body structure for creating data flow debug session.

    :ivar compute_type: Compute type of the cluster. The value will be overwritten by the same
     setting in integration runtime if provided.
    :vartype compute_type: str
    :ivar core_count: Core count of the cluster. The value will be overwritten by the same setting
     in integration runtime if provided.
    :vartype core_count: int
    :ivar time_to_live: Time to live setting of the cluster in minutes.
    :vartype time_to_live: int
    :ivar integration_runtime: Set to use integration runtime setting for data flow debug session.
    :vartype integration_runtime: ~azure.synapse.artifacts.models.IntegrationRuntimeDebugResource
    """

    _attribute_map = {
        "compute_type": {"key": "computeType", "type": "str"},
        "core_count": {"key": "coreCount", "type": "int"},
        "time_to_live": {"key": "timeToLive", "type": "int"},
        "integration_runtime": {"key": "integrationRuntime", "type": "IntegrationRuntimeDebugResource"},
    }

    def __init__(
        self,
        *,
        compute_type: Optional[str] = None,
        core_count: Optional[int] = None,
        time_to_live: Optional[int] = None,
        integration_runtime: Optional["_models.IntegrationRuntimeDebugResource"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword compute_type: Compute type of the cluster. The value will be overwritten by the same
         setting in integration runtime if provided.
        :paramtype compute_type: str
        :keyword core_count: Core count of the cluster. The value will be overwritten by the same
         setting in integration runtime if provided.
        :paramtype core_count: int
        :keyword time_to_live: Time to live setting of the cluster in minutes.
        :paramtype time_to_live: int
        :keyword integration_runtime: Set to use integration runtime setting for data flow debug
         session.
        :paramtype integration_runtime: ~azure.synapse.artifacts.models.IntegrationRuntimeDebugResource
        """
        super().__init__(**kwargs)
        self.compute_type = compute_type
        self.core_count = core_count
        self.time_to_live = time_to_live
        self.integration_runtime = integration_runtime


class CreateDataFlowDebugSessionResponse(_serialization.Model):
    """Response body structure for creating data flow debug session.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
    }

    def __init__(self, *, session_id: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        """
        super().__init__(**kwargs)
        self.session_id = session_id


class CreateRunResponse(_serialization.Model):
    """Response body with a run identifier.

    All required parameters must be populated in order to send to Azure.

    :ivar run_id: Identifier of a run. Required.
    :vartype run_id: str
    """

    _validation = {
        "run_id": {"required": True},
    }

    _attribute_map = {
        "run_id": {"key": "runId", "type": "str"},
    }

    def __init__(self, *, run_id: str, **kwargs: Any) -> None:
        """
        :keyword run_id: Identifier of a run. Required.
        :paramtype run_id: str
        """
        super().__init__(**kwargs)
        self.run_id = run_id


class CredentialReference(_serialization.Model):
    """Credential reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Credential reference type. Required. "CredentialReference"
    :vartype type: str or ~azure.synapse.artifacts.models.CredentialReferenceType
    :ivar reference_name: Reference credential name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.CredentialReferenceType"],
        reference_name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword type: Credential reference type. Required. "CredentialReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.CredentialReferenceType
        :keyword reference_name: Reference credential name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type = type
        self.reference_name = reference_name


class CustomActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Custom activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar command: Command for custom activity Type: string (or Expression with resultType string).
     Required.
    :vartype command: JSON
    :ivar resource_linked_service: Resource linked service reference.
    :vartype resource_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar folder_path: Folder path for resource files Type: string (or Expression with resultType
     string).
    :vartype folder_path: JSON
    :ivar reference_objects: Reference objects.
    :vartype reference_objects: ~azure.synapse.artifacts.models.CustomActivityReferenceObject
    :ivar extended_properties: User defined property bag. There is no restriction on the keys or
     values that can be used. The user specified custom activity has the full responsibility to
     consume and interpret the content defined.
    :vartype extended_properties: dict[str, JSON]
    :ivar retention_time_in_days: The retention time for the files submitted for custom activity.
     Type: double (or Expression with resultType double).
    :vartype retention_time_in_days: JSON
    :ivar auto_user_specification: Elevation level and scope for the user, default is nonadmin
     task. Type: string (or Expression with resultType double).
    :vartype auto_user_specification: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "command": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "command": {"key": "typeProperties.command", "type": "object"},
        "resource_linked_service": {"key": "typeProperties.resourceLinkedService", "type": "LinkedServiceReference"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "object"},
        "reference_objects": {"key": "typeProperties.referenceObjects", "type": "CustomActivityReferenceObject"},
        "extended_properties": {"key": "typeProperties.extendedProperties", "type": "{object}"},
        "retention_time_in_days": {"key": "typeProperties.retentionTimeInDays", "type": "object"},
        "auto_user_specification": {"key": "typeProperties.autoUserSpecification", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        command: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        resource_linked_service: Optional["_models.LinkedServiceReference"] = None,
        folder_path: Optional[JSON] = None,
        reference_objects: Optional["_models.CustomActivityReferenceObject"] = None,
        extended_properties: Optional[Dict[str, JSON]] = None,
        retention_time_in_days: Optional[JSON] = None,
        auto_user_specification: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword command: Command for custom activity Type: string (or Expression with resultType
         string). Required.
        :paramtype command: JSON
        :keyword resource_linked_service: Resource linked service reference.
        :paramtype resource_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword folder_path: Folder path for resource files Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword reference_objects: Reference objects.
        :paramtype reference_objects: ~azure.synapse.artifacts.models.CustomActivityReferenceObject
        :keyword extended_properties: User defined property bag. There is no restriction on the keys or
         values that can be used. The user specified custom activity has the full responsibility to
         consume and interpret the content defined.
        :paramtype extended_properties: dict[str, JSON]
        :keyword retention_time_in_days: The retention time for the files submitted for custom
         activity. Type: double (or Expression with resultType double).
        :paramtype retention_time_in_days: JSON
        :keyword auto_user_specification: Elevation level and scope for the user, default is nonadmin
         task. Type: string (or Expression with resultType double).
        :paramtype auto_user_specification: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "Custom"
        self.command = command
        self.resource_linked_service = resource_linked_service
        self.folder_path = folder_path
        self.reference_objects = reference_objects
        self.extended_properties = extended_properties
        self.retention_time_in_days = retention_time_in_days
        self.auto_user_specification = auto_user_specification


class CustomActivityReferenceObject(_serialization.Model):
    """Reference objects for custom activity.

    :ivar linked_services: Linked service references.
    :vartype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar datasets: Dataset references.
    :vartype datasets: list[~azure.synapse.artifacts.models.DatasetReference]
    """

    _attribute_map = {
        "linked_services": {"key": "linkedServices", "type": "[LinkedServiceReference]"},
        "datasets": {"key": "datasets", "type": "[DatasetReference]"},
    }

    def __init__(
        self,
        *,
        linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        datasets: Optional[List["_models.DatasetReference"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword linked_services: Linked service references.
        :paramtype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword datasets: Dataset references.
        :paramtype datasets: list[~azure.synapse.artifacts.models.DatasetReference]
        """
        super().__init__(**kwargs)
        self.linked_services = linked_services
        self.datasets = datasets


class CustomDataset(Dataset):
    """The custom dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar type_properties: Custom dataset properties.
    :vartype type_properties: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "type_properties": {"key": "typeProperties", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        type_properties: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword type_properties: Custom dataset properties.
        :paramtype type_properties: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "CustomDataset"
        self.type_properties = type_properties


class CustomDataSourceLinkedService(LinkedService):
    """Custom linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar type_properties: Custom linked service properties. Required.
    :vartype type_properties: JSON
    """

    _validation = {
        "type": {"required": True},
        "type_properties": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "type_properties": {"key": "typeProperties", "type": "object"},
    }

    def __init__(
        self,
        *,
        type_properties: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword type_properties: Custom linked service properties. Required.
        :paramtype type_properties: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "CustomDataSource"
        self.type_properties = type_properties


class CustomerManagedKeyDetails(_serialization.Model):
    """Details of the customer managed key associated with the workspace.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar status: The customer managed key status on the workspace.
    :vartype status: str
    :ivar key: The key object of the workspace.
    :vartype key: ~azure.synapse.artifacts.models.WorkspaceKeyDetails
    """

    _validation = {
        "status": {"readonly": True},
    }

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "key": {"key": "key", "type": "WorkspaceKeyDetails"},
    }

    def __init__(self, *, key: Optional["_models.WorkspaceKeyDetails"] = None, **kwargs: Any) -> None:
        """
        :keyword key: The key object of the workspace.
        :paramtype key: ~azure.synapse.artifacts.models.WorkspaceKeyDetails
        """
        super().__init__(**kwargs)
        self.status = None
        self.key = key


class CustomEventsTrigger(MultiplePipelineTrigger):
    """Trigger that runs every time a custom event is received.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipelines: Pipelines that need to be started.
    :vartype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
    :ivar subject_begins_with: The event subject must begin with the pattern provided for trigger
     to fire. At least one of these must be provided: subjectBeginsWith, subjectEndsWith.
    :vartype subject_begins_with: str
    :ivar subject_ends_with: The event subject must end with the pattern provided for trigger to
     fire. At least one of these must be provided: subjectBeginsWith, subjectEndsWith.
    :vartype subject_ends_with: str
    :ivar events: The list of event types that cause this trigger to fire. Required.
    :vartype events: list[JSON]
    :ivar scope: The ARM resource ID of the Azure Event Grid Topic. Required.
    :vartype scope: str
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "events": {"required": True},
        "scope": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipelines": {"key": "pipelines", "type": "[TriggerPipelineReference]"},
        "subject_begins_with": {"key": "typeProperties.subjectBeginsWith", "type": "str"},
        "subject_ends_with": {"key": "typeProperties.subjectEndsWith", "type": "str"},
        "events": {"key": "typeProperties.events", "type": "[object]"},
        "scope": {"key": "typeProperties.scope", "type": "str"},
    }

    def __init__(
        self,
        *,
        events: List[JSON],
        scope: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        pipelines: Optional[List["_models.TriggerPipelineReference"]] = None,
        subject_begins_with: Optional[str] = None,
        subject_ends_with: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipelines: Pipelines that need to be started.
        :paramtype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
        :keyword subject_begins_with: The event subject must begin with the pattern provided for
         trigger to fire. At least one of these must be provided: subjectBeginsWith, subjectEndsWith.
        :paramtype subject_begins_with: str
        :keyword subject_ends_with: The event subject must end with the pattern provided for trigger to
         fire. At least one of these must be provided: subjectBeginsWith, subjectEndsWith.
        :paramtype subject_ends_with: str
        :keyword events: The list of event types that cause this trigger to fire. Required.
        :paramtype events: list[JSON]
        :keyword scope: The ARM resource ID of the Azure Event Grid Topic. Required.
        :paramtype scope: str
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            annotations=annotations,
            pipelines=pipelines,
            **kwargs
        )
        self.type: str = "CustomEventsTrigger"
        self.subject_begins_with = subject_begins_with
        self.subject_ends_with = subject_ends_with
        self.events = events
        self.scope = scope


class CustomSetupBase(_serialization.Model):
    """The base definition of the custom setup.

    All required parameters must be populated in order to send to Azure.

    :ivar type: The type of custom setup. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.type: Optional[str] = None


class DatabricksNotebookActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """DatabricksNotebook activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar notebook_path: The absolute path of the notebook to be run in the Databricks Workspace.
     This path must begin with a slash. Type: string (or Expression with resultType string).
     Required.
    :vartype notebook_path: JSON
    :ivar base_parameters: Base parameters to be used for each run of this job.If the notebook
     takes a parameter that is not specified, the default value from the notebook will be used.
    :vartype base_parameters: dict[str, JSON]
    :ivar libraries: A list of libraries to be installed on the cluster that will execute the job.
    :vartype libraries: list[dict[str, JSON]]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "notebook_path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "notebook_path": {"key": "typeProperties.notebookPath", "type": "object"},
        "base_parameters": {"key": "typeProperties.baseParameters", "type": "{object}"},
        "libraries": {"key": "typeProperties.libraries", "type": "[{object}]"},
    }

    def __init__(
        self,
        *,
        name: str,
        notebook_path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        base_parameters: Optional[Dict[str, JSON]] = None,
        libraries: Optional[List[Dict[str, JSON]]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword notebook_path: The absolute path of the notebook to be run in the Databricks
         Workspace. This path must begin with a slash. Type: string (or Expression with resultType
         string). Required.
        :paramtype notebook_path: JSON
        :keyword base_parameters: Base parameters to be used for each run of this job.If the notebook
         takes a parameter that is not specified, the default value from the notebook will be used.
        :paramtype base_parameters: dict[str, JSON]
        :keyword libraries: A list of libraries to be installed on the cluster that will execute the
         job.
        :paramtype libraries: list[dict[str, JSON]]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "DatabricksNotebook"
        self.notebook_path = notebook_path
        self.base_parameters = base_parameters
        self.libraries = libraries


class DatabricksSparkJarActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """DatabricksSparkJar activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar main_class_name: The full name of the class containing the main method to be executed.
     This class must be contained in a JAR provided as a library. Type: string (or Expression with
     resultType string). Required.
    :vartype main_class_name: JSON
    :ivar parameters: Parameters that will be passed to the main method.
    :vartype parameters: list[JSON]
    :ivar libraries: A list of libraries to be installed on the cluster that will execute the job.
    :vartype libraries: list[dict[str, JSON]]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "main_class_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "main_class_name": {"key": "typeProperties.mainClassName", "type": "object"},
        "parameters": {"key": "typeProperties.parameters", "type": "[object]"},
        "libraries": {"key": "typeProperties.libraries", "type": "[{object}]"},
    }

    def __init__(
        self,
        *,
        name: str,
        main_class_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        parameters: Optional[List[JSON]] = None,
        libraries: Optional[List[Dict[str, JSON]]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword main_class_name: The full name of the class containing the main method to be executed.
         This class must be contained in a JAR provided as a library. Type: string (or Expression with
         resultType string). Required.
        :paramtype main_class_name: JSON
        :keyword parameters: Parameters that will be passed to the main method.
        :paramtype parameters: list[JSON]
        :keyword libraries: A list of libraries to be installed on the cluster that will execute the
         job.
        :paramtype libraries: list[dict[str, JSON]]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "DatabricksSparkJar"
        self.main_class_name = main_class_name
        self.parameters = parameters
        self.libraries = libraries


class DatabricksSparkPythonActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """DatabricksSparkPython activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar python_file: The URI of the Python file to be executed. DBFS paths are supported. Type:
     string (or Expression with resultType string). Required.
    :vartype python_file: JSON
    :ivar parameters: Command line parameters that will be passed to the Python file.
    :vartype parameters: list[JSON]
    :ivar libraries: A list of libraries to be installed on the cluster that will execute the job.
    :vartype libraries: list[dict[str, JSON]]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "python_file": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "python_file": {"key": "typeProperties.pythonFile", "type": "object"},
        "parameters": {"key": "typeProperties.parameters", "type": "[object]"},
        "libraries": {"key": "typeProperties.libraries", "type": "[{object}]"},
    }

    def __init__(
        self,
        *,
        name: str,
        python_file: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        parameters: Optional[List[JSON]] = None,
        libraries: Optional[List[Dict[str, JSON]]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword python_file: The URI of the Python file to be executed. DBFS paths are supported.
         Type: string (or Expression with resultType string). Required.
        :paramtype python_file: JSON
        :keyword parameters: Command line parameters that will be passed to the Python file.
        :paramtype parameters: list[JSON]
        :keyword libraries: A list of libraries to be installed on the cluster that will execute the
         job.
        :paramtype libraries: list[dict[str, JSON]]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "DatabricksSparkPython"
        self.python_file = python_file
        self.parameters = parameters
        self.libraries = libraries


class DataFlow(_serialization.Model):
    """Azure Synapse nested object which contains a flow with data movements and transformations.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    Flowlet, MappingDataFlow

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of data flow. Required.
    :vartype type: str
    :ivar description: The description of the data flow.
    :vartype description: str
    :ivar annotations: List of tags that can be used for describing the data flow.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this data flow is in. If not specified, Data flow will appear at
     the root level.
    :vartype folder: ~azure.synapse.artifacts.models.DataFlowFolder
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DataFlowFolder"},
    }

    _subtype_map = {"type": {"Flowlet": "Flowlet", "MappingDataFlow": "MappingDataFlow"}}

    def __init__(
        self,
        *,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DataFlowFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword description: The description of the data flow.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the data flow.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this data flow is in. If not specified, Data flow will appear
         at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DataFlowFolder
        """
        super().__init__(**kwargs)
        self.type: Optional[str] = None
        self.description = description
        self.annotations = annotations
        self.folder = folder


class DataFlowDebugCommandPayload(_serialization.Model):
    """Structure of command payload.

    All required parameters must be populated in order to send to Azure.

    :ivar stream_name: The stream name which is used for preview. Required.
    :vartype stream_name: str
    :ivar row_limits: Row limits for preview response.
    :vartype row_limits: int
    :ivar columns: Array of column names.
    :vartype columns: list[str]
    :ivar expression: The expression which is used for preview.
    :vartype expression: str
    """

    _validation = {
        "stream_name": {"required": True},
    }

    _attribute_map = {
        "stream_name": {"key": "streamName", "type": "str"},
        "row_limits": {"key": "rowLimits", "type": "int"},
        "columns": {"key": "columns", "type": "[str]"},
        "expression": {"key": "expression", "type": "str"},
    }

    def __init__(
        self,
        *,
        stream_name: str,
        row_limits: Optional[int] = None,
        columns: Optional[List[str]] = None,
        expression: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword stream_name: The stream name which is used for preview. Required.
        :paramtype stream_name: str
        :keyword row_limits: Row limits for preview response.
        :paramtype row_limits: int
        :keyword columns: Array of column names.
        :paramtype columns: list[str]
        :keyword expression: The expression which is used for preview.
        :paramtype expression: str
        """
        super().__init__(**kwargs)
        self.stream_name = stream_name
        self.row_limits = row_limits
        self.columns = columns
        self.expression = expression


class DataFlowDebugCommandRequest(_serialization.Model):
    """Request body structure for data flow expression preview.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar command: The command type. Known values are: "executePreviewQuery",
     "executeStatisticsQuery", and "executeExpressionQuery".
    :vartype command: str or ~azure.synapse.artifacts.models.DataFlowDebugCommandType
    :ivar command_payload: The command payload object.
    :vartype command_payload: ~azure.synapse.artifacts.models.DataFlowDebugCommandPayload
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "command": {"key": "command", "type": "str"},
        "command_payload": {"key": "commandPayload", "type": "DataFlowDebugCommandPayload"},
    }

    def __init__(
        self,
        *,
        session_id: Optional[str] = None,
        command: Optional[Union[str, "_models.DataFlowDebugCommandType"]] = None,
        command_payload: Optional["_models.DataFlowDebugCommandPayload"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword command: The command type. Known values are: "executePreviewQuery",
         "executeStatisticsQuery", and "executeExpressionQuery".
        :paramtype command: str or ~azure.synapse.artifacts.models.DataFlowDebugCommandType
        :keyword command_payload: The command payload object.
        :paramtype command_payload: ~azure.synapse.artifacts.models.DataFlowDebugCommandPayload
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.command = command
        self.command_payload = command_payload


class DataFlowDebugCommandResponse(_serialization.Model):
    """Response body structure of data flow result for data preview, statistics or expression preview.

    :ivar status: The run status of data preview, statistics or expression preview.
    :vartype status: str
    :ivar data: The result data of data preview, statistics or expression preview.
    :vartype data: str
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "data": {"key": "data", "type": "str"},
    }

    def __init__(self, *, status: Optional[str] = None, data: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword status: The run status of data preview, statistics or expression preview.
        :paramtype status: str
        :keyword data: The result data of data preview, statistics or expression preview.
        :paramtype data: str
        """
        super().__init__(**kwargs)
        self.status = status
        self.data = data


class DataFlowDebugPackage(_serialization.Model):
    """Request body structure for starting data flow debug session.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow: Data flow instance.
    :vartype data_flow: ~azure.synapse.artifacts.models.DataFlowDebugResource
    :ivar data_flows: List of Data flows.
    :vartype data_flows: list[~azure.synapse.artifacts.models.DataFlowDebugResource]
    :ivar datasets: List of datasets.
    :vartype datasets: list[~azure.synapse.artifacts.models.DatasetDebugResource]
    :ivar linked_services: List of linked services.
    :vartype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceDebugResource]
    :ivar staging: Staging info for debug session.
    :vartype staging: ~azure.synapse.artifacts.models.DataFlowStagingInfo
    :ivar debug_settings: Data flow debug settings.
    :vartype debug_settings: ~azure.synapse.artifacts.models.DataFlowDebugPackageDebugSettings
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow": {"key": "dataFlow", "type": "DataFlowDebugResource"},
        "data_flows": {"key": "dataFlows", "type": "[DataFlowDebugResource]"},
        "datasets": {"key": "datasets", "type": "[DatasetDebugResource]"},
        "linked_services": {"key": "linkedServices", "type": "[LinkedServiceDebugResource]"},
        "staging": {"key": "staging", "type": "DataFlowStagingInfo"},
        "debug_settings": {"key": "debugSettings", "type": "DataFlowDebugPackageDebugSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        session_id: Optional[str] = None,
        data_flow: Optional["_models.DataFlowDebugResource"] = None,
        data_flows: Optional[List["_models.DataFlowDebugResource"]] = None,
        datasets: Optional[List["_models.DatasetDebugResource"]] = None,
        linked_services: Optional[List["_models.LinkedServiceDebugResource"]] = None,
        staging: Optional["_models.DataFlowStagingInfo"] = None,
        debug_settings: Optional["_models.DataFlowDebugPackageDebugSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow: Data flow instance.
        :paramtype data_flow: ~azure.synapse.artifacts.models.DataFlowDebugResource
        :keyword data_flows: List of Data flows.
        :paramtype data_flows: list[~azure.synapse.artifacts.models.DataFlowDebugResource]
        :keyword datasets: List of datasets.
        :paramtype datasets: list[~azure.synapse.artifacts.models.DatasetDebugResource]
        :keyword linked_services: List of linked services.
        :paramtype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceDebugResource]
        :keyword staging: Staging info for debug session.
        :paramtype staging: ~azure.synapse.artifacts.models.DataFlowStagingInfo
        :keyword debug_settings: Data flow debug settings.
        :paramtype debug_settings: ~azure.synapse.artifacts.models.DataFlowDebugPackageDebugSettings
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.session_id = session_id
        self.data_flow = data_flow
        self.data_flows = data_flows
        self.datasets = datasets
        self.linked_services = linked_services
        self.staging = staging
        self.debug_settings = debug_settings


class DataFlowDebugPackageDebugSettings(_serialization.Model):
    """Data flow debug settings.

    :ivar source_settings: Source setting for data flow debug.
    :vartype source_settings: list[~azure.synapse.artifacts.models.DataFlowSourceSetting]
    :ivar parameters: Data flow parameters.
    :vartype parameters: dict[str, JSON]
    :ivar dataset_parameters: Parameters for dataset.
    :vartype dataset_parameters: JSON
    """

    _attribute_map = {
        "source_settings": {"key": "sourceSettings", "type": "[DataFlowSourceSetting]"},
        "parameters": {"key": "parameters", "type": "{object}"},
        "dataset_parameters": {"key": "datasetParameters", "type": "object"},
    }

    def __init__(
        self,
        *,
        source_settings: Optional[List["_models.DataFlowSourceSetting"]] = None,
        parameters: Optional[Dict[str, JSON]] = None,
        dataset_parameters: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword source_settings: Source setting for data flow debug.
        :paramtype source_settings: list[~azure.synapse.artifacts.models.DataFlowSourceSetting]
        :keyword parameters: Data flow parameters.
        :paramtype parameters: dict[str, JSON]
        :keyword dataset_parameters: Parameters for dataset.
        :paramtype dataset_parameters: JSON
        """
        super().__init__(**kwargs)
        self.source_settings = source_settings
        self.parameters = parameters
        self.dataset_parameters = dataset_parameters


class DataFlowDebugPreviewDataRequest(_serialization.Model):
    """Request body structure for data flow preview data.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow_name: The data flow which contains the debug session.
    :vartype data_flow_name: str
    :ivar stream_name: The output stream name.
    :vartype stream_name: str
    :ivar row_limits: The row limit for preview request.
    :vartype row_limits: int
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow_name": {"key": "dataFlowName", "type": "str"},
        "stream_name": {"key": "streamName", "type": "str"},
        "row_limits": {"key": "rowLimits", "type": "int"},
    }

    def __init__(
        self,
        *,
        session_id: Optional[str] = None,
        data_flow_name: Optional[str] = None,
        stream_name: Optional[str] = None,
        row_limits: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow_name: The data flow which contains the debug session.
        :paramtype data_flow_name: str
        :keyword stream_name: The output stream name.
        :paramtype stream_name: str
        :keyword row_limits: The row limit for preview request.
        :paramtype row_limits: int
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.data_flow_name = data_flow_name
        self.stream_name = stream_name
        self.row_limits = row_limits


class DataFlowDebugQueryResponse(_serialization.Model):
    """Response body structure of data flow query for data preview, statistics or expression preview.

    :ivar run_id: The run ID of data flow debug session.
    :vartype run_id: str
    """

    _attribute_map = {
        "run_id": {"key": "runId", "type": "str"},
    }

    def __init__(self, *, run_id: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword run_id: The run ID of data flow debug session.
        :paramtype run_id: str
        """
        super().__init__(**kwargs)
        self.run_id = run_id


class SubResourceDebugResource(_serialization.Model):
    """Azure Synapse nested debug resource.

    :ivar name: The resource name.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The resource name.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class DataFlowDebugResource(SubResourceDebugResource):
    """Data flow debug resource.

    All required parameters must be populated in order to send to Azure.

    :ivar name: The resource name.
    :vartype name: str
    :ivar properties: Data flow properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.DataFlow
    """

    _validation = {
        "properties": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "properties": {"key": "properties", "type": "DataFlow"},
    }

    def __init__(self, *, properties: "_models.DataFlow", name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The resource name.
        :paramtype name: str
        :keyword properties: Data flow properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.DataFlow
        """
        super().__init__(name=name, **kwargs)
        self.properties = properties


class DataFlowDebugResultResponse(_serialization.Model):
    """Response body structure of data flow result for data preview, statistics or expression preview.

    :ivar status: The run status of data preview, statistics or expression preview.
    :vartype status: str
    :ivar data: The result data of data preview, statistics or expression preview.
    :vartype data: str
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "data": {"key": "data", "type": "str"},
    }

    def __init__(self, *, status: Optional[str] = None, data: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword status: The run status of data preview, statistics or expression preview.
        :paramtype status: str
        :keyword data: The result data of data preview, statistics or expression preview.
        :paramtype data: str
        """
        super().__init__(**kwargs)
        self.status = status
        self.data = data


class DataFlowDebugSessionInfo(_serialization.Model):
    """Data flow debug session info.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar data_flow_name: The name of the data flow.
    :vartype data_flow_name: str
    :ivar compute_type: Compute type of the cluster.
    :vartype compute_type: str
    :ivar core_count: Core count of the cluster.
    :vartype core_count: int
    :ivar node_count: Node count of the cluster. (deprecated property).
    :vartype node_count: int
    :ivar integration_runtime_name: Attached integration runtime name of data flow debug session.
    :vartype integration_runtime_name: str
    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar start_time: Start time of data flow debug session.
    :vartype start_time: str
    :ivar time_to_live_in_minutes: Compute type of the cluster.
    :vartype time_to_live_in_minutes: int
    :ivar last_activity_time: Last activity time of data flow debug session.
    :vartype last_activity_time: str
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "data_flow_name": {"key": "dataFlowName", "type": "str"},
        "compute_type": {"key": "computeType", "type": "str"},
        "core_count": {"key": "coreCount", "type": "int"},
        "node_count": {"key": "nodeCount", "type": "int"},
        "integration_runtime_name": {"key": "integrationRuntimeName", "type": "str"},
        "session_id": {"key": "sessionId", "type": "str"},
        "start_time": {"key": "startTime", "type": "str"},
        "time_to_live_in_minutes": {"key": "timeToLiveInMinutes", "type": "int"},
        "last_activity_time": {"key": "lastActivityTime", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        data_flow_name: Optional[str] = None,
        compute_type: Optional[str] = None,
        core_count: Optional[int] = None,
        node_count: Optional[int] = None,
        integration_runtime_name: Optional[str] = None,
        session_id: Optional[str] = None,
        start_time: Optional[str] = None,
        time_to_live_in_minutes: Optional[int] = None,
        last_activity_time: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword data_flow_name: The name of the data flow.
        :paramtype data_flow_name: str
        :keyword compute_type: Compute type of the cluster.
        :paramtype compute_type: str
        :keyword core_count: Core count of the cluster.
        :paramtype core_count: int
        :keyword node_count: Node count of the cluster. (deprecated property).
        :paramtype node_count: int
        :keyword integration_runtime_name: Attached integration runtime name of data flow debug
         session.
        :paramtype integration_runtime_name: str
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword start_time: Start time of data flow debug session.
        :paramtype start_time: str
        :keyword time_to_live_in_minutes: Compute type of the cluster.
        :paramtype time_to_live_in_minutes: int
        :keyword last_activity_time: Last activity time of data flow debug session.
        :paramtype last_activity_time: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.data_flow_name = data_flow_name
        self.compute_type = compute_type
        self.core_count = core_count
        self.node_count = node_count
        self.integration_runtime_name = integration_runtime_name
        self.session_id = session_id
        self.start_time = start_time
        self.time_to_live_in_minutes = time_to_live_in_minutes
        self.last_activity_time = last_activity_time


class DataFlowDebugStatisticsRequest(_serialization.Model):
    """Request body structure for data flow statistics.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow_name: The data flow which contains the debug session.
    :vartype data_flow_name: str
    :ivar stream_name: The output stream name.
    :vartype stream_name: str
    :ivar columns: List of column names.
    :vartype columns: list[str]
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow_name": {"key": "dataFlowName", "type": "str"},
        "stream_name": {"key": "streamName", "type": "str"},
        "columns": {"key": "columns", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        session_id: Optional[str] = None,
        data_flow_name: Optional[str] = None,
        stream_name: Optional[str] = None,
        columns: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow_name: The data flow which contains the debug session.
        :paramtype data_flow_name: str
        :keyword stream_name: The output stream name.
        :paramtype stream_name: str
        :keyword columns: List of column names.
        :paramtype columns: list[str]
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.data_flow_name = data_flow_name
        self.stream_name = stream_name
        self.columns = columns


class DataFlowFolder(_serialization.Model):
    """The folder that this data flow is in. If not specified, Data flow will appear at the root
    level.

    :ivar name: The name of the folder that this data flow is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this data flow is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class DataFlowListResponse(_serialization.Model):
    """A list of data flow resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of data flows. Required.
    :vartype value: list[~azure.synapse.artifacts.models.DataFlowResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[DataFlowResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.DataFlowResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of data flows. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.DataFlowResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class DataFlowReference(_serialization.Model):
    """Data flow reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Data flow reference type. Required. "DataFlowReference"
    :vartype type: str or ~azure.synapse.artifacts.models.DataFlowReferenceType
    :ivar reference_name: Reference data flow name. Required.
    :vartype reference_name: str
    :ivar dataset_parameters: Reference data flow parameters from dataset.
    :vartype dataset_parameters: JSON
    :ivar parameters: Data flow parameters.
    :vartype parameters: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
        "dataset_parameters": {"key": "datasetParameters", "type": "object"},
        "parameters": {"key": "parameters", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.DataFlowReferenceType"],
        reference_name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        dataset_parameters: Optional[JSON] = None,
        parameters: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword type: Data flow reference type. Required. "DataFlowReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.DataFlowReferenceType
        :keyword reference_name: Reference data flow name. Required.
        :paramtype reference_name: str
        :keyword dataset_parameters: Reference data flow parameters from dataset.
        :paramtype dataset_parameters: JSON
        :keyword parameters: Data flow parameters.
        :paramtype parameters: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type = type
        self.reference_name = reference_name
        self.dataset_parameters = dataset_parameters
        self.parameters = parameters


class SubResource(AzureEntityResource):
    """Azure Synapse nested resource, which belongs to a workspace.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    """


class DataFlowResource(SubResource):
    """Data flow resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Data flow properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.DataFlow
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "DataFlow"},
    }

    def __init__(self, *, properties: "_models.DataFlow", **kwargs: Any) -> None:
        """
        :keyword properties: Data flow properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.DataFlow
        """
        super().__init__(**kwargs)
        self.properties = properties


class Transformation(_serialization.Model):
    """A data flow transformation.

    All required parameters must be populated in order to send to Azure.

    :ivar name: Transformation name. Required.
    :vartype name: str
    :ivar description: Transformation description.
    :vartype description: str
    :ivar dataset: Dataset reference.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar flowlet: Flowlet Reference.
    :vartype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
    """

    _validation = {
        "name": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "dataset": {"key": "dataset", "type": "DatasetReference"},
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "flowlet": {"key": "flowlet", "type": "DataFlowReference"},
    }

    def __init__(
        self,
        *,
        name: str,
        description: Optional[str] = None,
        dataset: Optional["_models.DatasetReference"] = None,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        flowlet: Optional["_models.DataFlowReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: Transformation name. Required.
        :paramtype name: str
        :keyword description: Transformation description.
        :paramtype description: str
        :keyword dataset: Dataset reference.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword flowlet: Flowlet Reference.
        :paramtype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
        """
        super().__init__(**kwargs)
        self.name = name
        self.description = description
        self.dataset = dataset
        self.linked_service = linked_service
        self.flowlet = flowlet


class DataFlowSink(Transformation):
    """Transformation for data flow sink.

    All required parameters must be populated in order to send to Azure.

    :ivar name: Transformation name. Required.
    :vartype name: str
    :ivar description: Transformation description.
    :vartype description: str
    :ivar dataset: Dataset reference.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar flowlet: Flowlet Reference.
    :vartype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
    :ivar schema_linked_service: Schema linked service reference.
    :vartype schema_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar rejected_data_linked_service: Rejected data linked service reference.
    :vartype rejected_data_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    """

    _validation = {
        "name": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "dataset": {"key": "dataset", "type": "DatasetReference"},
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "flowlet": {"key": "flowlet", "type": "DataFlowReference"},
        "schema_linked_service": {"key": "schemaLinkedService", "type": "LinkedServiceReference"},
        "rejected_data_linked_service": {"key": "rejectedDataLinkedService", "type": "LinkedServiceReference"},
    }

    def __init__(
        self,
        *,
        name: str,
        description: Optional[str] = None,
        dataset: Optional["_models.DatasetReference"] = None,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        flowlet: Optional["_models.DataFlowReference"] = None,
        schema_linked_service: Optional["_models.LinkedServiceReference"] = None,
        rejected_data_linked_service: Optional["_models.LinkedServiceReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: Transformation name. Required.
        :paramtype name: str
        :keyword description: Transformation description.
        :paramtype description: str
        :keyword dataset: Dataset reference.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword flowlet: Flowlet Reference.
        :paramtype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
        :keyword schema_linked_service: Schema linked service reference.
        :paramtype schema_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword rejected_data_linked_service: Rejected data linked service reference.
        :paramtype rejected_data_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        """
        super().__init__(
            name=name,
            description=description,
            dataset=dataset,
            linked_service=linked_service,
            flowlet=flowlet,
            **kwargs
        )
        self.schema_linked_service = schema_linked_service
        self.rejected_data_linked_service = rejected_data_linked_service


class DataFlowSource(Transformation):
    """Transformation for data flow source.

    All required parameters must be populated in order to send to Azure.

    :ivar name: Transformation name. Required.
    :vartype name: str
    :ivar description: Transformation description.
    :vartype description: str
    :ivar dataset: Dataset reference.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar flowlet: Flowlet Reference.
    :vartype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
    :ivar schema_linked_service: Schema linked service reference.
    :vartype schema_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    """

    _validation = {
        "name": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "dataset": {"key": "dataset", "type": "DatasetReference"},
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "flowlet": {"key": "flowlet", "type": "DataFlowReference"},
        "schema_linked_service": {"key": "schemaLinkedService", "type": "LinkedServiceReference"},
    }

    def __init__(
        self,
        *,
        name: str,
        description: Optional[str] = None,
        dataset: Optional["_models.DatasetReference"] = None,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        flowlet: Optional["_models.DataFlowReference"] = None,
        schema_linked_service: Optional["_models.LinkedServiceReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: Transformation name. Required.
        :paramtype name: str
        :keyword description: Transformation description.
        :paramtype description: str
        :keyword dataset: Dataset reference.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword flowlet: Flowlet Reference.
        :paramtype flowlet: ~azure.synapse.artifacts.models.DataFlowReference
        :keyword schema_linked_service: Schema linked service reference.
        :paramtype schema_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        """
        super().__init__(
            name=name,
            description=description,
            dataset=dataset,
            linked_service=linked_service,
            flowlet=flowlet,
            **kwargs
        )
        self.schema_linked_service = schema_linked_service


class DataFlowSourceSetting(_serialization.Model):
    """Definition of data flow source setting for debug.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar source_name: The data flow source name.
    :vartype source_name: str
    :ivar row_limit: Defines the row limit of data flow source in debug.
    :vartype row_limit: int
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "source_name": {"key": "sourceName", "type": "str"},
        "row_limit": {"key": "rowLimit", "type": "int"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_name: Optional[str] = None,
        row_limit: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_name: The data flow source name.
        :paramtype source_name: str
        :keyword row_limit: Defines the row limit of data flow source in debug.
        :paramtype row_limit: int
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.source_name = source_name
        self.row_limit = row_limit


class DataFlowStagingInfo(_serialization.Model):
    """Staging info for execute data flow activity.

    :ivar linked_service: Staging linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar folder_path: Folder path for staging blob.
    :vartype folder_path: JSON
    """

    _attribute_map = {
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "folder_path": {"key": "folderPath", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        folder_path: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword linked_service: Staging linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword folder_path: Folder path for staging blob.
        :paramtype folder_path: JSON
        """
        super().__init__(**kwargs)
        self.linked_service = linked_service
        self.folder_path = folder_path


class DataLakeAnalyticsUSQLActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Data Lake Analytics U-SQL activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar script_path: Case-sensitive path to folder that contains the U-SQL script. Type: string
     (or Expression with resultType string). Required.
    :vartype script_path: JSON
    :ivar script_linked_service: Script linked service reference. Required.
    :vartype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar degree_of_parallelism: The maximum number of nodes simultaneously used to run the job.
     Default value is 1. Type: integer (or Expression with resultType integer), minimum: 1.
    :vartype degree_of_parallelism: JSON
    :ivar priority: Determines which jobs out of all that are queued should be selected to run
     first. The lower the number, the higher the priority. Default value is 1000. Type: integer (or
     Expression with resultType integer), minimum: 1.
    :vartype priority: JSON
    :ivar parameters: Parameters for U-SQL job request.
    :vartype parameters: dict[str, JSON]
    :ivar runtime_version: Runtime version of the U-SQL engine to use. Type: string (or Expression
     with resultType string).
    :vartype runtime_version: JSON
    :ivar compilation_mode: Compilation mode of U-SQL. Must be one of these values : Semantic, Full
     and SingleBox. Type: string (or Expression with resultType string).
    :vartype compilation_mode: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "script_path": {"required": True},
        "script_linked_service": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "script_path": {"key": "typeProperties.scriptPath", "type": "object"},
        "script_linked_service": {"key": "typeProperties.scriptLinkedService", "type": "LinkedServiceReference"},
        "degree_of_parallelism": {"key": "typeProperties.degreeOfParallelism", "type": "object"},
        "priority": {"key": "typeProperties.priority", "type": "object"},
        "parameters": {"key": "typeProperties.parameters", "type": "{object}"},
        "runtime_version": {"key": "typeProperties.runtimeVersion", "type": "object"},
        "compilation_mode": {"key": "typeProperties.compilationMode", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        script_path: JSON,
        script_linked_service: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        degree_of_parallelism: Optional[JSON] = None,
        priority: Optional[JSON] = None,
        parameters: Optional[Dict[str, JSON]] = None,
        runtime_version: Optional[JSON] = None,
        compilation_mode: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword script_path: Case-sensitive path to folder that contains the U-SQL script. Type:
         string (or Expression with resultType string). Required.
        :paramtype script_path: JSON
        :keyword script_linked_service: Script linked service reference. Required.
        :paramtype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword degree_of_parallelism: The maximum number of nodes simultaneously used to run the job.
         Default value is 1. Type: integer (or Expression with resultType integer), minimum: 1.
        :paramtype degree_of_parallelism: JSON
        :keyword priority: Determines which jobs out of all that are queued should be selected to run
         first. The lower the number, the higher the priority. Default value is 1000. Type: integer (or
         Expression with resultType integer), minimum: 1.
        :paramtype priority: JSON
        :keyword parameters: Parameters for U-SQL job request.
        :paramtype parameters: dict[str, JSON]
        :keyword runtime_version: Runtime version of the U-SQL engine to use. Type: string (or
         Expression with resultType string).
        :paramtype runtime_version: JSON
        :keyword compilation_mode: Compilation mode of U-SQL. Must be one of these values : Semantic,
         Full and SingleBox. Type: string (or Expression with resultType string).
        :paramtype compilation_mode: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "DataLakeAnalyticsU-SQL"
        self.script_path = script_path
        self.script_linked_service = script_linked_service
        self.degree_of_parallelism = degree_of_parallelism
        self.priority = priority
        self.parameters = parameters
        self.runtime_version = runtime_version
        self.compilation_mode = compilation_mode


class DataLakeStorageAccountDetails(_serialization.Model):
    """Details of the data lake storage account associated with the workspace.

    :ivar account_url: Account URL.
    :vartype account_url: str
    :ivar filesystem: Filesystem name.
    :vartype filesystem: str
    """

    _attribute_map = {
        "account_url": {"key": "accountUrl", "type": "str"},
        "filesystem": {"key": "filesystem", "type": "str"},
    }

    def __init__(self, *, account_url: Optional[str] = None, filesystem: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword account_url: Account URL.
        :paramtype account_url: str
        :keyword filesystem: Filesystem name.
        :paramtype filesystem: str
        """
        super().__init__(**kwargs)
        self.account_url = account_url
        self.filesystem = filesystem


class DatasetCompression(_serialization.Model):
    """The compression method used on a dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset compression. Type: string (or Expression with resultType string).
     Required.
    :vartype type: JSON
    :ivar level: The dataset compression level. Type: string (or Expression with resultType
     string).
    :vartype level: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "object"},
        "level": {"key": "level", "type": "object"},
    }

    def __init__(
        self,
        *,
        type: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        level: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword type: Type of dataset compression. Type: string (or Expression with resultType
         string). Required.
        :paramtype type: JSON
        :keyword level: The dataset compression level. Type: string (or Expression with resultType
         string).
        :paramtype level: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type = type
        self.level = level


class DatasetDataElement(_serialization.Model):
    """Columns that define the structure of the dataset.

    :ivar name: Name of the column. Type: string (or Expression with resultType string).
    :vartype name: JSON
    :ivar type: Type of the column. Type: string (or Expression with resultType string).
    :vartype type: JSON
    """

    _attribute_map = {
        "name": {"key": "name", "type": "object"},
        "type": {"key": "type", "type": "object"},
    }

    def __init__(self, *, name: Optional[JSON] = None, type: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword name: Name of the column. Type: string (or Expression with resultType string).
        :paramtype name: JSON
        :keyword type: Type of the column. Type: string (or Expression with resultType string).
        :paramtype type: JSON
        """
        super().__init__(**kwargs)
        self.name = name
        self.type = type


class DatasetDebugResource(SubResourceDebugResource):
    """Dataset debug resource.

    All required parameters must be populated in order to send to Azure.

    :ivar name: The resource name.
    :vartype name: str
    :ivar properties: Dataset properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.Dataset
    """

    _validation = {
        "properties": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "properties": {"key": "properties", "type": "Dataset"},
    }

    def __init__(self, *, properties: "_models.Dataset", name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The resource name.
        :paramtype name: str
        :keyword properties: Dataset properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.Dataset
        """
        super().__init__(name=name, **kwargs)
        self.properties = properties


class DatasetFolder(_serialization.Model):
    """The folder that this Dataset is in. If not specified, Dataset will appear at the root level.

    :ivar name: The name of the folder that this Dataset is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this Dataset is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class DatasetListResponse(_serialization.Model):
    """A list of dataset resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of datasets. Required.
    :vartype value: list[~azure.synapse.artifacts.models.DatasetResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[DatasetResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.DatasetResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of datasets. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.DatasetResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class DatasetReference(_serialization.Model):
    """Dataset reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Dataset reference type. Required. "DatasetReference"
    :vartype type: str or ~azure.synapse.artifacts.models.DatasetReferenceType
    :ivar reference_name: Reference dataset name. Required.
    :vartype reference_name: str
    :ivar parameters: Arguments for dataset.
    :vartype parameters: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
        "parameters": {"key": "parameters", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.DatasetReferenceType"],
        reference_name: str,
        parameters: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Dataset reference type. Required. "DatasetReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.DatasetReferenceType
        :keyword reference_name: Reference dataset name. Required.
        :paramtype reference_name: str
        :keyword parameters: Arguments for dataset.
        :paramtype parameters: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name
        self.parameters = parameters


class DatasetResource(SubResource):
    """Dataset resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Dataset properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.Dataset
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "Dataset"},
    }

    def __init__(self, *, properties: "_models.Dataset", **kwargs: Any) -> None:
        """
        :keyword properties: Dataset properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.Dataset
        """
        super().__init__(**kwargs)
        self.properties = properties


class DatasetSchemaDataElement(_serialization.Model):
    """Columns that define the physical type schema of the dataset.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Name of the schema column. Type: string (or Expression with resultType string).
    :vartype name: JSON
    :ivar type: Type of the schema column. Type: string (or Expression with resultType string).
    :vartype type: JSON
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "object"},
        "type": {"key": "type", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        name: Optional[JSON] = None,
        type: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Name of the schema column. Type: string (or Expression with resultType string).
        :paramtype name: JSON
        :keyword type: Type of the schema column. Type: string (or Expression with resultType string).
        :paramtype type: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.name = name
        self.type = type


class DataworldLinkedService(LinkedService):
    """Linked service for Dataworld.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar api_token: The api token for the Dataworld source. Required.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "api_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        api_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword api_token: The api token for the Dataworld source. Required.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Dataworld"
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class Db2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for DB2 data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. It is mutually exclusive with server, database,
     authenticationType, userName, packageCollection and certificateCommonName property. Type:
     string, SecureString or AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. It is mutually exclusive with connectionString
     property. Type: string (or Expression with resultType string). Required.
    :vartype server: JSON
    :ivar database: Database name for connection. It is mutually exclusive with connectionString
     property. Type: string (or Expression with resultType string). Required.
    :vartype database: JSON
    :ivar authentication_type: AuthenticationType to be used for connection. It is mutually
     exclusive with connectionString property. "Basic"
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.Db2AuthenticationType
    :ivar username: Username for authentication. It is mutually exclusive with connectionString
     property. Type: string (or Expression with resultType string).
    :vartype username: JSON
    :ivar password: Password for authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar package_collection: Under where packages are created when querying database. It is
     mutually exclusive with connectionString property. Type: string (or Expression with resultType
     string).
    :vartype package_collection: JSON
    :ivar certificate_common_name: Certificate Common Name when TLS is enabled. It is mutually
     exclusive with connectionString property. Type: string (or Expression with resultType string).
    :vartype certificate_common_name: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. It is mutually exclusive with
     connectionString property. Type: string (or Expression with resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "package_collection": {"key": "typeProperties.packageCollection", "type": "object"},
        "certificate_common_name": {"key": "typeProperties.certificateCommonName", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.Db2AuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        package_collection: Optional[JSON] = None,
        certificate_common_name: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. It is mutually exclusive with server,
         database, authenticationType, userName, packageCollection and certificateCommonName property.
         Type: string, SecureString or AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. It is mutually exclusive with connectionString
         property. Type: string (or Expression with resultType string). Required.
        :paramtype server: JSON
        :keyword database: Database name for connection. It is mutually exclusive with connectionString
         property. Type: string (or Expression with resultType string). Required.
        :paramtype database: JSON
        :keyword authentication_type: AuthenticationType to be used for connection. It is mutually
         exclusive with connectionString property. "Basic"
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.Db2AuthenticationType
        :keyword username: Username for authentication. It is mutually exclusive with connectionString
         property. Type: string (or Expression with resultType string).
        :paramtype username: JSON
        :keyword password: Password for authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword package_collection: Under where packages are created when querying database. It is
         mutually exclusive with connectionString property. Type: string (or Expression with resultType
         string).
        :paramtype package_collection: JSON
        :keyword certificate_common_name: Certificate Common Name when TLS is enabled. It is mutually
         exclusive with connectionString property. Type: string (or Expression with resultType string).
        :paramtype certificate_common_name: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. It is mutually exclusive with
         connectionString property. Type: string (or Expression with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Db2"
        self.connection_string = connection_string
        self.server = server
        self.database = database
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.package_collection = package_collection
        self.certificate_common_name = certificate_common_name
        self.encrypted_credential = encrypted_credential


class Db2Source(TabularSource):
    """A copy activity source for Db2 databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "Db2Source"
        self.query = query


class Db2TableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Db2 table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The Db2 schema name. Type: string (or Expression with
     resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The Db2 table name. Type: string (or Expression with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The Db2 schema name. Type: string (or Expression with
         resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The Db2 table name. Type: string (or Expression with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Db2Table"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class DeleteActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Delete activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar recursive: If true, files or sub-folders under current folder path will be deleted
     recursively. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar max_concurrent_connections: The max concurrent connections to connect data source at the
     same time.
    :vartype max_concurrent_connections: int
    :ivar enable_logging: Whether to record detailed logs of delete-activity execution. Default
     value is false. Type: boolean (or Expression with resultType boolean).
    :vartype enable_logging: JSON
    :ivar log_storage_settings: Log storage settings customer need to provide when enableLogging is
     true.
    :vartype log_storage_settings: ~azure.synapse.artifacts.models.LogStorageSettings
    :ivar dataset: Delete activity dataset reference. Required.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar store_settings: Delete activity store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "max_concurrent_connections": {"minimum": 1},
        "dataset": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "recursive": {"key": "typeProperties.recursive", "type": "object"},
        "max_concurrent_connections": {"key": "typeProperties.maxConcurrentConnections", "type": "int"},
        "enable_logging": {"key": "typeProperties.enableLogging", "type": "object"},
        "log_storage_settings": {"key": "typeProperties.logStorageSettings", "type": "LogStorageSettings"},
        "dataset": {"key": "typeProperties.dataset", "type": "DatasetReference"},
        "store_settings": {"key": "typeProperties.storeSettings", "type": "StoreReadSettings"},
    }

    def __init__(
        self,
        *,
        name: str,
        dataset: "_models.DatasetReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        recursive: Optional[JSON] = None,
        max_concurrent_connections: Optional[int] = None,
        enable_logging: Optional[JSON] = None,
        log_storage_settings: Optional["_models.LogStorageSettings"] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword recursive: If true, files or sub-folders under current folder path will be deleted
         recursively. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword max_concurrent_connections: The max concurrent connections to connect data source at
         the same time.
        :paramtype max_concurrent_connections: int
        :keyword enable_logging: Whether to record detailed logs of delete-activity execution. Default
         value is false. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_logging: JSON
        :keyword log_storage_settings: Log storage settings customer need to provide when enableLogging
         is true.
        :paramtype log_storage_settings: ~azure.synapse.artifacts.models.LogStorageSettings
        :keyword dataset: Delete activity dataset reference. Required.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword store_settings: Delete activity store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "Delete"
        self.recursive = recursive
        self.max_concurrent_connections = max_concurrent_connections
        self.enable_logging = enable_logging
        self.log_storage_settings = log_storage_settings
        self.dataset = dataset
        self.store_settings = store_settings


class DeleteDataFlowDebugSessionRequest(_serialization.Model):
    """Request body structure for deleting data flow debug session.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow_name: The data flow which contains the debug session.
    :vartype data_flow_name: str
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow_name": {"key": "dataFlowName", "type": "str"},
    }

    def __init__(
        self, *, session_id: Optional[str] = None, data_flow_name: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow_name: The data flow which contains the debug session.
        :paramtype data_flow_name: str
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.data_flow_name = data_flow_name


class DelimitedTextDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Delimited text dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the delimited text storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar column_delimiter: The column delimiter. Type: string (or Expression with resultType
     string).
    :vartype column_delimiter: JSON
    :ivar row_delimiter: The row delimiter. Type: string (or Expression with resultType string).
    :vartype row_delimiter: JSON
    :ivar encoding_name: The code page name of the preferred encoding. If miss, the default value
     is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column of the table in
     the following link to set supported values:
     https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
     resultType string).
    :vartype encoding_name: JSON
    :ivar compression_codec: The data compressionCodec. Type: string (or Expression with resultType
     string).
    :vartype compression_codec: JSON
    :ivar compression_level: The data compression method used for DelimitedText.
    :vartype compression_level: JSON
    :ivar quote_char: The quote character. Type: string (or Expression with resultType string).
    :vartype quote_char: JSON
    :ivar escape_char: The escape character. Type: string (or Expression with resultType string).
    :vartype escape_char: JSON
    :ivar first_row_as_header: When used as input, treat the first row of data as headers. When
     used as output,write the headers into the output as the first row of data. The default value is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype first_row_as_header: JSON
    :ivar null_value: The null value string. Type: string (or Expression with resultType string).
    :vartype null_value: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "column_delimiter": {"key": "typeProperties.columnDelimiter", "type": "object"},
        "row_delimiter": {"key": "typeProperties.rowDelimiter", "type": "object"},
        "encoding_name": {"key": "typeProperties.encodingName", "type": "object"},
        "compression_codec": {"key": "typeProperties.compressionCodec", "type": "object"},
        "compression_level": {"key": "typeProperties.compressionLevel", "type": "object"},
        "quote_char": {"key": "typeProperties.quoteChar", "type": "object"},
        "escape_char": {"key": "typeProperties.escapeChar", "type": "object"},
        "first_row_as_header": {"key": "typeProperties.firstRowAsHeader", "type": "object"},
        "null_value": {"key": "typeProperties.nullValue", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        column_delimiter: Optional[JSON] = None,
        row_delimiter: Optional[JSON] = None,
        encoding_name: Optional[JSON] = None,
        compression_codec: Optional[JSON] = None,
        compression_level: Optional[JSON] = None,
        quote_char: Optional[JSON] = None,
        escape_char: Optional[JSON] = None,
        first_row_as_header: Optional[JSON] = None,
        null_value: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the delimited text storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword column_delimiter: The column delimiter. Type: string (or Expression with resultType
         string).
        :paramtype column_delimiter: JSON
        :keyword row_delimiter: The row delimiter. Type: string (or Expression with resultType string).
        :paramtype row_delimiter: JSON
        :keyword encoding_name: The code page name of the preferred encoding. If miss, the default
         value is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column of the
         table in the following link to set supported values:
         https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
         resultType string).
        :paramtype encoding_name: JSON
        :keyword compression_codec: The data compressionCodec. Type: string (or Expression with
         resultType string).
        :paramtype compression_codec: JSON
        :keyword compression_level: The data compression method used for DelimitedText.
        :paramtype compression_level: JSON
        :keyword quote_char: The quote character. Type: string (or Expression with resultType string).
        :paramtype quote_char: JSON
        :keyword escape_char: The escape character. Type: string (or Expression with resultType
         string).
        :paramtype escape_char: JSON
        :keyword first_row_as_header: When used as input, treat the first row of data as headers. When
         used as output,write the headers into the output as the first row of data. The default value is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype first_row_as_header: JSON
        :keyword null_value: The null value string. Type: string (or Expression with resultType
         string).
        :paramtype null_value: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DelimitedText"
        self.location = location
        self.column_delimiter = column_delimiter
        self.row_delimiter = row_delimiter
        self.encoding_name = encoding_name
        self.compression_codec = compression_codec
        self.compression_level = compression_level
        self.quote_char = quote_char
        self.escape_char = escape_char
        self.first_row_as_header = first_row_as_header
        self.null_value = null_value


class DelimitedTextReadSettings(FormatReadSettings):
    """Delimited text read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar skip_line_count: Indicates the number of non-empty rows to skip when reading data from
     input files. Type: integer (or Expression with resultType integer).
    :vartype skip_line_count: JSON
    :ivar compression_properties: Compression settings.
    :vartype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "skip_line_count": {"key": "skipLineCount", "type": "object"},
        "compression_properties": {"key": "compressionProperties", "type": "CompressionReadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        skip_line_count: Optional[JSON] = None,
        compression_properties: Optional["_models.CompressionReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword skip_line_count: Indicates the number of non-empty rows to skip when reading data from
         input files. Type: integer (or Expression with resultType integer).
        :paramtype skip_line_count: JSON
        :keyword compression_properties: Compression settings.
        :paramtype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "DelimitedTextReadSettings"
        self.skip_line_count = skip_line_count
        self.compression_properties = compression_properties


class DelimitedTextSink(CopySink):
    """A copy activity DelimitedText sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: DelimitedText store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: DelimitedText format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.DelimitedTextWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "DelimitedTextWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.DelimitedTextWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: DelimitedText store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: DelimitedText format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.DelimitedTextWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DelimitedTextSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class DelimitedTextSource(CopySource):
    """A copy activity DelimitedText source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: DelimitedText store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: DelimitedText format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.DelimitedTextReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "formatSettings", "type": "DelimitedTextReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.DelimitedTextReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: DelimitedText store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: DelimitedText format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.DelimitedTextReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DelimitedTextSource"
        self.store_settings = store_settings
        self.format_settings = format_settings
        self.additional_columns = additional_columns


class DelimitedTextWriteSettings(FormatWriteSettings):
    """Delimited text write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar quote_all_text: Indicates whether string values should always be enclosed with quotes.
     Type: boolean (or Expression with resultType boolean).
    :vartype quote_all_text: JSON
    :ivar file_extension: The file extension used to create the files. Type: string (or Expression
     with resultType string). Required.
    :vartype file_extension: JSON
    :ivar max_rows_per_file: Limit the written file's row count to be smaller than or equal to the
     specified count. Type: integer (or Expression with resultType integer).
    :vartype max_rows_per_file: JSON
    :ivar file_name_prefix: Specifies the file name pattern
     :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
     based store without partitionOptions. Type: string (or Expression with resultType string).
    :vartype file_name_prefix: JSON
    """

    _validation = {
        "type": {"required": True},
        "file_extension": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "quote_all_text": {"key": "quoteAllText", "type": "object"},
        "file_extension": {"key": "fileExtension", "type": "object"},
        "max_rows_per_file": {"key": "maxRowsPerFile", "type": "object"},
        "file_name_prefix": {"key": "fileNamePrefix", "type": "object"},
    }

    def __init__(
        self,
        *,
        file_extension: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        quote_all_text: Optional[JSON] = None,
        max_rows_per_file: Optional[JSON] = None,
        file_name_prefix: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword quote_all_text: Indicates whether string values should always be enclosed with quotes.
         Type: boolean (or Expression with resultType boolean).
        :paramtype quote_all_text: JSON
        :keyword file_extension: The file extension used to create the files. Type: string (or
         Expression with resultType string). Required.
        :paramtype file_extension: JSON
        :keyword max_rows_per_file: Limit the written file's row count to be smaller than or equal to
         the specified count. Type: integer (or Expression with resultType integer).
        :paramtype max_rows_per_file: JSON
        :keyword file_name_prefix: Specifies the file name pattern
         :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
         based store without partitionOptions. Type: string (or Expression with resultType string).
        :paramtype file_name_prefix: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "DelimitedTextWriteSettings"
        self.quote_all_text = quote_all_text
        self.file_extension = file_extension
        self.max_rows_per_file = max_rows_per_file
        self.file_name_prefix = file_name_prefix


class DependencyReference(_serialization.Model):
    """Referenced dependency.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    SelfDependencyTumblingWindowTriggerReference, TriggerDependencyReference

    All required parameters must be populated in order to send to Azure.

    :ivar type: The type of dependency reference. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
    }

    _subtype_map = {
        "type": {
            "SelfDependencyTumblingWindowTriggerReference": "SelfDependencyTumblingWindowTriggerReference",
            "TriggerDependencyReference": "TriggerDependencyReference",
        }
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.type: Optional[str] = None


class DistcpSettings(_serialization.Model):
    """Distcp settings.

    All required parameters must be populated in order to send to Azure.

    :ivar resource_manager_endpoint: Specifies the Yarn ResourceManager endpoint. Type: string (or
     Expression with resultType string). Required.
    :vartype resource_manager_endpoint: JSON
    :ivar temp_script_path: Specifies an existing folder path which will be used to store temp
     Distcp command script. The script file is generated by ADF and will be removed after Copy job
     finished. Type: string (or Expression with resultType string). Required.
    :vartype temp_script_path: JSON
    :ivar distcp_options: Specifies the Distcp options. Type: string (or Expression with resultType
     string).
    :vartype distcp_options: JSON
    """

    _validation = {
        "resource_manager_endpoint": {"required": True},
        "temp_script_path": {"required": True},
    }

    _attribute_map = {
        "resource_manager_endpoint": {"key": "resourceManagerEndpoint", "type": "object"},
        "temp_script_path": {"key": "tempScriptPath", "type": "object"},
        "distcp_options": {"key": "distcpOptions", "type": "object"},
    }

    def __init__(
        self,
        *,
        resource_manager_endpoint: JSON,
        temp_script_path: JSON,
        distcp_options: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword resource_manager_endpoint: Specifies the Yarn ResourceManager endpoint. Type: string
         (or Expression with resultType string). Required.
        :paramtype resource_manager_endpoint: JSON
        :keyword temp_script_path: Specifies an existing folder path which will be used to store temp
         Distcp command script. The script file is generated by ADF and will be removed after Copy job
         finished. Type: string (or Expression with resultType string). Required.
        :paramtype temp_script_path: JSON
        :keyword distcp_options: Specifies the Distcp options. Type: string (or Expression with
         resultType string).
        :paramtype distcp_options: JSON
        """
        super().__init__(**kwargs)
        self.resource_manager_endpoint = resource_manager_endpoint
        self.temp_script_path = temp_script_path
        self.distcp_options = distcp_options


class DocumentDbCollectionDataset(Dataset):
    """Microsoft Azure Document Database Collection dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection_name: Document Database collection name. Type: string (or Expression with
     resultType string). Required.
    :vartype collection_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection_name": {"key": "typeProperties.collectionName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection_name: Document Database collection name. Type: string (or Expression with
         resultType string). Required.
        :paramtype collection_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DocumentDbCollection"
        self.collection_name = collection_name


class DocumentDbCollectionSink(CopySink):
    """A copy activity Document Database Collection sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar nesting_separator: Nested properties separator. Default is . (dot). Type: string (or
     Expression with resultType string).
    :vartype nesting_separator: JSON
    :ivar write_behavior: Describes how to write data to Azure Cosmos DB. Type: string (or
     Expression with resultType string). Allowed values: insert and upsert.
    :vartype write_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "nesting_separator": {"key": "nestingSeparator", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        nesting_separator: Optional[JSON] = None,
        write_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword nesting_separator: Nested properties separator. Default is . (dot). Type: string (or
         Expression with resultType string).
        :paramtype nesting_separator: JSON
        :keyword write_behavior: Describes how to write data to Azure Cosmos DB. Type: string (or
         Expression with resultType string). Allowed values: insert and upsert.
        :paramtype write_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DocumentDbCollectionSink"
        self.nesting_separator = nesting_separator
        self.write_behavior = write_behavior


class DocumentDbCollectionSource(CopySource):
    """A copy activity Document Database Collection source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Documents query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar nesting_separator: Nested properties separator. Type: string (or Expression with
     resultType string).
    :vartype nesting_separator: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "nesting_separator": {"key": "nestingSeparator", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        nesting_separator: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Documents query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword nesting_separator: Nested properties separator. Type: string (or Expression with
         resultType string).
        :paramtype nesting_separator: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DocumentDbCollectionSource"
        self.query = query
        self.nesting_separator = nesting_separator
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class DrillLinkedService(LinkedService):
    """Drill server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar pwd: The Azure key vault secret reference of password in connection string.
    :vartype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "pwd": {"key": "typeProperties.pwd", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        pwd: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword pwd: The Azure key vault secret reference of password in connection string.
        :paramtype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Drill"
        self.connection_string = connection_string
        self.pwd = pwd
        self.encrypted_credential = encrypted_credential


class DrillSource(TabularSource):
    """A copy activity Drill server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "DrillSource"
        self.query = query


class DrillTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Drill server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Drill. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Drill. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Drill. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Drill. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DrillTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class DWCopyCommandDefaultValue(_serialization.Model):
    """Default value.

    :ivar column_name: Column name. Type: object (or Expression with resultType string).
    :vartype column_name: JSON
    :ivar default_value: The default value of the column. Type: object (or Expression with
     resultType string).
    :vartype default_value: JSON
    """

    _attribute_map = {
        "column_name": {"key": "columnName", "type": "object"},
        "default_value": {"key": "defaultValue", "type": "object"},
    }

    def __init__(
        self, *, column_name: Optional[JSON] = None, default_value: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword column_name: Column name. Type: object (or Expression with resultType string).
        :paramtype column_name: JSON
        :keyword default_value: The default value of the column. Type: object (or Expression with
         resultType string).
        :paramtype default_value: JSON
        """
        super().__init__(**kwargs)
        self.column_name = column_name
        self.default_value = default_value


class DWCopyCommandSettings(_serialization.Model):
    """DW Copy Command settings.

    :ivar default_values: Specifies the default values for each target column in SQL DW. The
     default values in the property overwrite the DEFAULT constraint set in the DB, and identity
     column cannot have a default value. Type: array of objects (or Expression with resultType array
     of objects).
    :vartype default_values: list[~azure.synapse.artifacts.models.DWCopyCommandDefaultValue]
    :ivar additional_options: Additional options directly passed to SQL DW in Copy Command. Type:
     key value pairs (value should be string type) (or Expression with resultType object). Example:
     "additionalOptions": { "MAXERRORS": "1000", "DATEFORMAT": "'ymd'" }.
    :vartype additional_options: dict[str, str]
    """

    _attribute_map = {
        "default_values": {"key": "defaultValues", "type": "[DWCopyCommandDefaultValue]"},
        "additional_options": {"key": "additionalOptions", "type": "{str}"},
    }

    def __init__(
        self,
        *,
        default_values: Optional[List["_models.DWCopyCommandDefaultValue"]] = None,
        additional_options: Optional[Dict[str, str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword default_values: Specifies the default values for each target column in SQL DW. The
         default values in the property overwrite the DEFAULT constraint set in the DB, and identity
         column cannot have a default value. Type: array of objects (or Expression with resultType array
         of objects).
        :paramtype default_values: list[~azure.synapse.artifacts.models.DWCopyCommandDefaultValue]
        :keyword additional_options: Additional options directly passed to SQL DW in Copy Command.
         Type: key value pairs (value should be string type) (or Expression with resultType object).
         Example: "additionalOptions": { "MAXERRORS": "1000", "DATEFORMAT": "'ymd'" }.
        :paramtype additional_options: dict[str, str]
        """
        super().__init__(**kwargs)
        self.default_values = default_values
        self.additional_options = additional_options


class DynamicExecutorAllocation(_serialization.Model):
    """Dynamic Executor Allocation Properties.

    :ivar enabled: Indicates whether Dynamic Executor Allocation is enabled or not.
    :vartype enabled: bool
    """

    _attribute_map = {
        "enabled": {"key": "enabled", "type": "bool"},
    }

    def __init__(self, *, enabled: Optional[bool] = None, **kwargs: Any) -> None:
        """
        :keyword enabled: Indicates whether Dynamic Executor Allocation is enabled or not.
        :paramtype enabled: bool
        """
        super().__init__(**kwargs)
        self.enabled = enabled


class DynamicsAXLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Dynamics AX linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The Dynamics AX (or Dynamics 365 Finance and Operations) instance OData endpoint.
     Required.
    :vartype url: JSON
    :ivar service_principal_id: Specify the application's client ID. Type: string (or Expression
     with resultType string). Required.
    :vartype service_principal_id: JSON
    :ivar service_principal_key: Specify the application's key. Mark this field as a SecureString
     to store it securely in Data Factory, or reference a secret stored in Azure Key Vault. Type:
     string (or Expression with resultType string). Required.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: Specify the tenant information (domain name or tenant ID) under which your
     application resides. Retrieve it by hovering the mouse in the top-right corner of the Azure
     portal. Type: string (or Expression with resultType string). Required.
    :vartype tenant: JSON
    :ivar aad_resource_id: Specify the resource you are requesting authorization. Type: string (or
     Expression with resultType string). Required.
    :vartype aad_resource_id: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
        "service_principal_id": {"required": True},
        "service_principal_key": {"required": True},
        "tenant": {"required": True},
        "aad_resource_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "aad_resource_id": {"key": "typeProperties.aadResourceId", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        service_principal_id: JSON,
        service_principal_key: "_models.SecretBase",
        tenant: JSON,
        aad_resource_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The Dynamics AX (or Dynamics 365 Finance and Operations) instance OData endpoint.
         Required.
        :paramtype url: JSON
        :keyword service_principal_id: Specify the application's client ID. Type: string (or Expression
         with resultType string). Required.
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: Specify the application's key. Mark this field as a
         SecureString to store it securely in Data Factory, or reference a secret stored in Azure Key
         Vault. Type: string (or Expression with resultType string). Required.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: Specify the tenant information (domain name or tenant ID) under which your
         application resides. Retrieve it by hovering the mouse in the top-right corner of the Azure
         portal. Type: string (or Expression with resultType string). Required.
        :paramtype tenant: JSON
        :keyword aad_resource_id: Specify the resource you are requesting authorization. Type: string
         (or Expression with resultType string). Required.
        :paramtype aad_resource_id: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "DynamicsAX"
        self.url = url
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.aad_resource_id = aad_resource_id
        self.encrypted_credential = encrypted_credential


class DynamicsAXResourceDataset(Dataset):
    """The path of the Dynamics AX OData entity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar path: The path of the Dynamics AX OData entity. Type: string (or Expression with
     resultType string). Required.
    :vartype path: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "path": {"key": "typeProperties.path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword path: The path of the Dynamics AX OData entity. Type: string (or Expression with
         resultType string). Required.
        :paramtype path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DynamicsAXResource"
        self.path = path


class DynamicsAXSource(TabularSource):
    """A copy activity Dynamics AX source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:05:00. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:05:00.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "DynamicsAXSource"
        self.query = query
        self.http_request_timeout = http_request_timeout


class DynamicsCrmEntityDataset(Dataset):
    """The Dynamics CRM entity dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar entity_name: The logical name of the entity. Type: string (or Expression with resultType
     string).
    :vartype entity_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "entity_name": {"key": "typeProperties.entityName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        entity_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword entity_name: The logical name of the entity. Type: string (or Expression with
         resultType string).
        :paramtype entity_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DynamicsCrmEntity"
        self.entity_name = entity_name


class DynamicsCrmLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Dynamics CRM linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar deployment_type: The deployment type of the Dynamics CRM instance. 'Online' for Dynamics
     CRM Online and 'OnPremisesWithIfd' for Dynamics CRM on-premises with Ifd. Type: string (or
     Expression with resultType string). Required.
    :vartype deployment_type: JSON
    :ivar host_name: The host name of the on-premises Dynamics CRM server. The property is required
     for on-prem and not allowed for online. Type: string (or Expression with resultType string).
    :vartype host_name: JSON
    :ivar port: The port of on-premises Dynamics CRM server. The property is required for on-prem
     and not allowed for online. Default is 443. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype port: JSON
    :ivar service_uri: The URL to the Microsoft Dynamics CRM server. The property is required for
     on-line and not allowed for on-prem. Type: string (or Expression with resultType string).
    :vartype service_uri: JSON
    :ivar organization_name: The organization name of the Dynamics CRM instance. The property is
     required for on-prem and required for online when there are more than one Dynamics CRM
     instances associated with the user. Type: string (or Expression with resultType string).
    :vartype organization_name: JSON
    :ivar authentication_type: The authentication type to connect to Dynamics CRM server.
     'Office365' for online scenario, 'Ifd' for on-premises with Ifd scenario, 'AADServicePrincipal'
     for Server-To-Server authentication in online scenario, 'Active Directory' for Dynamics
     on-premises with IFD. Type: string (or Expression with resultType string). Required.
    :vartype authentication_type: JSON
    :ivar domain: The Active Directory domain that will verify user credentials. Type: string (or
     Expression with resultType string).
    :vartype domain: JSON
    :ivar username: User name to access the Dynamics CRM instance. Type: string (or Expression with
     resultType string).
    :vartype username: JSON
    :ivar password: Password to access the Dynamics CRM instance.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_id: The client ID of the application in Azure Active Directory used for
     Server-To-Server authentication. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_credential_type: A string from ServicePrincipalCredentialEnum or an
     expression.
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "deployment_type": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "deployment_type": {"key": "typeProperties.deploymentType", "type": "object"},
        "host_name": {"key": "typeProperties.hostName", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "service_uri": {"key": "typeProperties.serviceUri", "type": "object"},
        "organization_name": {"key": "typeProperties.organizationName", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "domain": {"key": "typeProperties.domain", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "credential": {"key": "typeProperties.credential", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        deployment_type: JSON,
        authentication_type: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        host_name: Optional[JSON] = None,
        port: Optional[JSON] = None,
        service_uri: Optional[JSON] = None,
        organization_name: Optional[JSON] = None,
        domain: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        credential: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword deployment_type: The deployment type of the Dynamics CRM instance. 'Online' for
         Dynamics CRM Online and 'OnPremisesWithIfd' for Dynamics CRM on-premises with Ifd. Type: string
         (or Expression with resultType string). Required.
        :paramtype deployment_type: JSON
        :keyword host_name: The host name of the on-premises Dynamics CRM server. The property is
         required for on-prem and not allowed for online. Type: string (or Expression with resultType
         string).
        :paramtype host_name: JSON
        :keyword port: The port of on-premises Dynamics CRM server. The property is required for
         on-prem and not allowed for online. Default is 443. Type: integer (or Expression with
         resultType integer), minimum: 0.
        :paramtype port: JSON
        :keyword service_uri: The URL to the Microsoft Dynamics CRM server. The property is required
         for on-line and not allowed for on-prem. Type: string (or Expression with resultType string).
        :paramtype service_uri: JSON
        :keyword organization_name: The organization name of the Dynamics CRM instance. The property is
         required for on-prem and required for online when there are more than one Dynamics CRM
         instances associated with the user. Type: string (or Expression with resultType string).
        :paramtype organization_name: JSON
        :keyword authentication_type: The authentication type to connect to Dynamics CRM server.
         'Office365' for online scenario, 'Ifd' for on-premises with Ifd scenario, 'AADServicePrincipal'
         for Server-To-Server authentication in online scenario, 'Active Directory' for Dynamics
         on-premises with IFD. Type: string (or Expression with resultType string). Required.
        :paramtype authentication_type: JSON
        :keyword domain: The Active Directory domain that will verify user credentials. Type: string
         (or Expression with resultType string).
        :paramtype domain: JSON
        :keyword username: User name to access the Dynamics CRM instance. Type: string (or Expression
         with resultType string).
        :paramtype username: JSON
        :keyword password: Password to access the Dynamics CRM instance.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_id: The client ID of the application in Azure Active Directory used
         for Server-To-Server authentication. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_credential_type: A string from ServicePrincipalCredentialEnum or an
         expression.
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "DynamicsCrm"
        self.deployment_type = deployment_type
        self.host_name = host_name
        self.port = port
        self.service_uri = service_uri
        self.organization_name = organization_name
        self.authentication_type = authentication_type
        self.domain = domain
        self.username = username
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.credential = credential
        self.encrypted_credential = encrypted_credential


class DynamicsCrmSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Dynamics CRM sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Required. "Upsert"
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
    :ivar ignore_null_values: The flag indicating whether to ignore null values from input dataset
     (except key fields) during write operation. Default is false. Type: boolean (or Expression with
     resultType boolean).
    :vartype ignore_null_values: JSON
    :ivar alternate_key_name: The logical name of the alternate key which will be used when
     upserting records. Type: string (or Expression with resultType string).
    :vartype alternate_key_name: JSON
    :ivar bypass_business_logic_execution: Controls the bypass of Dataverse custom business logic.
     Type: string (or Expression with resultType string). Type: string (or Expression with
     resultType string).
    :vartype bypass_business_logic_execution: JSON
    :ivar bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype bypass_power_automate_flows: JSON
    """

    _validation = {
        "type": {"required": True},
        "write_behavior": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
        "alternate_key_name": {"key": "alternateKeyName", "type": "object"},
        "bypass_business_logic_execution": {"key": "bypassBusinessLogicExecution", "type": "object"},
        "bypass_power_automate_flows": {"key": "bypassPowerAutomateFlows", "type": "object"},
    }

    def __init__(
        self,
        *,
        write_behavior: Union[str, "_models.DynamicsSinkWriteBehavior"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        alternate_key_name: Optional[JSON] = None,
        bypass_business_logic_execution: Optional[JSON] = None,
        bypass_power_automate_flows: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Required. "Upsert"
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
        :keyword ignore_null_values: The flag indicating whether to ignore null values from input
         dataset (except key fields) during write operation. Default is false. Type: boolean (or
         Expression with resultType boolean).
        :paramtype ignore_null_values: JSON
        :keyword alternate_key_name: The logical name of the alternate key which will be used when
         upserting records. Type: string (or Expression with resultType string).
        :paramtype alternate_key_name: JSON
        :keyword bypass_business_logic_execution: Controls the bypass of Dataverse custom business
         logic. Type: string (or Expression with resultType string). Type: string (or Expression with
         resultType string).
        :paramtype bypass_business_logic_execution: JSON
        :keyword bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype bypass_power_automate_flows: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DynamicsCrmSink"
        self.write_behavior = write_behavior
        self.ignore_null_values = ignore_null_values
        self.alternate_key_name = alternate_key_name
        self.bypass_business_logic_execution = bypass_business_logic_execution
        self.bypass_power_automate_flows = bypass_power_automate_flows


class DynamicsCrmSource(CopySource):
    """A copy activity Dynamics CRM source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: FetchXML is a proprietary query language that is used in Microsoft Dynamics CRM
     (online & on-premises). Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: FetchXML is a proprietary query language that is used in Microsoft Dynamics CRM
         (online & on-premises). Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DynamicsCrmSource"
        self.query = query
        self.additional_columns = additional_columns


class DynamicsEntityDataset(Dataset):
    """The Dynamics entity dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar entity_name: The logical name of the entity. Type: string (or Expression with resultType
     string).
    :vartype entity_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "entity_name": {"key": "typeProperties.entityName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        entity_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword entity_name: The logical name of the entity. Type: string (or Expression with
         resultType string).
        :paramtype entity_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "DynamicsEntity"
        self.entity_name = entity_name


class DynamicsLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Dynamics linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar deployment_type: The deployment type of the Dynamics instance. 'Online' for Dynamics
     Online and 'OnPremisesWithIfd' for Dynamics on-premises with Ifd. Type: string (or Expression
     with resultType string). Required.
    :vartype deployment_type: JSON
    :ivar host_name: The host name of the on-premises Dynamics server. The property is required for
     on-prem and not allowed for online. Type: string (or Expression with resultType string).
    :vartype host_name: JSON
    :ivar port: The port of on-premises Dynamics server. The property is required for on-prem and
     not allowed for online. Default is 443. Type: integer (or Expression with resultType integer),
     minimum: 0.
    :vartype port: JSON
    :ivar service_uri: The URL to the Microsoft Dynamics server. The property is required for
     on-line and not allowed for on-prem. Type: string (or Expression with resultType string).
    :vartype service_uri: JSON
    :ivar organization_name: The organization name of the Dynamics instance. The property is
     required for on-prem and required for online when there are more than one Dynamics instances
     associated with the user. Type: string (or Expression with resultType string).
    :vartype organization_name: JSON
    :ivar authentication_type: The authentication type to connect to Dynamics server. 'Office365'
     for online scenario, 'Ifd' for on-premises with Ifd scenario, 'AADServicePrincipal' for
     Server-To-Server authentication in online scenario, 'Active Directory' for Dynamics on-premises
     with IFD. Type: string (or Expression with resultType string). Required.
    :vartype authentication_type: JSON
    :ivar domain: The Active Directory domain that will verify user credentials. Type: string (or
     Expression with resultType string).
    :vartype domain: JSON
    :ivar username: User name to access the Dynamics instance. Type: string (or Expression with
     resultType string).
    :vartype username: JSON
    :ivar password: Password to access the Dynamics instance.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_id: The client ID of the application in Azure Active Directory used for
     Server-To-Server authentication. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "deployment_type": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "deployment_type": {"key": "typeProperties.deploymentType", "type": "object"},
        "host_name": {"key": "typeProperties.hostName", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "service_uri": {"key": "typeProperties.serviceUri", "type": "object"},
        "organization_name": {"key": "typeProperties.organizationName", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "domain": {"key": "typeProperties.domain", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        deployment_type: JSON,
        authentication_type: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        host_name: Optional[JSON] = None,
        port: Optional[JSON] = None,
        service_uri: Optional[JSON] = None,
        organization_name: Optional[JSON] = None,
        domain: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword deployment_type: The deployment type of the Dynamics instance. 'Online' for Dynamics
         Online and 'OnPremisesWithIfd' for Dynamics on-premises with Ifd. Type: string (or Expression
         with resultType string). Required.
        :paramtype deployment_type: JSON
        :keyword host_name: The host name of the on-premises Dynamics server. The property is required
         for on-prem and not allowed for online. Type: string (or Expression with resultType string).
        :paramtype host_name: JSON
        :keyword port: The port of on-premises Dynamics server. The property is required for on-prem
         and not allowed for online. Default is 443. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype port: JSON
        :keyword service_uri: The URL to the Microsoft Dynamics server. The property is required for
         on-line and not allowed for on-prem. Type: string (or Expression with resultType string).
        :paramtype service_uri: JSON
        :keyword organization_name: The organization name of the Dynamics instance. The property is
         required for on-prem and required for online when there are more than one Dynamics instances
         associated with the user. Type: string (or Expression with resultType string).
        :paramtype organization_name: JSON
        :keyword authentication_type: The authentication type to connect to Dynamics server.
         'Office365' for online scenario, 'Ifd' for on-premises with Ifd scenario, 'AADServicePrincipal'
         for Server-To-Server authentication in online scenario, 'Active Directory' for Dynamics
         on-premises with IFD. Type: string (or Expression with resultType string). Required.
        :paramtype authentication_type: JSON
        :keyword domain: The Active Directory domain that will verify user credentials. Type: string
         (or Expression with resultType string).
        :paramtype domain: JSON
        :keyword username: User name to access the Dynamics instance. Type: string (or Expression with
         resultType string).
        :paramtype username: JSON
        :keyword password: Password to access the Dynamics instance.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_id: The client ID of the application in Azure Active Directory used
         for Server-To-Server authentication. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Dynamics"
        self.deployment_type = deployment_type
        self.host_name = host_name
        self.port = port
        self.service_uri = service_uri
        self.organization_name = organization_name
        self.authentication_type = authentication_type
        self.domain = domain
        self.username = username
        self.password = password
        self.service_principal_id = service_principal_id
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.encrypted_credential = encrypted_credential
        self.credential = credential


class DynamicsSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Dynamics sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Required. "Upsert"
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
    :ivar ignore_null_values: The flag indicating whether ignore null values from input dataset
     (except key fields) during write operation. Default is false. Type: boolean (or Expression with
     resultType boolean).
    :vartype ignore_null_values: JSON
    :ivar alternate_key_name: The logical name of the alternate key which will be used when
     upserting records. Type: string (or Expression with resultType string).
    :vartype alternate_key_name: JSON
    :ivar bypass_business_logic_execution: Controls the bypass of Dataverse custom business logic.
     Type: string (or Expression with resultType string). Type: string (or Expression with
     resultType string).
    :vartype bypass_business_logic_execution: JSON
    :ivar bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype bypass_power_automate_flows: JSON
    """

    _validation = {
        "type": {"required": True},
        "write_behavior": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
        "alternate_key_name": {"key": "alternateKeyName", "type": "object"},
        "bypass_business_logic_execution": {"key": "bypassBusinessLogicExecution", "type": "object"},
        "bypass_power_automate_flows": {"key": "bypassPowerAutomateFlows", "type": "object"},
    }

    def __init__(
        self,
        *,
        write_behavior: Union[str, "_models.DynamicsSinkWriteBehavior"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        alternate_key_name: Optional[JSON] = None,
        bypass_business_logic_execution: Optional[JSON] = None,
        bypass_power_automate_flows: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Required. "Upsert"
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.DynamicsSinkWriteBehavior
        :keyword ignore_null_values: The flag indicating whether ignore null values from input dataset
         (except key fields) during write operation. Default is false. Type: boolean (or Expression with
         resultType boolean).
        :paramtype ignore_null_values: JSON
        :keyword alternate_key_name: The logical name of the alternate key which will be used when
         upserting records. Type: string (or Expression with resultType string).
        :paramtype alternate_key_name: JSON
        :keyword bypass_business_logic_execution: Controls the bypass of Dataverse custom business
         logic. Type: string (or Expression with resultType string). Type: string (or Expression with
         resultType string).
        :paramtype bypass_business_logic_execution: JSON
        :keyword bypass_power_automate_flows: Controls the bypass of Power Automate flows. Default is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype bypass_power_automate_flows: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DynamicsSink"
        self.write_behavior = write_behavior
        self.ignore_null_values = ignore_null_values
        self.alternate_key_name = alternate_key_name
        self.bypass_business_logic_execution = bypass_business_logic_execution
        self.bypass_power_automate_flows = bypass_power_automate_flows


class DynamicsSource(CopySource):
    """A copy activity Dynamics source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: FetchXML is a proprietary query language that is used in Microsoft Dynamics
     (online & on-premises). Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: FetchXML is a proprietary query language that is used in Microsoft Dynamics
         (online & on-premises). Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "DynamicsSource"
        self.query = query
        self.additional_columns = additional_columns


class EditTablesRequest(_serialization.Model):
    """EditTablesRequest.

    :ivar link_tables: Edit link tables request.
    :vartype link_tables: list[~azure.synapse.artifacts.models.LinkTableRequest]
    """

    _attribute_map = {
        "link_tables": {"key": "linkTables", "type": "[LinkTableRequest]"},
    }

    def __init__(self, *, link_tables: Optional[List["_models.LinkTableRequest"]] = None, **kwargs: Any) -> None:
        """
        :keyword link_tables: Edit link tables request.
        :paramtype link_tables: list[~azure.synapse.artifacts.models.LinkTableRequest]
        """
        super().__init__(**kwargs)
        self.link_tables = link_tables


class EloquaLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Eloqua server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the Eloqua server. (i.e. eloqua.example.com). Required.
    :vartype endpoint: JSON
    :ivar username: The site name and user name of your Eloqua account in the form:
     sitename/username. (i.e. Eloqua/Alice). Required.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "username": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        username: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        password: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the Eloqua server. (i.e. eloqua.example.com). Required.
        :paramtype endpoint: JSON
        :keyword username: The site name and user name of your Eloqua account in the form:
         sitename/username. (i.e. Eloqua/Alice). Required.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Eloqua"
        self.endpoint = endpoint
        self.username = username
        self.password = password
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class EloquaObjectDataset(Dataset):
    """Eloqua server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "EloquaObject"
        self.table_name = table_name


class EloquaSource(TabularSource):
    """A copy activity Eloqua server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "EloquaSource"
        self.query = query


class EncryptionDetails(_serialization.Model):
    """Details of the encryption associated with the workspace.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar double_encryption_enabled: Double Encryption enabled.
    :vartype double_encryption_enabled: bool
    :ivar cmk: Customer Managed Key Details.
    :vartype cmk: ~azure.synapse.artifacts.models.CustomerManagedKeyDetails
    """

    _validation = {
        "double_encryption_enabled": {"readonly": True},
    }

    _attribute_map = {
        "double_encryption_enabled": {"key": "doubleEncryptionEnabled", "type": "bool"},
        "cmk": {"key": "cmk", "type": "CustomerManagedKeyDetails"},
    }

    def __init__(self, *, cmk: Optional["_models.CustomerManagedKeyDetails"] = None, **kwargs: Any) -> None:
        """
        :keyword cmk: Customer Managed Key Details.
        :paramtype cmk: ~azure.synapse.artifacts.models.CustomerManagedKeyDetails
        """
        super().__init__(**kwargs)
        self.double_encryption_enabled = None
        self.cmk = cmk


class EntityReference(_serialization.Model):
    """The entity reference.

    :ivar type: The type of this referenced entity. Known values are: "IntegrationRuntimeReference"
     and "LinkedServiceReference".
    :vartype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeEntityReferenceType
    :ivar reference_name: The name of this referenced entity.
    :vartype reference_name: str
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.IntegrationRuntimeEntityReferenceType"]] = None,
        reference_name: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: The type of this referenced entity. Known values are:
         "IntegrationRuntimeReference" and "LinkedServiceReference".
        :paramtype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeEntityReferenceType
        :keyword reference_name: The name of this referenced entity.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class ErrorAdditionalInfo(_serialization.Model):
    """The resource management error additional info.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar type: The additional info type.
    :vartype type: str
    :ivar info: The additional info.
    :vartype info: JSON
    """

    _validation = {
        "type": {"readonly": True},
        "info": {"readonly": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "info": {"key": "info", "type": "object"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.type = None
        self.info = None


class ErrorContract(_serialization.Model):
    """Contains details when the response code indicates an error.

    :ivar error: The error details.
    :vartype error: ~azure.synapse.artifacts.models.ErrorResponse
    """

    _attribute_map = {
        "error": {"key": "error", "type": "ErrorResponse"},
    }

    def __init__(self, *, error: Optional["_models.ErrorResponse"] = None, **kwargs: Any) -> None:
        """
        :keyword error: The error details.
        :paramtype error: ~azure.synapse.artifacts.models.ErrorResponse
        """
        super().__init__(**kwargs)
        self.error = error


class ErrorResponse(_serialization.Model):
    """Common error response for all Azure Resource Manager APIs to return error details for failed
    operations. (This also follows the OData error response format.).

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar code: The error code.
    :vartype code: str
    :ivar message: The error message.
    :vartype message: str
    :ivar target: The error target.
    :vartype target: str
    :ivar details: The error details.
    :vartype details: list[~azure.synapse.artifacts.models.ErrorResponse]
    :ivar additional_info: The error additional info.
    :vartype additional_info: list[~azure.synapse.artifacts.models.ErrorAdditionalInfo]
    """

    _validation = {
        "code": {"readonly": True},
        "message": {"readonly": True},
        "target": {"readonly": True},
        "details": {"readonly": True},
        "additional_info": {"readonly": True},
    }

    _attribute_map = {
        "code": {"key": "code", "type": "str"},
        "message": {"key": "message", "type": "str"},
        "target": {"key": "target", "type": "str"},
        "details": {"key": "details", "type": "[ErrorResponse]"},
        "additional_info": {"key": "additionalInfo", "type": "[ErrorAdditionalInfo]"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.code = None
        self.message = None
        self.target = None
        self.details = None
        self.additional_info = None


class EvaluateDataFlowExpressionRequest(_serialization.Model):
    """Request body structure for data flow expression preview.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow_name: The data flow which contains the debug session.
    :vartype data_flow_name: str
    :ivar stream_name: The output stream name.
    :vartype stream_name: str
    :ivar row_limits: The row limit for preview request.
    :vartype row_limits: int
    :ivar expression: The expression for preview.
    :vartype expression: str
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow_name": {"key": "dataFlowName", "type": "str"},
        "stream_name": {"key": "streamName", "type": "str"},
        "row_limits": {"key": "rowLimits", "type": "int"},
        "expression": {"key": "expression", "type": "str"},
    }

    def __init__(
        self,
        *,
        session_id: Optional[str] = None,
        data_flow_name: Optional[str] = None,
        stream_name: Optional[str] = None,
        row_limits: Optional[int] = None,
        expression: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow_name: The data flow which contains the debug session.
        :paramtype data_flow_name: str
        :keyword stream_name: The output stream name.
        :paramtype stream_name: str
        :keyword row_limits: The row limit for preview request.
        :paramtype row_limits: int
        :keyword expression: The expression for preview.
        :paramtype expression: str
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.data_flow_name = data_flow_name
        self.stream_name = stream_name
        self.row_limits = row_limits
        self.expression = expression


class ExcelDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Excel dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the excel storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar sheet_name: The sheet name of excel file. Type: string (or Expression with resultType
     string).
    :vartype sheet_name: JSON
    :ivar sheet_index: The sheet index of excel file and default value is 0. Type: integer (or
     Expression with resultType integer).
    :vartype sheet_index: JSON
    :ivar range: The partial data of one sheet. Type: string (or Expression with resultType
     string).
    :vartype range: JSON
    :ivar first_row_as_header: When used as input, treat the first row of data as headers. When
     used as output,write the headers into the output as the first row of data. The default value is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype first_row_as_header: JSON
    :ivar compression: The data compression method used for the json dataset.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    :ivar null_value: The null value string. Type: string (or Expression with resultType string).
    :vartype null_value: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "sheet_name": {"key": "typeProperties.sheetName", "type": "object"},
        "sheet_index": {"key": "typeProperties.sheetIndex", "type": "object"},
        "range": {"key": "typeProperties.range", "type": "object"},
        "first_row_as_header": {"key": "typeProperties.firstRowAsHeader", "type": "object"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
        "null_value": {"key": "typeProperties.nullValue", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        sheet_name: Optional[JSON] = None,
        sheet_index: Optional[JSON] = None,
        range: Optional[JSON] = None,
        first_row_as_header: Optional[JSON] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        null_value: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the excel storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword sheet_name: The sheet name of excel file. Type: string (or Expression with resultType
         string).
        :paramtype sheet_name: JSON
        :keyword sheet_index: The sheet index of excel file and default value is 0. Type: integer (or
         Expression with resultType integer).
        :paramtype sheet_index: JSON
        :keyword range: The partial data of one sheet. Type: string (or Expression with resultType
         string).
        :paramtype range: JSON
        :keyword first_row_as_header: When used as input, treat the first row of data as headers. When
         used as output,write the headers into the output as the first row of data. The default value is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype first_row_as_header: JSON
        :keyword compression: The data compression method used for the json dataset.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        :keyword null_value: The null value string. Type: string (or Expression with resultType
         string).
        :paramtype null_value: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Excel"
        self.location = location
        self.sheet_name = sheet_name
        self.sheet_index = sheet_index
        self.range = range
        self.first_row_as_header = first_row_as_header
        self.compression = compression
        self.null_value = null_value


class ExcelSource(CopySource):
    """A copy activity excel source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Excel store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Excel store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "ExcelSource"
        self.store_settings = store_settings
        self.additional_columns = additional_columns


class ExecuteDataFlowActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Execute data flow activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar dataflow: Data flow reference. Required.
    :vartype dataflow: ~azure.synapse.artifacts.models.DataFlowReference
    :ivar staging: Staging info for execute data flow activity.
    :vartype staging: ~azure.synapse.artifacts.models.DataFlowStagingInfo
    :ivar integration_runtime: The integration runtime reference.
    :vartype integration_runtime: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar continuation_settings: Continuation settings for execute data flow activity.
    :vartype continuation_settings: ~azure.synapse.artifacts.models.ContinuationSettingsReference
    :ivar compute: Compute properties for data flow activity.
    :vartype compute: ~azure.synapse.artifacts.models.ExecuteDataFlowActivityTypePropertiesCompute
    :ivar trace_level: Trace level setting used for data flow monitoring output. Supported values
     are: 'coarse', 'fine', and 'none'. Type: string (or Expression with resultType string).
    :vartype trace_level: JSON
    :ivar continue_on_error: Continue on error setting used for data flow execution. Enables
     processing to continue if a sink fails. Type: boolean (or Expression with resultType boolean).
    :vartype continue_on_error: JSON
    :ivar run_concurrently: Concurrent run setting used for data flow execution. Allows sinks with
     the same save order to be processed concurrently. Type: boolean (or Expression with resultType
     boolean).
    :vartype run_concurrently: JSON
    :ivar source_staging_concurrency: Specify number of parallel staging for sources applicable to
     the sink. Type: integer (or Expression with resultType integer).
    :vartype source_staging_concurrency: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "dataflow": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "dataflow": {"key": "typeProperties.dataflow", "type": "DataFlowReference"},
        "staging": {"key": "typeProperties.staging", "type": "DataFlowStagingInfo"},
        "integration_runtime": {"key": "typeProperties.integrationRuntime", "type": "IntegrationRuntimeReference"},
        "continuation_settings": {
            "key": "typeProperties.continuationSettings",
            "type": "ContinuationSettingsReference",
        },
        "compute": {"key": "typeProperties.compute", "type": "ExecuteDataFlowActivityTypePropertiesCompute"},
        "trace_level": {"key": "typeProperties.traceLevel", "type": "object"},
        "continue_on_error": {"key": "typeProperties.continueOnError", "type": "object"},
        "run_concurrently": {"key": "typeProperties.runConcurrently", "type": "object"},
        "source_staging_concurrency": {"key": "typeProperties.sourceStagingConcurrency", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        dataflow: "_models.DataFlowReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        staging: Optional["_models.DataFlowStagingInfo"] = None,
        integration_runtime: Optional["_models.IntegrationRuntimeReference"] = None,
        continuation_settings: Optional["_models.ContinuationSettingsReference"] = None,
        compute: Optional["_models.ExecuteDataFlowActivityTypePropertiesCompute"] = None,
        trace_level: Optional[JSON] = None,
        continue_on_error: Optional[JSON] = None,
        run_concurrently: Optional[JSON] = None,
        source_staging_concurrency: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword dataflow: Data flow reference. Required.
        :paramtype dataflow: ~azure.synapse.artifacts.models.DataFlowReference
        :keyword staging: Staging info for execute data flow activity.
        :paramtype staging: ~azure.synapse.artifacts.models.DataFlowStagingInfo
        :keyword integration_runtime: The integration runtime reference.
        :paramtype integration_runtime: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword continuation_settings: Continuation settings for execute data flow activity.
        :paramtype continuation_settings: ~azure.synapse.artifacts.models.ContinuationSettingsReference
        :keyword compute: Compute properties for data flow activity.
        :paramtype compute:
         ~azure.synapse.artifacts.models.ExecuteDataFlowActivityTypePropertiesCompute
        :keyword trace_level: Trace level setting used for data flow monitoring output. Supported
         values are: 'coarse', 'fine', and 'none'. Type: string (or Expression with resultType string).
        :paramtype trace_level: JSON
        :keyword continue_on_error: Continue on error setting used for data flow execution. Enables
         processing to continue if a sink fails. Type: boolean (or Expression with resultType boolean).
        :paramtype continue_on_error: JSON
        :keyword run_concurrently: Concurrent run setting used for data flow execution. Allows sinks
         with the same save order to be processed concurrently. Type: boolean (or Expression with
         resultType boolean).
        :paramtype run_concurrently: JSON
        :keyword source_staging_concurrency: Specify number of parallel staging for sources applicable
         to the sink. Type: integer (or Expression with resultType integer).
        :paramtype source_staging_concurrency: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "ExecuteDataFlow"
        self.dataflow = dataflow
        self.staging = staging
        self.integration_runtime = integration_runtime
        self.continuation_settings = continuation_settings
        self.compute = compute
        self.trace_level = trace_level
        self.continue_on_error = continue_on_error
        self.run_concurrently = run_concurrently
        self.source_staging_concurrency = source_staging_concurrency


class ExecuteDataFlowActivityTypePropertiesCompute(_serialization.Model):
    """Compute properties for data flow activity.

    :ivar compute_type: Compute type of the cluster which will execute data flow job. Possible
     values include: 'General', 'MemoryOptimized', 'ComputeOptimized'. Type: string (or Expression
     with resultType string).
    :vartype compute_type: JSON
    :ivar core_count: Core count of the cluster which will execute data flow job. Supported values
     are: 8, 16, 32, 48, 80, 144 and 272. Type: integer (or Expression with resultType integer).
    :vartype core_count: JSON
    """

    _attribute_map = {
        "compute_type": {"key": "computeType", "type": "object"},
        "core_count": {"key": "coreCount", "type": "object"},
    }

    def __init__(
        self, *, compute_type: Optional[JSON] = None, core_count: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword compute_type: Compute type of the cluster which will execute data flow job. Possible
         values include: 'General', 'MemoryOptimized', 'ComputeOptimized'. Type: string (or Expression
         with resultType string).
        :paramtype compute_type: JSON
        :keyword core_count: Core count of the cluster which will execute data flow job. Supported
         values are: 8, 16, 32, 48, 80, 144 and 272. Type: integer (or Expression with resultType
         integer).
        :paramtype core_count: JSON
        """
        super().__init__(**kwargs)
        self.compute_type = compute_type
        self.core_count = core_count


class ExecutePipelineActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """Execute pipeline activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar pipeline: Pipeline reference. Required.
    :vartype pipeline: ~azure.synapse.artifacts.models.PipelineReference
    :ivar parameters: Pipeline parameters.
    :vartype parameters: dict[str, JSON]
    :ivar wait_on_completion: Defines whether activity execution will wait for the dependent
     pipeline execution to finish. Default is false.
    :vartype wait_on_completion: bool
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "pipeline": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "pipeline": {"key": "typeProperties.pipeline", "type": "PipelineReference"},
        "parameters": {"key": "typeProperties.parameters", "type": "{object}"},
        "wait_on_completion": {"key": "typeProperties.waitOnCompletion", "type": "bool"},
    }

    def __init__(
        self,
        *,
        name: str,
        pipeline: "_models.PipelineReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        parameters: Optional[Dict[str, JSON]] = None,
        wait_on_completion: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword pipeline: Pipeline reference. Required.
        :paramtype pipeline: ~azure.synapse.artifacts.models.PipelineReference
        :keyword parameters: Pipeline parameters.
        :paramtype parameters: dict[str, JSON]
        :keyword wait_on_completion: Defines whether activity execution will wait for the dependent
         pipeline execution to finish. Default is false.
        :paramtype wait_on_completion: bool
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "ExecutePipeline"
        self.pipeline = pipeline
        self.parameters = parameters
        self.wait_on_completion = wait_on_completion


class ExecuteSSISPackageActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Execute SSIS package activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar package_location: SSIS package location. Required.
    :vartype package_location: ~azure.synapse.artifacts.models.SSISPackageLocation
    :ivar runtime: Specifies the runtime to execute SSIS package. The value should be "x86" or
     "x64". Type: string (or Expression with resultType string).
    :vartype runtime: JSON
    :ivar logging_level: The logging level of SSIS package execution. Type: string (or Expression
     with resultType string).
    :vartype logging_level: JSON
    :ivar environment_path: The environment path to execute the SSIS package. Type: string (or
     Expression with resultType string).
    :vartype environment_path: JSON
    :ivar execution_credential: The package execution credential.
    :vartype execution_credential: ~azure.synapse.artifacts.models.SSISExecutionCredential
    :ivar connect_via: The integration runtime reference. Required.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar project_parameters: The project level parameters to execute the SSIS package.
    :vartype project_parameters: dict[str, ~azure.synapse.artifacts.models.SSISExecutionParameter]
    :ivar package_parameters: The package level parameters to execute the SSIS package.
    :vartype package_parameters: dict[str, ~azure.synapse.artifacts.models.SSISExecutionParameter]
    :ivar project_connection_managers: The project level connection managers to execute the SSIS
     package.
    :vartype project_connection_managers: dict[str, dict[str,
     ~azure.synapse.artifacts.models.SSISExecutionParameter]]
    :ivar package_connection_managers: The package level connection managers to execute the SSIS
     package.
    :vartype package_connection_managers: dict[str, dict[str,
     ~azure.synapse.artifacts.models.SSISExecutionParameter]]
    :ivar property_overrides: The property overrides to execute the SSIS package.
    :vartype property_overrides: dict[str, ~azure.synapse.artifacts.models.SSISPropertyOverride]
    :ivar log_location: SSIS package execution log location.
    :vartype log_location: ~azure.synapse.artifacts.models.SSISLogLocation
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "package_location": {"required": True},
        "connect_via": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "package_location": {"key": "typeProperties.packageLocation", "type": "SSISPackageLocation"},
        "runtime": {"key": "typeProperties.runtime", "type": "object"},
        "logging_level": {"key": "typeProperties.loggingLevel", "type": "object"},
        "environment_path": {"key": "typeProperties.environmentPath", "type": "object"},
        "execution_credential": {"key": "typeProperties.executionCredential", "type": "SSISExecutionCredential"},
        "connect_via": {"key": "typeProperties.connectVia", "type": "IntegrationRuntimeReference"},
        "project_parameters": {"key": "typeProperties.projectParameters", "type": "{SSISExecutionParameter}"},
        "package_parameters": {"key": "typeProperties.packageParameters", "type": "{SSISExecutionParameter}"},
        "project_connection_managers": {
            "key": "typeProperties.projectConnectionManagers",
            "type": "{{SSISExecutionParameter}}",
        },
        "package_connection_managers": {
            "key": "typeProperties.packageConnectionManagers",
            "type": "{{SSISExecutionParameter}}",
        },
        "property_overrides": {"key": "typeProperties.propertyOverrides", "type": "{SSISPropertyOverride}"},
        "log_location": {"key": "typeProperties.logLocation", "type": "SSISLogLocation"},
    }

    def __init__(
        self,
        *,
        name: str,
        package_location: "_models.SSISPackageLocation",
        connect_via: "_models.IntegrationRuntimeReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        runtime: Optional[JSON] = None,
        logging_level: Optional[JSON] = None,
        environment_path: Optional[JSON] = None,
        execution_credential: Optional["_models.SSISExecutionCredential"] = None,
        project_parameters: Optional[Dict[str, "_models.SSISExecutionParameter"]] = None,
        package_parameters: Optional[Dict[str, "_models.SSISExecutionParameter"]] = None,
        project_connection_managers: Optional[Dict[str, Dict[str, "_models.SSISExecutionParameter"]]] = None,
        package_connection_managers: Optional[Dict[str, Dict[str, "_models.SSISExecutionParameter"]]] = None,
        property_overrides: Optional[Dict[str, "_models.SSISPropertyOverride"]] = None,
        log_location: Optional["_models.SSISLogLocation"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword package_location: SSIS package location. Required.
        :paramtype package_location: ~azure.synapse.artifacts.models.SSISPackageLocation
        :keyword runtime: Specifies the runtime to execute SSIS package. The value should be "x86" or
         "x64". Type: string (or Expression with resultType string).
        :paramtype runtime: JSON
        :keyword logging_level: The logging level of SSIS package execution. Type: string (or
         Expression with resultType string).
        :paramtype logging_level: JSON
        :keyword environment_path: The environment path to execute the SSIS package. Type: string (or
         Expression with resultType string).
        :paramtype environment_path: JSON
        :keyword execution_credential: The package execution credential.
        :paramtype execution_credential: ~azure.synapse.artifacts.models.SSISExecutionCredential
        :keyword connect_via: The integration runtime reference. Required.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword project_parameters: The project level parameters to execute the SSIS package.
        :paramtype project_parameters: dict[str,
         ~azure.synapse.artifacts.models.SSISExecutionParameter]
        :keyword package_parameters: The package level parameters to execute the SSIS package.
        :paramtype package_parameters: dict[str,
         ~azure.synapse.artifacts.models.SSISExecutionParameter]
        :keyword project_connection_managers: The project level connection managers to execute the SSIS
         package.
        :paramtype project_connection_managers: dict[str, dict[str,
         ~azure.synapse.artifacts.models.SSISExecutionParameter]]
        :keyword package_connection_managers: The package level connection managers to execute the SSIS
         package.
        :paramtype package_connection_managers: dict[str, dict[str,
         ~azure.synapse.artifacts.models.SSISExecutionParameter]]
        :keyword property_overrides: The property overrides to execute the SSIS package.
        :paramtype property_overrides: dict[str, ~azure.synapse.artifacts.models.SSISPropertyOverride]
        :keyword log_location: SSIS package execution log location.
        :paramtype log_location: ~azure.synapse.artifacts.models.SSISLogLocation
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "ExecuteSSISPackage"
        self.package_location = package_location
        self.runtime = runtime
        self.logging_level = logging_level
        self.environment_path = environment_path
        self.execution_credential = execution_credential
        self.connect_via = connect_via
        self.project_parameters = project_parameters
        self.package_parameters = package_parameters
        self.project_connection_managers = project_connection_managers
        self.package_connection_managers = package_connection_managers
        self.property_overrides = property_overrides
        self.log_location = log_location


class ExposureControlRequest(_serialization.Model):
    """The exposure control request.

    :ivar feature_name: The feature name.
    :vartype feature_name: str
    :ivar feature_type: The feature type.
    :vartype feature_type: str
    """

    _attribute_map = {
        "feature_name": {"key": "featureName", "type": "str"},
        "feature_type": {"key": "featureType", "type": "str"},
    }

    def __init__(
        self, *, feature_name: Optional[str] = None, feature_type: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword feature_name: The feature name.
        :paramtype feature_name: str
        :keyword feature_type: The feature type.
        :paramtype feature_type: str
        """
        super().__init__(**kwargs)
        self.feature_name = feature_name
        self.feature_type = feature_type


class ExposureControlResponse(_serialization.Model):
    """The exposure control response.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar feature_name: The feature name.
    :vartype feature_name: str
    :ivar value: The feature value.
    :vartype value: str
    """

    _validation = {
        "feature_name": {"readonly": True},
        "value": {"readonly": True},
    }

    _attribute_map = {
        "feature_name": {"key": "featureName", "type": "str"},
        "value": {"key": "value", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.feature_name = None
        self.value = None


class Expression(_serialization.Model):
    """Azure Synapse expression definition.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Expression type. Required. "Expression"
    :vartype type: str or ~azure.synapse.artifacts.models.ExpressionType
    :ivar value: Expression value. Required.
    :vartype value: str
    """

    _validation = {
        "type": {"required": True},
        "value": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "value": {"key": "value", "type": "str"},
    }

    def __init__(self, *, type: Union[str, "_models.ExpressionType"], value: str, **kwargs: Any) -> None:
        """
        :keyword type: Expression type. Required. "Expression"
        :paramtype type: str or ~azure.synapse.artifacts.models.ExpressionType
        :keyword value: Expression value. Required.
        :paramtype value: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.value = value


class ExpressionV2(_serialization.Model):
    """Nested representation of a complex expression.

    :ivar type: Type of expressions supported by the system. Type: string. Known values are:
     "Constant", "Field", "Unary", "Binary", and "NAry".
    :vartype type: str or ~azure.synapse.artifacts.models.ExpressionV2Type
    :ivar value: Value for Constant/Field Type: object.
    :vartype value: JSON
    :ivar operators: Expression operator value Type: list of strings.
    :vartype operators: list[str]
    :ivar operands: List of nested expressions.
    :vartype operands: list[~azure.synapse.artifacts.models.ExpressionV2]
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "value": {"key": "value", "type": "object"},
        "operators": {"key": "operators", "type": "[str]"},
        "operands": {"key": "operands", "type": "[ExpressionV2]"},
    }

    def __init__(
        self,
        *,
        type: Optional[Union[str, "_models.ExpressionV2Type"]] = None,
        value: Optional[JSON] = None,
        operators: Optional[List[str]] = None,
        operands: Optional[List["_models.ExpressionV2"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Type of expressions supported by the system. Type: string. Known values are:
         "Constant", "Field", "Unary", "Binary", and "NAry".
        :paramtype type: str or ~azure.synapse.artifacts.models.ExpressionV2Type
        :keyword value: Value for Constant/Field Type: object.
        :paramtype value: JSON
        :keyword operators: Expression operator value Type: list of strings.
        :paramtype operators: list[str]
        :keyword operands: List of nested expressions.
        :paramtype operands: list[~azure.synapse.artifacts.models.ExpressionV2]
        """
        super().__init__(**kwargs)
        self.type = type
        self.value = value
        self.operators = operators
        self.operands = operands


class FailActivity(ControlActivity):
    """This activity will fail within its own scope and output a custom error message and error code.
    The error message and code can provided either as a string literal or as an expression that can
    be evaluated to a string at runtime. The activity scope can be the whole pipeline or a control
    activity (e.g. foreach, switch, until), if the fail activity is contained in it.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar message: The error message that surfaced in the Fail activity. It can be dynamic content
     that's evaluated to a non empty/blank string at runtime. Type: string (or Expression with
     resultType string). Required.
    :vartype message: JSON
    :ivar error_code: The error code that categorizes the error type of the Fail activity. It can
     be dynamic content that's evaluated to a non empty/blank string at runtime. Type: string (or
     Expression with resultType string). Required.
    :vartype error_code: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "message": {"required": True},
        "error_code": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "message": {"key": "typeProperties.message", "type": "object"},
        "error_code": {"key": "typeProperties.errorCode", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        message: JSON,
        error_code: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword message: The error message that surfaced in the Fail activity. It can be dynamic
         content that's evaluated to a non empty/blank string at runtime. Type: string (or Expression
         with resultType string). Required.
        :paramtype message: JSON
        :keyword error_code: The error code that categorizes the error type of the Fail activity. It
         can be dynamic content that's evaluated to a non empty/blank string at runtime. Type: string
         (or Expression with resultType string). Required.
        :paramtype error_code: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Fail"
        self.message = message
        self.error_code = error_code


class FileServerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """File system linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: Host name of the server. Type: string (or Expression with resultType string).
     Required.
    :vartype host: JSON
    :ivar user_id: User ID to logon the server. Type: string (or Expression with resultType
     string).
    :vartype user_id: JSON
    :ivar password: Password to logon the server.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "user_id": {"key": "typeProperties.userId", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user_id: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: Host name of the server. Type: string (or Expression with resultType string).
         Required.
        :paramtype host: JSON
        :keyword user_id: User ID to logon the server. Type: string (or Expression with resultType
         string).
        :paramtype user_id: JSON
        :keyword password: Password to logon the server.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "FileServer"
        self.host = host
        self.user_id = user_id
        self.password = password
        self.encrypted_credential = encrypted_credential


class FileServerLocation(DatasetLocation):
    """The location of file server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "FileServerLocation"


class FileServerReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """File server read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: FileServer wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: FileServer wildcardFileName. Type: string (or Expression with
     resultType string).
    :vartype wildcard_file_name: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar file_filter: Specify a filter to be used to select a subset of files in the folderPath
     rather than all files. Type: string (or Expression with resultType string).
    :vartype file_filter: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
        "file_filter": {"key": "fileFilter", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        file_filter: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: FileServer wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: FileServer wildcardFileName. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword file_filter: Specify a filter to be used to select a subset of files in the folderPath
         rather than all files. Type: string (or Expression with resultType string).
        :paramtype file_filter: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "FileServerReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.file_filter = file_filter


class FileServerWriteSettings(StoreWriteSettings):
    """File server write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "FileServerWriteSettings"


class FileShareDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """An on-premises file system dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar folder_path: The path of the on-premises file system. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: The name of the on-premises file system. Type: string (or Expression with
     resultType string).
    :vartype file_name: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar format: The format of the files.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar file_filter: Specify a filter to be used to select a subset of files in the folderPath
     rather than all files. Type: string (or Expression with resultType string).
    :vartype file_filter: JSON
    :ivar compression: The data compression method used for the file system.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "folder_path": {"key": "typeProperties.folderPath", "type": "object"},
        "file_name": {"key": "typeProperties.fileName", "type": "object"},
        "modified_datetime_start": {"key": "typeProperties.modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "typeProperties.modifiedDatetimeEnd", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "file_filter": {"key": "typeProperties.fileFilter", "type": "object"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        file_filter: Optional[JSON] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword folder_path: The path of the on-premises file system. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: The name of the on-premises file system. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword format: The format of the files.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword file_filter: Specify a filter to be used to select a subset of files in the folderPath
         rather than all files. Type: string (or Expression with resultType string).
        :paramtype file_filter: JSON
        :keyword compression: The data compression method used for the file system.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "FileShare"
        self.folder_path = folder_path
        self.file_name = file_name
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.format = format
        self.file_filter = file_filter
        self.compression = compression


class FileSystemSink(CopySink):
    """A copy activity file system sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "FileSystemSink"
        self.copy_behavior = copy_behavior


class FileSystemSource(CopySource):
    """A copy activity file system source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "FileSystemSource"
        self.recursive = recursive
        self.additional_columns = additional_columns


class FilterActivity(ControlActivity):
    """Filter and return results from input array based on the conditions.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar items: Input array on which filter should be applied. Required.
    :vartype items: ~azure.synapse.artifacts.models.Expression
    :ivar condition: Condition to be used for filtering the input. Required.
    :vartype condition: ~azure.synapse.artifacts.models.Expression
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "items": {"required": True},
        "condition": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "items": {"key": "typeProperties.items", "type": "Expression"},
        "condition": {"key": "typeProperties.condition", "type": "Expression"},
    }

    def __init__(
        self,
        *,
        name: str,
        items: "_models.Expression",
        condition: "_models.Expression",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword items: Input array on which filter should be applied. Required.
        :paramtype items: ~azure.synapse.artifacts.models.Expression
        :keyword condition: Condition to be used for filtering the input. Required.
        :paramtype condition: ~azure.synapse.artifacts.models.Expression
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Filter"
        self.items = items
        self.condition = condition


class Flowlet(DataFlow):
    """Data flow flowlet.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of data flow. Required.
    :vartype type: str
    :ivar description: The description of the data flow.
    :vartype description: str
    :ivar annotations: List of tags that can be used for describing the data flow.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this data flow is in. If not specified, Data flow will appear at
     the root level.
    :vartype folder: ~azure.synapse.artifacts.models.DataFlowFolder
    :ivar sources: List of sources in Flowlet.
    :vartype sources: list[~azure.synapse.artifacts.models.DataFlowSource]
    :ivar sinks: List of sinks in Flowlet.
    :vartype sinks: list[~azure.synapse.artifacts.models.DataFlowSink]
    :ivar transformations: List of transformations in Flowlet.
    :vartype transformations: list[~azure.synapse.artifacts.models.Transformation]
    :ivar script: Flowlet script.
    :vartype script: str
    :ivar script_lines: Flowlet script lines.
    :vartype script_lines: list[str]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DataFlowFolder"},
        "sources": {"key": "typeProperties.sources", "type": "[DataFlowSource]"},
        "sinks": {"key": "typeProperties.sinks", "type": "[DataFlowSink]"},
        "transformations": {"key": "typeProperties.transformations", "type": "[Transformation]"},
        "script": {"key": "typeProperties.script", "type": "str"},
        "script_lines": {"key": "typeProperties.scriptLines", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DataFlowFolder"] = None,
        sources: Optional[List["_models.DataFlowSource"]] = None,
        sinks: Optional[List["_models.DataFlowSink"]] = None,
        transformations: Optional[List["_models.Transformation"]] = None,
        script: Optional[str] = None,
        script_lines: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword description: The description of the data flow.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the data flow.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this data flow is in. If not specified, Data flow will appear
         at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DataFlowFolder
        :keyword sources: List of sources in Flowlet.
        :paramtype sources: list[~azure.synapse.artifacts.models.DataFlowSource]
        :keyword sinks: List of sinks in Flowlet.
        :paramtype sinks: list[~azure.synapse.artifacts.models.DataFlowSink]
        :keyword transformations: List of transformations in Flowlet.
        :paramtype transformations: list[~azure.synapse.artifacts.models.Transformation]
        :keyword script: Flowlet script.
        :paramtype script: str
        :keyword script_lines: Flowlet script lines.
        :paramtype script_lines: list[str]
        """
        super().__init__(description=description, annotations=annotations, folder=folder, **kwargs)
        self.type: str = "Flowlet"
        self.sources = sources
        self.sinks = sinks
        self.transformations = transformations
        self.script = script
        self.script_lines = script_lines


class ForEachActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """This activity is used for iterating over a collection and execute given activities.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar is_sequential: Should the loop be executed in sequence or in parallel (max 50).
    :vartype is_sequential: bool
    :ivar batch_count: Batch count to be used for controlling the number of parallel execution
     (when isSequential is set to false).
    :vartype batch_count: int
    :ivar items: Collection to iterate. Required.
    :vartype items: ~azure.synapse.artifacts.models.Expression
    :ivar activities: List of activities to execute . Required.
    :vartype activities: list[~azure.synapse.artifacts.models.Activity]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "batch_count": {"maximum": 50},
        "items": {"required": True},
        "activities": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "is_sequential": {"key": "typeProperties.isSequential", "type": "bool"},
        "batch_count": {"key": "typeProperties.batchCount", "type": "int"},
        "items": {"key": "typeProperties.items", "type": "Expression"},
        "activities": {"key": "typeProperties.activities", "type": "[Activity]"},
    }

    def __init__(
        self,
        *,
        name: str,
        items: "_models.Expression",
        activities: List["_models.Activity"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        is_sequential: Optional[bool] = None,
        batch_count: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword is_sequential: Should the loop be executed in sequence or in parallel (max 50).
        :paramtype is_sequential: bool
        :keyword batch_count: Batch count to be used for controlling the number of parallel execution
         (when isSequential is set to false).
        :paramtype batch_count: int
        :keyword items: Collection to iterate. Required.
        :paramtype items: ~azure.synapse.artifacts.models.Expression
        :keyword activities: List of activities to execute . Required.
        :paramtype activities: list[~azure.synapse.artifacts.models.Activity]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "ForEach"
        self.is_sequential = is_sequential
        self.batch_count = batch_count
        self.items = items
        self.activities = activities


class FtpReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Ftp read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Ftp wildcardFolderPath. Type: string (or Expression with resultType
     string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Ftp wildcardFileName. Type: string (or Expression with resultType
     string).
    :vartype wildcard_file_name: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar use_binary_transfer: Specify whether to use binary transfer mode for FTP stores. Type:
     boolean (or Expression with resultType boolean).
    :vartype use_binary_transfer: JSON
    :ivar disable_chunking: If true, disable parallel reading within each file. Default is false.
     Type: boolean (or Expression with resultType boolean).
    :vartype disable_chunking: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "use_binary_transfer": {"key": "useBinaryTransfer", "type": "object"},
        "disable_chunking": {"key": "disableChunking", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        use_binary_transfer: Optional[JSON] = None,
        disable_chunking: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Ftp wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Ftp wildcardFileName. Type: string (or Expression with resultType
         string).
        :paramtype wildcard_file_name: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword use_binary_transfer: Specify whether to use binary transfer mode for FTP stores. Type:
         boolean (or Expression with resultType boolean).
        :paramtype use_binary_transfer: JSON
        :keyword disable_chunking: If true, disable parallel reading within each file. Default is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype disable_chunking: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "FtpReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.file_list_path = file_list_path
        self.use_binary_transfer = use_binary_transfer
        self.disable_chunking = disable_chunking


class FtpServerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """A FTP server Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: Host name of the FTP server. Type: string (or Expression with resultType string).
     Required.
    :vartype host: JSON
    :ivar port: The TCP port number that the FTP server uses to listen for client connections.
     Default value is 21. Type: integer (or Expression with resultType integer), minimum: 0.
    :vartype port: JSON
    :ivar authentication_type: The authentication type to be used to connect to the FTP server.
     Known values are: "Basic" and "Anonymous".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.FtpAuthenticationType
    :ivar user_name: Username to logon the FTP server. Type: string (or Expression with resultType
     string).
    :vartype user_name: JSON
    :ivar password: Password to logon the FTP server.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar enable_ssl: If true, connect to the FTP server over SSL/TLS channel. Default value is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype enable_ssl: JSON
    :ivar enable_server_certificate_validation: If true, validate the FTP server SSL certificate
     when connect over SSL/TLS channel. Default value is true. Type: boolean (or Expression with
     resultType boolean).
    :vartype enable_server_certificate_validation: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.FtpAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        enable_ssl: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: Host name of the FTP server. Type: string (or Expression with resultType
         string). Required.
        :paramtype host: JSON
        :keyword port: The TCP port number that the FTP server uses to listen for client connections.
         Default value is 21. Type: integer (or Expression with resultType integer), minimum: 0.
        :paramtype port: JSON
        :keyword authentication_type: The authentication type to be used to connect to the FTP server.
         Known values are: "Basic" and "Anonymous".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.FtpAuthenticationType
        :keyword user_name: Username to logon the FTP server. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to logon the FTP server.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword enable_ssl: If true, connect to the FTP server over SSL/TLS channel. Default value is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_ssl: JSON
        :keyword enable_server_certificate_validation: If true, validate the FTP server SSL certificate
         when connect over SSL/TLS channel. Default value is true. Type: boolean (or Expression with
         resultType boolean).
        :paramtype enable_server_certificate_validation: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "FtpServer"
        self.host = host
        self.port = port
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.enable_ssl = enable_ssl
        self.enable_server_certificate_validation = enable_server_certificate_validation


class FtpServerLocation(DatasetLocation):
    """The location of ftp server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "FtpServerLocation"


class GetMetadataActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Activity to get metadata of dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar dataset: GetMetadata activity dataset reference. Required.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar field_list: Fields of metadata to get from dataset.
    :vartype field_list: list[JSON]
    :ivar store_settings: GetMetadata activity store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: GetMetadata activity format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.FormatReadSettings
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "dataset": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "dataset": {"key": "typeProperties.dataset", "type": "DatasetReference"},
        "field_list": {"key": "typeProperties.fieldList", "type": "[object]"},
        "store_settings": {"key": "typeProperties.storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "typeProperties.formatSettings", "type": "FormatReadSettings"},
    }

    def __init__(
        self,
        *,
        name: str,
        dataset: "_models.DatasetReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        field_list: Optional[List[JSON]] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.FormatReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword dataset: GetMetadata activity dataset reference. Required.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword field_list: Fields of metadata to get from dataset.
        :paramtype field_list: list[JSON]
        :keyword store_settings: GetMetadata activity store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: GetMetadata activity format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.FormatReadSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "GetMetadata"
        self.dataset = dataset
        self.field_list = field_list
        self.store_settings = store_settings
        self.format_settings = format_settings


class GetSsisObjectMetadataRequest(_serialization.Model):
    """The request payload of get SSIS object metadata.

    :ivar metadata_path: Metadata path.
    :vartype metadata_path: str
    """

    _attribute_map = {
        "metadata_path": {"key": "metadataPath", "type": "str"},
    }

    def __init__(self, *, metadata_path: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword metadata_path: Metadata path.
        :paramtype metadata_path: str
        """
        super().__init__(**kwargs)
        self.metadata_path = metadata_path


class GitHubAccessTokenRequest(_serialization.Model):
    """GitHubAccessTokenRequest.

    All required parameters must be populated in order to send to Azure.

    :ivar git_hub_client_id: The GitHub Client Id. Required.
    :vartype git_hub_client_id: str
    :ivar git_hub_access_code: The GitHub Access code. Required.
    :vartype git_hub_access_code: str
    :ivar git_hub_access_token_base_url: The GitHub access token base URL. Required.
    :vartype git_hub_access_token_base_url: str
    """

    _validation = {
        "git_hub_client_id": {"required": True},
        "git_hub_access_code": {"required": True},
        "git_hub_access_token_base_url": {"required": True},
    }

    _attribute_map = {
        "git_hub_client_id": {"key": "gitHubClientId", "type": "str"},
        "git_hub_access_code": {"key": "gitHubAccessCode", "type": "str"},
        "git_hub_access_token_base_url": {"key": "gitHubAccessTokenBaseUrl", "type": "str"},
    }

    def __init__(
        self, *, git_hub_client_id: str, git_hub_access_code: str, git_hub_access_token_base_url: str, **kwargs: Any
    ) -> None:
        """
        :keyword git_hub_client_id: The GitHub Client Id. Required.
        :paramtype git_hub_client_id: str
        :keyword git_hub_access_code: The GitHub Access code. Required.
        :paramtype git_hub_access_code: str
        :keyword git_hub_access_token_base_url: The GitHub access token base URL. Required.
        :paramtype git_hub_access_token_base_url: str
        """
        super().__init__(**kwargs)
        self.git_hub_client_id = git_hub_client_id
        self.git_hub_access_code = git_hub_access_code
        self.git_hub_access_token_base_url = git_hub_access_token_base_url


class GitHubAccessTokenResponse(_serialization.Model):
    """GitHubAccessTokenResponse.

    :ivar git_hub_access_token:
    :vartype git_hub_access_token: str
    """

    _attribute_map = {
        "git_hub_access_token": {"key": "gitHubAccessToken", "type": "str"},
    }

    def __init__(self, *, git_hub_access_token: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword git_hub_access_token:
        :paramtype git_hub_access_token: str
        """
        super().__init__(**kwargs)
        self.git_hub_access_token = git_hub_access_token


class GitHubClientSecret(_serialization.Model):
    """Client secret information for factory's bring your own app repository configuration.

    :ivar byoa_secret_akv_url: Bring your own app client secret AKV URL.
    :vartype byoa_secret_akv_url: str
    :ivar byoa_secret_name: Bring your own app client secret name in AKV.
    :vartype byoa_secret_name: str
    """

    _attribute_map = {
        "byoa_secret_akv_url": {"key": "byoaSecretAkvUrl", "type": "str"},
        "byoa_secret_name": {"key": "byoaSecretName", "type": "str"},
    }

    def __init__(
        self, *, byoa_secret_akv_url: Optional[str] = None, byoa_secret_name: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword byoa_secret_akv_url: Bring your own app client secret AKV URL.
        :paramtype byoa_secret_akv_url: str
        :keyword byoa_secret_name: Bring your own app client secret name in AKV.
        :paramtype byoa_secret_name: str
        """
        super().__init__(**kwargs)
        self.byoa_secret_akv_url = byoa_secret_akv_url
        self.byoa_secret_name = byoa_secret_name


class GoogleAdWordsLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Google AdWords service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: (Deprecated) Properties used to connect to GoogleAds. It is
     mutually exclusive with any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar client_customer_id: The Client customer ID of the AdWords account that you want to fetch
     report data for.
    :vartype client_customer_id: JSON
    :ivar developer_token: The developer token associated with the manager account that you use to
     grant access to the AdWords API.
    :vartype developer_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
     ServiceAuthentication can only be used on self-hosted IR. Known values are:
     "ServiceAuthentication" and "UserAuthentication".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.GoogleAdWordsAuthenticationType
    :ivar refresh_token: The refresh token obtained from Google for authorizing access to AdWords
     for UserAuthentication.
    :vartype refresh_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar client_id: The client id of the google application used to acquire the refresh token.
     Type: string (or Expression with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret of the google application used to acquire the refresh
     token.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar email: The service account email ID that is used for ServiceAuthentication and can only
     be used on self-hosted IR.
    :vartype email: JSON
    :ivar key_file_path: (Deprecated) The full path to the .p12 key file that is used to
     authenticate the service account email address and can only be used on self-hosted IR.
    :vartype key_file_path: JSON
    :ivar trusted_cert_path: (Deprecated) The full path of the .pem file containing trusted CA
     certificates for verifying the server when connecting over SSL. This property can only be set
     when using SSL on self-hosted IR. The default value is the cacerts.pem file installed with the
     IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: (Deprecated) Specifies whether to use a CA certificate from the
     system trust store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar private_key: The private key that is used to authenticate the service account email
     address and can only be used on self-hosted IR.
    :vartype private_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar login_customer_id: The customer ID of the Google Ads Manager account through which you
     want to fetch report data of specific Customer.
    :vartype login_customer_id: JSON
    :ivar google_ads_api_version: The Google Ads API major version such as v14. The supported major
     versions could be found on https://developers.google.com/google-ads/api/docs/release-notes.
    :vartype google_ads_api_version: JSON
    :ivar support_legacy_data_types: Specifies whether to use the legacy data type mappings, which
     maps float, int32 and int64 from Google to string. Do not set this to true unless you want to
     keep backward compatibility with legacy driver's data type mappings. Type: boolean (or
     Expression with resultType boolean).
    :vartype support_legacy_data_types: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "client_customer_id": {"key": "typeProperties.clientCustomerID", "type": "object"},
        "developer_token": {"key": "typeProperties.developerToken", "type": "SecretBase"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "refresh_token": {"key": "typeProperties.refreshToken", "type": "SecretBase"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "email": {"key": "typeProperties.email", "type": "object"},
        "key_file_path": {"key": "typeProperties.keyFilePath", "type": "object"},
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "private_key": {"key": "typeProperties.privateKey", "type": "SecretBase"},
        "login_customer_id": {"key": "typeProperties.loginCustomerID", "type": "object"},
        "google_ads_api_version": {"key": "typeProperties.googleAdsApiVersion", "type": "object"},
        "support_legacy_data_types": {"key": "typeProperties.supportLegacyDataTypes", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        client_customer_id: Optional[JSON] = None,
        developer_token: Optional["_models.SecretBase"] = None,
        authentication_type: Optional[Union[str, "_models.GoogleAdWordsAuthenticationType"]] = None,
        refresh_token: Optional["_models.SecretBase"] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        email: Optional[JSON] = None,
        key_file_path: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        private_key: Optional["_models.SecretBase"] = None,
        login_customer_id: Optional[JSON] = None,
        google_ads_api_version: Optional[JSON] = None,
        support_legacy_data_types: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: (Deprecated) Properties used to connect to GoogleAds. It is
         mutually exclusive with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword client_customer_id: The Client customer ID of the AdWords account that you want to
         fetch report data for.
        :paramtype client_customer_id: JSON
        :keyword developer_token: The developer token associated with the manager account that you use
         to grant access to the AdWords API.
        :paramtype developer_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
         ServiceAuthentication can only be used on self-hosted IR. Known values are:
         "ServiceAuthentication" and "UserAuthentication".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.GoogleAdWordsAuthenticationType
        :keyword refresh_token: The refresh token obtained from Google for authorizing access to
         AdWords for UserAuthentication.
        :paramtype refresh_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword client_id: The client id of the google application used to acquire the refresh token.
         Type: string (or Expression with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret of the google application used to acquire the refresh
         token.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword email: The service account email ID that is used for ServiceAuthentication and can
         only be used on self-hosted IR.
        :paramtype email: JSON
        :keyword key_file_path: (Deprecated) The full path to the .p12 key file that is used to
         authenticate the service account email address and can only be used on self-hosted IR.
        :paramtype key_file_path: JSON
        :keyword trusted_cert_path: (Deprecated) The full path of the .pem file containing trusted CA
         certificates for verifying the server when connecting over SSL. This property can only be set
         when using SSL on self-hosted IR. The default value is the cacerts.pem file installed with the
         IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: (Deprecated) Specifies whether to use a CA certificate from
         the system trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword private_key: The private key that is used to authenticate the service account email
         address and can only be used on self-hosted IR.
        :paramtype private_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword login_customer_id: The customer ID of the Google Ads Manager account through which you
         want to fetch report data of specific Customer.
        :paramtype login_customer_id: JSON
        :keyword google_ads_api_version: The Google Ads API major version such as v14. The supported
         major versions could be found on
         https://developers.google.com/google-ads/api/docs/release-notes.
        :paramtype google_ads_api_version: JSON
        :keyword support_legacy_data_types: Specifies whether to use the legacy data type mappings,
         which maps float, int32 and int64 from Google to string. Do not set this to true unless you
         want to keep backward compatibility with legacy driver's data type mappings. Type: boolean (or
         Expression with resultType boolean).
        :paramtype support_legacy_data_types: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "GoogleAdWords"
        self.connection_properties = connection_properties
        self.client_customer_id = client_customer_id
        self.developer_token = developer_token
        self.authentication_type = authentication_type
        self.refresh_token = refresh_token
        self.client_id = client_id
        self.client_secret = client_secret
        self.email = email
        self.key_file_path = key_file_path
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.private_key = private_key
        self.login_customer_id = login_customer_id
        self.google_ads_api_version = google_ads_api_version
        self.support_legacy_data_types = support_legacy_data_types
        self.encrypted_credential = encrypted_credential


class GoogleAdWordsObjectDataset(Dataset):
    """Google AdWords service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "GoogleAdWordsObject"
        self.table_name = table_name


class GoogleAdWordsSource(TabularSource):
    """A copy activity Google AdWords service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "GoogleAdWordsSource"
        self.query = query


class GoogleBigQueryLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Google BigQuery service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar project: The default BigQuery project to query against. Required.
    :vartype project: JSON
    :ivar additional_projects: A comma-separated list of public BigQuery projects to access.
    :vartype additional_projects: JSON
    :ivar request_google_drive_scope: Whether to request access to Google Drive. Allowing Google
     Drive access enables support for federated tables that combine BigQuery data with data from
     Google Drive. The default value is false.
    :vartype request_google_drive_scope: JSON
    :ivar authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
     ServiceAuthentication can only be used on self-hosted IR. Required. Known values are:
     "ServiceAuthentication" and "UserAuthentication".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.GoogleBigQueryAuthenticationType
    :ivar refresh_token: The refresh token obtained from Google for authorizing access to BigQuery
     for UserAuthentication.
    :vartype refresh_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar client_id: The client id of the google application used to acquire the refresh token.
     Type: string (or Expression with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret of the google application used to acquire the refresh
     token.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar email: The service account email ID that is used for ServiceAuthentication and can only
     be used on self-hosted IR.
    :vartype email: JSON
    :ivar key_file_path: The full path to the .p12 key file that is used to authenticate the
     service account email address and can only be used on self-hosted IR.
    :vartype key_file_path: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "project": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "project": {"key": "typeProperties.project", "type": "object"},
        "additional_projects": {"key": "typeProperties.additionalProjects", "type": "object"},
        "request_google_drive_scope": {"key": "typeProperties.requestGoogleDriveScope", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "refresh_token": {"key": "typeProperties.refreshToken", "type": "SecretBase"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "email": {"key": "typeProperties.email", "type": "object"},
        "key_file_path": {"key": "typeProperties.keyFilePath", "type": "object"},
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        project: JSON,
        authentication_type: Union[str, "_models.GoogleBigQueryAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        additional_projects: Optional[JSON] = None,
        request_google_drive_scope: Optional[JSON] = None,
        refresh_token: Optional["_models.SecretBase"] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        email: Optional[JSON] = None,
        key_file_path: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword project: The default BigQuery project to query against. Required.
        :paramtype project: JSON
        :keyword additional_projects: A comma-separated list of public BigQuery projects to access.
        :paramtype additional_projects: JSON
        :keyword request_google_drive_scope: Whether to request access to Google Drive. Allowing Google
         Drive access enables support for federated tables that combine BigQuery data with data from
         Google Drive. The default value is false.
        :paramtype request_google_drive_scope: JSON
        :keyword authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
         ServiceAuthentication can only be used on self-hosted IR. Required. Known values are:
         "ServiceAuthentication" and "UserAuthentication".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.GoogleBigQueryAuthenticationType
        :keyword refresh_token: The refresh token obtained from Google for authorizing access to
         BigQuery for UserAuthentication.
        :paramtype refresh_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword client_id: The client id of the google application used to acquire the refresh token.
         Type: string (or Expression with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret of the google application used to acquire the refresh
         token.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword email: The service account email ID that is used for ServiceAuthentication and can
         only be used on self-hosted IR.
        :paramtype email: JSON
        :keyword key_file_path: The full path to the .p12 key file that is used to authenticate the
         service account email address and can only be used on self-hosted IR.
        :paramtype key_file_path: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "GoogleBigQuery"
        self.project = project
        self.additional_projects = additional_projects
        self.request_google_drive_scope = request_google_drive_scope
        self.authentication_type = authentication_type
        self.refresh_token = refresh_token
        self.client_id = client_id
        self.client_secret = client_secret
        self.email = email
        self.key_file_path = key_file_path
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.encrypted_credential = encrypted_credential


class GoogleBigQueryObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Google BigQuery service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using database + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Google BigQuery. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar dataset: The database name of the Google BigQuery. Type: string (or Expression with
     resultType string).
    :vartype dataset: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "dataset": {"key": "typeProperties.dataset", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        dataset: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using database + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Google BigQuery. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        :keyword dataset: The database name of the Google BigQuery. Type: string (or Expression with
         resultType string).
        :paramtype dataset: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "GoogleBigQueryObject"
        self.table_name = table_name
        self.table = table
        self.dataset = dataset


class GoogleBigQuerySource(TabularSource):
    """A copy activity Google BigQuery service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "GoogleBigQuerySource"
        self.query = query


class GoogleBigQueryV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Google BigQuery service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar project_id: The default BigQuery project id to query against. Required.
    :vartype project_id: JSON
    :ivar authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
     Required. Known values are: "ServiceAuthentication" and "UserAuthentication".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.GoogleBigQueryV2AuthenticationType
    :ivar client_id: The client id of the google application used to acquire the refresh token.
     Type: string (or Expression with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret of the google application used to acquire the refresh
     token.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar refresh_token: The refresh token obtained from Google for authorizing access to BigQuery
     for UserAuthentication.
    :vartype refresh_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar key_file_content: The content of the .json key file that is used to authenticate the
     service account.
    :vartype key_file_content: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
        "project_id": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "project_id": {"key": "typeProperties.projectId", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "refresh_token": {"key": "typeProperties.refreshToken", "type": "SecretBase"},
        "key_file_content": {"key": "typeProperties.keyFileContent", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        project_id: JSON,
        authentication_type: Union[str, "_models.GoogleBigQueryV2AuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        refresh_token: Optional["_models.SecretBase"] = None,
        key_file_content: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword project_id: The default BigQuery project id to query against. Required.
        :paramtype project_id: JSON
        :keyword authentication_type: The OAuth 2.0 authentication mechanism used for authentication.
         Required. Known values are: "ServiceAuthentication" and "UserAuthentication".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.GoogleBigQueryV2AuthenticationType
        :keyword client_id: The client id of the google application used to acquire the refresh token.
         Type: string (or Expression with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret of the google application used to acquire the refresh
         token.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword refresh_token: The refresh token obtained from Google for authorizing access to
         BigQuery for UserAuthentication.
        :paramtype refresh_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword key_file_content: The content of the .json key file that is used to authenticate the
         service account.
        :paramtype key_file_content: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "GoogleBigQueryV2"
        self.project_id = project_id
        self.authentication_type = authentication_type
        self.client_id = client_id
        self.client_secret = client_secret
        self.refresh_token = refresh_token
        self.key_file_content = key_file_content
        self.encrypted_credential = encrypted_credential


class GoogleBigQueryV2ObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Google BigQuery service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table: The table name of the Google BigQuery. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar dataset: The database name of the Google BigQuery. Type: string (or Expression with
     resultType string).
    :vartype dataset: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "dataset": {"key": "typeProperties.dataset", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table: Optional[JSON] = None,
        dataset: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table: The table name of the Google BigQuery. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        :keyword dataset: The database name of the Google BigQuery. Type: string (or Expression with
         resultType string).
        :paramtype dataset: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "GoogleBigQueryV2Object"
        self.table = table
        self.dataset = dataset


class GoogleBigQueryV2Source(TabularSource):
    """A copy activity Google BigQuery service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "GoogleBigQueryV2Source"
        self.query = query


class GoogleCloudStorageLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Google Cloud Storage.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar access_key_id: The access key identifier of the Google Cloud Storage Identity and Access
     Management (IAM) user. Type: string (or Expression with resultType string).
    :vartype access_key_id: JSON
    :ivar secret_access_key: The secret access key of the Google Cloud Storage Identity and Access
     Management (IAM) user.
    :vartype secret_access_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_url: This value specifies the endpoint to access with the Google Cloud Storage
     Connector. This is an optional property; change it only if you want to try a different service
     endpoint or want to switch between https and http. Type: string (or Expression with resultType
     string).
    :vartype service_url: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "access_key_id": {"key": "typeProperties.accessKeyId", "type": "object"},
        "secret_access_key": {"key": "typeProperties.secretAccessKey", "type": "SecretBase"},
        "service_url": {"key": "typeProperties.serviceUrl", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        access_key_id: Optional[JSON] = None,
        secret_access_key: Optional["_models.SecretBase"] = None,
        service_url: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword access_key_id: The access key identifier of the Google Cloud Storage Identity and
         Access Management (IAM) user. Type: string (or Expression with resultType string).
        :paramtype access_key_id: JSON
        :keyword secret_access_key: The secret access key of the Google Cloud Storage Identity and
         Access Management (IAM) user.
        :paramtype secret_access_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_url: This value specifies the endpoint to access with the Google Cloud Storage
         Connector. This is an optional property; change it only if you want to try a different service
         endpoint or want to switch between https and http. Type: string (or Expression with resultType
         string).
        :paramtype service_url: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "GoogleCloudStorage"
        self.access_key_id = access_key_id
        self.secret_access_key = secret_access_key
        self.service_url = service_url
        self.encrypted_credential = encrypted_credential


class GoogleCloudStorageLocation(DatasetLocation):
    """The location of Google Cloud Storage dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar bucket_name: Specify the bucketName of Google Cloud Storage. Type: string (or Expression
     with resultType string).
    :vartype bucket_name: JSON
    :ivar version: Specify the version of Google Cloud Storage. Type: string (or Expression with
     resultType string).
    :vartype version: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
        "bucket_name": {"key": "bucketName", "type": "object"},
        "version": {"key": "version", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        bucket_name: Optional[JSON] = None,
        version: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword bucket_name: Specify the bucketName of Google Cloud Storage. Type: string (or
         Expression with resultType string).
        :paramtype bucket_name: JSON
        :keyword version: Specify the version of Google Cloud Storage. Type: string (or Expression with
         resultType string).
        :paramtype version: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "GoogleCloudStorageLocation"
        self.bucket_name = bucket_name
        self.version = version


class GoogleCloudStorageReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Google Cloud Storage read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Google Cloud Storage wildcardFolderPath. Type: string (or
     Expression with resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Google Cloud Storage wildcardFileName. Type: string (or Expression
     with resultType string).
    :vartype wildcard_file_name: JSON
    :ivar prefix: The prefix filter for the Google Cloud Storage object name. Type: string (or
     Expression with resultType string).
    :vartype prefix: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "prefix": {"key": "prefix", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        prefix: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Google Cloud Storage wildcardFolderPath. Type: string (or
         Expression with resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Google Cloud Storage wildcardFileName. Type: string (or Expression
         with resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword prefix: The prefix filter for the Google Cloud Storage object name. Type: string (or
         Expression with resultType string).
        :paramtype prefix: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "GoogleCloudStorageReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.prefix = prefix
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class GoogleSheetsLinkedService(LinkedService):
    """Linked service for GoogleSheets.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar api_token: The api token for the GoogleSheets source. Required.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "api_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        api_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword api_token: The api token for the GoogleSheets source. Required.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "GoogleSheets"
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class GreenplumLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Greenplum Database linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar pwd: The Azure key vault secret reference of password in connection string.
    :vartype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar authentication_type: The authentication type to use. Type: string. Only used for V2.
     "Basic"
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.GreenplumAuthenticationType
    :ivar host: Host name for connection. Type: string. Only used for V2.
    :vartype host: JSON
    :ivar port: The port for the connection. Type: integer. Only used for V2.
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string. Only used for V2.
    :vartype username: JSON
    :ivar database: Database name for connection. Type: string. Only used for V2.
    :vartype database: JSON
    :ivar ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
     require, 4: verify-ca, 5: verify-full. Type: integer. Only used for V2.
    :vartype ssl_mode: JSON
    :ivar connection_timeout: The time to wait (in seconds) while trying to establish a connection
     before terminating the attempt and generating an error. Type: integer. Only used for V2.
    :vartype connection_timeout: JSON
    :ivar command_timeout: The time to wait (in seconds) while trying to execute a command before
     terminating the attempt and generating an error. Set to zero for infinity. Type: integer. Only
     used for V2.
    :vartype command_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "pwd": {"key": "typeProperties.pwd", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "connection_timeout": {"key": "typeProperties.connectionTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        pwd: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.GreenplumAuthenticationType"]] = None,
        host: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        database: Optional[JSON] = None,
        ssl_mode: Optional[JSON] = None,
        connection_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword pwd: The Azure key vault secret reference of password in connection string.
        :paramtype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword authentication_type: The authentication type to use. Type: string. Only used for V2.
         "Basic"
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.GreenplumAuthenticationType
        :keyword host: Host name for connection. Type: string. Only used for V2.
        :paramtype host: JSON
        :keyword port: The port for the connection. Type: integer. Only used for V2.
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string. Only used for V2.
        :paramtype username: JSON
        :keyword database: Database name for connection. Type: string. Only used for V2.
        :paramtype database: JSON
        :keyword ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
         require, 4: verify-ca, 5: verify-full. Type: integer. Only used for V2.
        :paramtype ssl_mode: JSON
        :keyword connection_timeout: The time to wait (in seconds) while trying to establish a
         connection before terminating the attempt and generating an error. Type: integer. Only used for
         V2.
        :paramtype connection_timeout: JSON
        :keyword command_timeout: The time to wait (in seconds) while trying to execute a command
         before terminating the attempt and generating an error. Set to zero for infinity. Type:
         integer. Only used for V2.
        :paramtype command_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Greenplum"
        self.connection_string = connection_string
        self.pwd = pwd
        self.encrypted_credential = encrypted_credential
        self.authentication_type = authentication_type
        self.host = host
        self.port = port
        self.username = username
        self.database = database
        self.ssl_mode = ssl_mode
        self.connection_timeout = connection_timeout
        self.command_timeout = command_timeout


class GreenplumSource(TabularSource):
    """A copy activity Greenplum Database source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "GreenplumSource"
        self.query = query


class GreenplumTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Greenplum Database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of Greenplum. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of Greenplum. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of Greenplum. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of Greenplum. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "GreenplumTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class HBaseLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """HBase server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The IP address or host name of the HBase server. (i.e. 192.168.222.160). Required.
    :vartype host: JSON
    :ivar port: The TCP port that the HBase instance uses to listen for client connections. The
     default value is 9090.
    :vartype port: JSON
    :ivar http_path: The partial URL corresponding to the HBase server. (i.e.
     /gateway/sandbox/hbase/version).
    :vartype http_path: JSON
    :ivar authentication_type: The authentication mechanism to use to connect to the HBase server.
     Required. Known values are: "Anonymous" and "Basic".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.HBaseAuthenticationType
    :ivar username: The user name used to connect to the HBase instance.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false.
    :vartype enable_ssl: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false.
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "http_path": {"key": "typeProperties.httpPath", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        authentication_type: Union[str, "_models.HBaseAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        http_path: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        enable_ssl: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The IP address or host name of the HBase server. (i.e. 192.168.222.160).
         Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the HBase instance uses to listen for client connections. The
         default value is 9090.
        :paramtype port: JSON
        :keyword http_path: The partial URL corresponding to the HBase server. (i.e.
         /gateway/sandbox/hbase/version).
        :paramtype http_path: JSON
        :keyword authentication_type: The authentication mechanism to use to connect to the HBase
         server. Required. Known values are: "Anonymous" and "Basic".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.HBaseAuthenticationType
        :keyword username: The user name used to connect to the HBase instance.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false.
        :paramtype enable_ssl: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "HBase"
        self.host = host
        self.port = port
        self.http_path = http_path
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.enable_ssl = enable_ssl
        self.trusted_cert_path = trusted_cert_path
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class HBaseObjectDataset(Dataset):
    """HBase server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "HBaseObject"
        self.table_name = table_name


class HBaseSource(TabularSource):
    """A copy activity HBase server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "HBaseSource"
        self.query = query


class HdfsLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Hadoop Distributed File System (HDFS) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The URL of the HDFS service endpoint, e.g. http://myhostname:50070/webhdfs/v1 .
     Type: string (or Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the HDFS. Possible values
     are: Anonymous and Windows. Type: string (or Expression with resultType string).
    :vartype authentication_type: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar user_name: User name for Windows authentication. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password for Windows authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The URL of the HDFS service endpoint, e.g. http://myhostname:50070/webhdfs/v1 .
         Type: string (or Expression with resultType string). Required.
        :paramtype url: JSON
        :keyword authentication_type: Type of authentication used to connect to the HDFS. Possible
         values are: Anonymous and Windows. Type: string (or Expression with resultType string).
        :paramtype authentication_type: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword user_name: User name for Windows authentication. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password for Windows authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Hdfs"
        self.url = url
        self.authentication_type = authentication_type
        self.encrypted_credential = encrypted_credential
        self.user_name = user_name
        self.password = password


class HdfsLocation(DatasetLocation):
    """The location of HDFS.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "HdfsLocation"


class HdfsReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """HDFS read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: HDFS wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: HDFS wildcardFileName. Type: string (or Expression with resultType
     string).
    :vartype wildcard_file_name: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar distcp_settings: Specifies Distcp-related settings.
    :vartype distcp_settings: ~azure.synapse.artifacts.models.DistcpSettings
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
        "distcp_settings": {"key": "distcpSettings", "type": "DistcpSettings"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        distcp_settings: Optional["_models.DistcpSettings"] = None,
        delete_files_after_completion: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: HDFS wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: HDFS wildcardFileName. Type: string (or Expression with resultType
         string).
        :paramtype wildcard_file_name: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword distcp_settings: Specifies Distcp-related settings.
        :paramtype distcp_settings: ~azure.synapse.artifacts.models.DistcpSettings
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "HdfsReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.distcp_settings = distcp_settings
        self.delete_files_after_completion = delete_files_after_completion


class HdfsSource(CopySource):
    """A copy activity HDFS source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar distcp_settings: Specifies Distcp-related settings.
    :vartype distcp_settings: ~azure.synapse.artifacts.models.DistcpSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "distcp_settings": {"key": "distcpSettings", "type": "DistcpSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        distcp_settings: Optional["_models.DistcpSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword distcp_settings: Specifies Distcp-related settings.
        :paramtype distcp_settings: ~azure.synapse.artifacts.models.DistcpSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "HdfsSource"
        self.recursive = recursive
        self.distcp_settings = distcp_settings


class HDInsightHiveActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """HDInsight Hive activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar storage_linked_services: Storage linked service references.
    :vartype storage_linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar arguments: User specified arguments to HDInsightActivity.
    :vartype arguments: list[JSON]
    :ivar get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
    :vartype get_debug_info: str or
     ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
    :ivar script_path: Script path. Type: string (or Expression with resultType string).
    :vartype script_path: JSON
    :ivar script_linked_service: Script linked service reference.
    :vartype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar defines: Allows user to specify defines for Hive job request.
    :vartype defines: dict[str, JSON]
    :ivar variables: User specified arguments under hivevar namespace.
    :vartype variables: list[JSON]
    :ivar query_timeout: Query timeout value (in minutes).  Effective when the HDInsight cluster is
     with ESP (Enterprise Security Package).
    :vartype query_timeout: int
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "storage_linked_services": {"key": "typeProperties.storageLinkedServices", "type": "[LinkedServiceReference]"},
        "arguments": {"key": "typeProperties.arguments", "type": "[object]"},
        "get_debug_info": {"key": "typeProperties.getDebugInfo", "type": "str"},
        "script_path": {"key": "typeProperties.scriptPath", "type": "object"},
        "script_linked_service": {"key": "typeProperties.scriptLinkedService", "type": "LinkedServiceReference"},
        "defines": {"key": "typeProperties.defines", "type": "{object}"},
        "variables": {"key": "typeProperties.variables", "type": "[object]"},
        "query_timeout": {"key": "typeProperties.queryTimeout", "type": "int"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        storage_linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        arguments: Optional[List[JSON]] = None,
        get_debug_info: Optional[Union[str, "_models.HDInsightActivityDebugInfoOption"]] = None,
        script_path: Optional[JSON] = None,
        script_linked_service: Optional["_models.LinkedServiceReference"] = None,
        defines: Optional[Dict[str, JSON]] = None,
        variables: Optional[List[JSON]] = None,
        query_timeout: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword storage_linked_services: Storage linked service references.
        :paramtype storage_linked_services:
         list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword arguments: User specified arguments to HDInsightActivity.
        :paramtype arguments: list[JSON]
        :keyword get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
        :paramtype get_debug_info: str or
         ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
        :keyword script_path: Script path. Type: string (or Expression with resultType string).
        :paramtype script_path: JSON
        :keyword script_linked_service: Script linked service reference.
        :paramtype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword defines: Allows user to specify defines for Hive job request.
        :paramtype defines: dict[str, JSON]
        :keyword variables: User specified arguments under hivevar namespace.
        :paramtype variables: list[JSON]
        :keyword query_timeout: Query timeout value (in minutes).  Effective when the HDInsight cluster
         is with ESP (Enterprise Security Package).
        :paramtype query_timeout: int
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "HDInsightHive"
        self.storage_linked_services = storage_linked_services
        self.arguments = arguments
        self.get_debug_info = get_debug_info
        self.script_path = script_path
        self.script_linked_service = script_linked_service
        self.defines = defines
        self.variables = variables
        self.query_timeout = query_timeout


class HDInsightLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """HDInsight linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar cluster_uri: HDInsight cluster URI. Type: string (or Expression with resultType string).
     Required.
    :vartype cluster_uri: JSON
    :ivar cluster_auth_type: HDInsight cluster authentication type. Known values are: "BasicAuth",
     "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype cluster_auth_type: str or
     ~azure.synapse.artifacts.models.HDInsightClusterAuthenticationType
    :ivar user_name: HDInsight cluster user name. Type: string (or Expression with resultType
     string).
    :vartype user_name: JSON
    :ivar password: HDInsight cluster password.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar linked_service_name: The Azure Storage linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar hcatalog_linked_service_name: A reference to the Azure SQL linked service that points to
     the HCatalog database.
    :vartype hcatalog_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar is_esp_enabled: Specify if the HDInsight is created with ESP (Enterprise Security
     Package). Type: Boolean.
    :vartype is_esp_enabled: JSON
    :ivar file_system: Specify the FileSystem if the main storage for the HDInsight is ADLS Gen2.
     Type: string (or Expression with resultType string).
    :vartype file_system: JSON
    :ivar credential: The credential reference containing MI authentication information for the
     HDInsight cluster.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "cluster_uri": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "cluster_uri": {"key": "typeProperties.clusterUri", "type": "object"},
        "cluster_auth_type": {"key": "typeProperties.clusterAuthType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "linked_service_name": {"key": "typeProperties.linkedServiceName", "type": "LinkedServiceReference"},
        "hcatalog_linked_service_name": {
            "key": "typeProperties.hcatalogLinkedServiceName",
            "type": "LinkedServiceReference",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "is_esp_enabled": {"key": "typeProperties.isEspEnabled", "type": "object"},
        "file_system": {"key": "typeProperties.fileSystem", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        cluster_uri: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        cluster_auth_type: Optional[Union[str, "_models.HDInsightClusterAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        hcatalog_linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        is_esp_enabled: Optional[JSON] = None,
        file_system: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword cluster_uri: HDInsight cluster URI. Type: string (or Expression with resultType
         string). Required.
        :paramtype cluster_uri: JSON
        :keyword cluster_auth_type: HDInsight cluster authentication type. Known values are:
         "BasicAuth", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype cluster_auth_type: str or
         ~azure.synapse.artifacts.models.HDInsightClusterAuthenticationType
        :keyword user_name: HDInsight cluster user name. Type: string (or Expression with resultType
         string).
        :paramtype user_name: JSON
        :keyword password: HDInsight cluster password.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword linked_service_name: The Azure Storage linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword hcatalog_linked_service_name: A reference to the Azure SQL linked service that points
         to the HCatalog database.
        :paramtype hcatalog_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword is_esp_enabled: Specify if the HDInsight is created with ESP (Enterprise Security
         Package). Type: Boolean.
        :paramtype is_esp_enabled: JSON
        :keyword file_system: Specify the FileSystem if the main storage for the HDInsight is ADLS
         Gen2. Type: string (or Expression with resultType string).
        :paramtype file_system: JSON
        :keyword credential: The credential reference containing MI authentication information for the
         HDInsight cluster.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "HDInsight"
        self.cluster_uri = cluster_uri
        self.cluster_auth_type = cluster_auth_type
        self.user_name = user_name
        self.password = password
        self.linked_service_name = linked_service_name
        self.hcatalog_linked_service_name = hcatalog_linked_service_name
        self.encrypted_credential = encrypted_credential
        self.is_esp_enabled = is_esp_enabled
        self.file_system = file_system
        self.credential = credential


class HDInsightMapReduceActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """HDInsight MapReduce activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar storage_linked_services: Storage linked service references.
    :vartype storage_linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar arguments: User specified arguments to HDInsightActivity.
    :vartype arguments: list[JSON]
    :ivar get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
    :vartype get_debug_info: str or
     ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
    :ivar class_name: Class name. Type: string (or Expression with resultType string). Required.
    :vartype class_name: JSON
    :ivar jar_file_path: Jar path. Type: string (or Expression with resultType string). Required.
    :vartype jar_file_path: JSON
    :ivar jar_linked_service: Jar linked service reference.
    :vartype jar_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar jar_libs: Jar libs.
    :vartype jar_libs: list[JSON]
    :ivar defines: Allows user to specify defines for the MapReduce job request.
    :vartype defines: dict[str, JSON]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "class_name": {"required": True},
        "jar_file_path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "storage_linked_services": {"key": "typeProperties.storageLinkedServices", "type": "[LinkedServiceReference]"},
        "arguments": {"key": "typeProperties.arguments", "type": "[object]"},
        "get_debug_info": {"key": "typeProperties.getDebugInfo", "type": "str"},
        "class_name": {"key": "typeProperties.className", "type": "object"},
        "jar_file_path": {"key": "typeProperties.jarFilePath", "type": "object"},
        "jar_linked_service": {"key": "typeProperties.jarLinkedService", "type": "LinkedServiceReference"},
        "jar_libs": {"key": "typeProperties.jarLibs", "type": "[object]"},
        "defines": {"key": "typeProperties.defines", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        name: str,
        class_name: JSON,
        jar_file_path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        storage_linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        arguments: Optional[List[JSON]] = None,
        get_debug_info: Optional[Union[str, "_models.HDInsightActivityDebugInfoOption"]] = None,
        jar_linked_service: Optional["_models.LinkedServiceReference"] = None,
        jar_libs: Optional[List[JSON]] = None,
        defines: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword storage_linked_services: Storage linked service references.
        :paramtype storage_linked_services:
         list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword arguments: User specified arguments to HDInsightActivity.
        :paramtype arguments: list[JSON]
        :keyword get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
        :paramtype get_debug_info: str or
         ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
        :keyword class_name: Class name. Type: string (or Expression with resultType string). Required.
        :paramtype class_name: JSON
        :keyword jar_file_path: Jar path. Type: string (or Expression with resultType string).
         Required.
        :paramtype jar_file_path: JSON
        :keyword jar_linked_service: Jar linked service reference.
        :paramtype jar_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword jar_libs: Jar libs.
        :paramtype jar_libs: list[JSON]
        :keyword defines: Allows user to specify defines for the MapReduce job request.
        :paramtype defines: dict[str, JSON]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "HDInsightMapReduce"
        self.storage_linked_services = storage_linked_services
        self.arguments = arguments
        self.get_debug_info = get_debug_info
        self.class_name = class_name
        self.jar_file_path = jar_file_path
        self.jar_linked_service = jar_linked_service
        self.jar_libs = jar_libs
        self.defines = defines


class HDInsightOnDemandLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """HDInsight ondemand linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar cluster_size: Number of worker/data nodes in the cluster. Suggestion value: 4. Type:
     string (or Expression with resultType string). Required.
    :vartype cluster_size: JSON
    :ivar time_to_live: The allowed idle time for the on-demand HDInsight cluster. Specifies how
     long the on-demand HDInsight cluster stays alive after completion of an activity run if there
     are no other active jobs in the cluster. The minimum value is 5 mins. Type: string (or
     Expression with resultType string). Required.
    :vartype time_to_live: JSON
    :ivar version_type_properties_version: Version of the HDInsight cluster.  Type: string (or
     Expression with resultType string). Required.
    :vartype version_type_properties_version: JSON
    :ivar linked_service_name: Azure Storage linked service to be used by the on-demand cluster for
     storing and processing data. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar host_subscription_id: The customer’s subscription to host the cluster. Type: string (or
     Expression with resultType string). Required.
    :vartype host_subscription_id: JSON
    :ivar service_principal_id: The service principal id for the hostSubscriptionId. Type: string
     (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key for the service principal id.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The Tenant id/name to which the service principal belongs. Type: string (or
     Expression with resultType string). Required.
    :vartype tenant: JSON
    :ivar cluster_resource_group: The resource group where the cluster belongs. Type: string (or
     Expression with resultType string). Required.
    :vartype cluster_resource_group: JSON
    :ivar cluster_name_prefix: The prefix of cluster name, postfix will be distinct with timestamp.
     Type: string (or Expression with resultType string).
    :vartype cluster_name_prefix: JSON
    :ivar cluster_user_name: The username to access the cluster. Type: string (or Expression with
     resultType string).
    :vartype cluster_user_name: JSON
    :ivar cluster_password: The password to access the cluster.
    :vartype cluster_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar cluster_ssh_user_name: The username to SSH remotely connect to cluster’s node (for
     Linux). Type: string (or Expression with resultType string).
    :vartype cluster_ssh_user_name: JSON
    :ivar cluster_ssh_password: The password to SSH remotely connect cluster’s node (for Linux).
    :vartype cluster_ssh_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar additional_linked_service_names: Specifies additional storage accounts for the HDInsight
     linked service so that the Data Factory service can register them on your behalf.
    :vartype additional_linked_service_names:
     list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar hcatalog_linked_service_name: The name of Azure SQL linked service that point to the
     HCatalog database. The on-demand HDInsight cluster is created by using the Azure SQL database
     as the metastore.
    :vartype hcatalog_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar cluster_type: The cluster type. Type: string (or Expression with resultType string).
    :vartype cluster_type: JSON
    :ivar spark_version: The version of spark if the cluster type is 'spark'. Type: string (or
     Expression with resultType string).
    :vartype spark_version: JSON
    :ivar core_configuration: Specifies the core configuration parameters (as in core-site.xml) for
     the HDInsight cluster to be created.
    :vartype core_configuration: JSON
    :ivar h_base_configuration: Specifies the HBase configuration parameters (hbase-site.xml) for
     the HDInsight cluster.
    :vartype h_base_configuration: JSON
    :ivar hdfs_configuration: Specifies the HDFS configuration parameters (hdfs-site.xml) for the
     HDInsight cluster.
    :vartype hdfs_configuration: JSON
    :ivar hive_configuration: Specifies the hive configuration parameters (hive-site.xml) for the
     HDInsight cluster.
    :vartype hive_configuration: JSON
    :ivar map_reduce_configuration: Specifies the MapReduce configuration parameters
     (mapred-site.xml) for the HDInsight cluster.
    :vartype map_reduce_configuration: JSON
    :ivar oozie_configuration: Specifies the Oozie configuration parameters (oozie-site.xml) for
     the HDInsight cluster.
    :vartype oozie_configuration: JSON
    :ivar storm_configuration: Specifies the Storm configuration parameters (storm-site.xml) for
     the HDInsight cluster.
    :vartype storm_configuration: JSON
    :ivar yarn_configuration: Specifies the Yarn configuration parameters (yarn-site.xml) for the
     HDInsight cluster.
    :vartype yarn_configuration: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar head_node_size: Specifies the size of the head node for the HDInsight cluster.
    :vartype head_node_size: JSON
    :ivar data_node_size: Specifies the size of the data node for the HDInsight cluster.
    :vartype data_node_size: JSON
    :ivar zookeeper_node_size: Specifies the size of the Zoo Keeper node for the HDInsight cluster.
    :vartype zookeeper_node_size: JSON
    :ivar script_actions: Custom script actions to run on HDI ondemand cluster once it's up. Please
     refer to
     https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-customize-cluster-linux?toc=%2Fen-us%2Fazure%2Fhdinsight%2Fr-server%2FTOC.json&bc=%2Fen-us%2Fazure%2Fbread%2Ftoc.json#understanding-script-actions.  # pylint: disable=line-too-long
    :vartype script_actions: list[~azure.synapse.artifacts.models.ScriptAction]
    :ivar virtual_network_id: The ARM resource ID for the vNet to which the cluster should be
     joined after creation. Type: string (or Expression with resultType string).
    :vartype virtual_network_id: JSON
    :ivar subnet_name: The ARM resource ID for the subnet in the vNet. If virtualNetworkId was
     specified, then this property is required. Type: string (or Expression with resultType string).
    :vartype subnet_name: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "cluster_size": {"required": True},
        "time_to_live": {"required": True},
        "version_type_properties_version": {"required": True},
        "linked_service_name": {"required": True},
        "host_subscription_id": {"required": True},
        "tenant": {"required": True},
        "cluster_resource_group": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "cluster_size": {"key": "typeProperties.clusterSize", "type": "object"},
        "time_to_live": {"key": "typeProperties.timeToLive", "type": "object"},
        "version_type_properties_version": {"key": "typeProperties.version", "type": "object"},
        "linked_service_name": {"key": "typeProperties.linkedServiceName", "type": "LinkedServiceReference"},
        "host_subscription_id": {"key": "typeProperties.hostSubscriptionId", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "cluster_resource_group": {"key": "typeProperties.clusterResourceGroup", "type": "object"},
        "cluster_name_prefix": {"key": "typeProperties.clusterNamePrefix", "type": "object"},
        "cluster_user_name": {"key": "typeProperties.clusterUserName", "type": "object"},
        "cluster_password": {"key": "typeProperties.clusterPassword", "type": "SecretBase"},
        "cluster_ssh_user_name": {"key": "typeProperties.clusterSshUserName", "type": "object"},
        "cluster_ssh_password": {"key": "typeProperties.clusterSshPassword", "type": "SecretBase"},
        "additional_linked_service_names": {
            "key": "typeProperties.additionalLinkedServiceNames",
            "type": "[LinkedServiceReference]",
        },
        "hcatalog_linked_service_name": {
            "key": "typeProperties.hcatalogLinkedServiceName",
            "type": "LinkedServiceReference",
        },
        "cluster_type": {"key": "typeProperties.clusterType", "type": "object"},
        "spark_version": {"key": "typeProperties.sparkVersion", "type": "object"},
        "core_configuration": {"key": "typeProperties.coreConfiguration", "type": "object"},
        "h_base_configuration": {"key": "typeProperties.hBaseConfiguration", "type": "object"},
        "hdfs_configuration": {"key": "typeProperties.hdfsConfiguration", "type": "object"},
        "hive_configuration": {"key": "typeProperties.hiveConfiguration", "type": "object"},
        "map_reduce_configuration": {"key": "typeProperties.mapReduceConfiguration", "type": "object"},
        "oozie_configuration": {"key": "typeProperties.oozieConfiguration", "type": "object"},
        "storm_configuration": {"key": "typeProperties.stormConfiguration", "type": "object"},
        "yarn_configuration": {"key": "typeProperties.yarnConfiguration", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "head_node_size": {"key": "typeProperties.headNodeSize", "type": "object"},
        "data_node_size": {"key": "typeProperties.dataNodeSize", "type": "object"},
        "zookeeper_node_size": {"key": "typeProperties.zookeeperNodeSize", "type": "object"},
        "script_actions": {"key": "typeProperties.scriptActions", "type": "[ScriptAction]"},
        "virtual_network_id": {"key": "typeProperties.virtualNetworkId", "type": "object"},
        "subnet_name": {"key": "typeProperties.subnetName", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        cluster_size: JSON,
        time_to_live: JSON,
        version_type_properties_version: JSON,
        linked_service_name: "_models.LinkedServiceReference",
        host_subscription_id: JSON,
        tenant: JSON,
        cluster_resource_group: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        cluster_name_prefix: Optional[JSON] = None,
        cluster_user_name: Optional[JSON] = None,
        cluster_password: Optional["_models.SecretBase"] = None,
        cluster_ssh_user_name: Optional[JSON] = None,
        cluster_ssh_password: Optional["_models.SecretBase"] = None,
        additional_linked_service_names: Optional[List["_models.LinkedServiceReference"]] = None,
        hcatalog_linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        cluster_type: Optional[JSON] = None,
        spark_version: Optional[JSON] = None,
        core_configuration: Optional[JSON] = None,
        h_base_configuration: Optional[JSON] = None,
        hdfs_configuration: Optional[JSON] = None,
        hive_configuration: Optional[JSON] = None,
        map_reduce_configuration: Optional[JSON] = None,
        oozie_configuration: Optional[JSON] = None,
        storm_configuration: Optional[JSON] = None,
        yarn_configuration: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        head_node_size: Optional[JSON] = None,
        data_node_size: Optional[JSON] = None,
        zookeeper_node_size: Optional[JSON] = None,
        script_actions: Optional[List["_models.ScriptAction"]] = None,
        virtual_network_id: Optional[JSON] = None,
        subnet_name: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword cluster_size: Number of worker/data nodes in the cluster. Suggestion value: 4. Type:
         string (or Expression with resultType string). Required.
        :paramtype cluster_size: JSON
        :keyword time_to_live: The allowed idle time for the on-demand HDInsight cluster. Specifies how
         long the on-demand HDInsight cluster stays alive after completion of an activity run if there
         are no other active jobs in the cluster. The minimum value is 5 mins. Type: string (or
         Expression with resultType string). Required.
        :paramtype time_to_live: JSON
        :keyword version_type_properties_version: Version of the HDInsight cluster.  Type: string (or
         Expression with resultType string). Required.
        :paramtype version_type_properties_version: JSON
        :keyword linked_service_name: Azure Storage linked service to be used by the on-demand cluster
         for storing and processing data. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword host_subscription_id: The customer’s subscription to host the cluster. Type: string
         (or Expression with resultType string). Required.
        :paramtype host_subscription_id: JSON
        :keyword service_principal_id: The service principal id for the hostSubscriptionId. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key for the service principal id.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The Tenant id/name to which the service principal belongs. Type: string (or
         Expression with resultType string). Required.
        :paramtype tenant: JSON
        :keyword cluster_resource_group: The resource group where the cluster belongs. Type: string (or
         Expression with resultType string). Required.
        :paramtype cluster_resource_group: JSON
        :keyword cluster_name_prefix: The prefix of cluster name, postfix will be distinct with
         timestamp. Type: string (or Expression with resultType string).
        :paramtype cluster_name_prefix: JSON
        :keyword cluster_user_name: The username to access the cluster. Type: string (or Expression
         with resultType string).
        :paramtype cluster_user_name: JSON
        :keyword cluster_password: The password to access the cluster.
        :paramtype cluster_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword cluster_ssh_user_name: The username to SSH remotely connect to cluster’s node (for
         Linux). Type: string (or Expression with resultType string).
        :paramtype cluster_ssh_user_name: JSON
        :keyword cluster_ssh_password: The password to SSH remotely connect cluster’s node (for Linux).
        :paramtype cluster_ssh_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword additional_linked_service_names: Specifies additional storage accounts for the
         HDInsight linked service so that the Data Factory service can register them on your behalf.
        :paramtype additional_linked_service_names:
         list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword hcatalog_linked_service_name: The name of Azure SQL linked service that point to the
         HCatalog database. The on-demand HDInsight cluster is created by using the Azure SQL database
         as the metastore.
        :paramtype hcatalog_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword cluster_type: The cluster type. Type: string (or Expression with resultType string).
        :paramtype cluster_type: JSON
        :keyword spark_version: The version of spark if the cluster type is 'spark'. Type: string (or
         Expression with resultType string).
        :paramtype spark_version: JSON
        :keyword core_configuration: Specifies the core configuration parameters (as in core-site.xml)
         for the HDInsight cluster to be created.
        :paramtype core_configuration: JSON
        :keyword h_base_configuration: Specifies the HBase configuration parameters (hbase-site.xml)
         for the HDInsight cluster.
        :paramtype h_base_configuration: JSON
        :keyword hdfs_configuration: Specifies the HDFS configuration parameters (hdfs-site.xml) for
         the HDInsight cluster.
        :paramtype hdfs_configuration: JSON
        :keyword hive_configuration: Specifies the hive configuration parameters (hive-site.xml) for
         the HDInsight cluster.
        :paramtype hive_configuration: JSON
        :keyword map_reduce_configuration: Specifies the MapReduce configuration parameters
         (mapred-site.xml) for the HDInsight cluster.
        :paramtype map_reduce_configuration: JSON
        :keyword oozie_configuration: Specifies the Oozie configuration parameters (oozie-site.xml) for
         the HDInsight cluster.
        :paramtype oozie_configuration: JSON
        :keyword storm_configuration: Specifies the Storm configuration parameters (storm-site.xml) for
         the HDInsight cluster.
        :paramtype storm_configuration: JSON
        :keyword yarn_configuration: Specifies the Yarn configuration parameters (yarn-site.xml) for
         the HDInsight cluster.
        :paramtype yarn_configuration: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword head_node_size: Specifies the size of the head node for the HDInsight cluster.
        :paramtype head_node_size: JSON
        :keyword data_node_size: Specifies the size of the data node for the HDInsight cluster.
        :paramtype data_node_size: JSON
        :keyword zookeeper_node_size: Specifies the size of the Zoo Keeper node for the HDInsight
         cluster.
        :paramtype zookeeper_node_size: JSON
        :keyword script_actions: Custom script actions to run on HDI ondemand cluster once it's up.
         Please refer to
         https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-customize-cluster-linux?toc=%2Fen-us%2Fazure%2Fhdinsight%2Fr-server%2FTOC.json&bc=%2Fen-us%2Fazure%2Fbread%2Ftoc.json#understanding-script-actions.  # pylint: disable=line-too-long
        :paramtype script_actions: list[~azure.synapse.artifacts.models.ScriptAction]
        :keyword virtual_network_id: The ARM resource ID for the vNet to which the cluster should be
         joined after creation. Type: string (or Expression with resultType string).
        :paramtype virtual_network_id: JSON
        :keyword subnet_name: The ARM resource ID for the subnet in the vNet. If virtualNetworkId was
         specified, then this property is required. Type: string (or Expression with resultType string).
        :paramtype subnet_name: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "HDInsightOnDemand"
        self.cluster_size = cluster_size
        self.time_to_live = time_to_live
        self.version_type_properties_version = version_type_properties_version
        self.linked_service_name = linked_service_name
        self.host_subscription_id = host_subscription_id
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.cluster_resource_group = cluster_resource_group
        self.cluster_name_prefix = cluster_name_prefix
        self.cluster_user_name = cluster_user_name
        self.cluster_password = cluster_password
        self.cluster_ssh_user_name = cluster_ssh_user_name
        self.cluster_ssh_password = cluster_ssh_password
        self.additional_linked_service_names = additional_linked_service_names
        self.hcatalog_linked_service_name = hcatalog_linked_service_name
        self.cluster_type = cluster_type
        self.spark_version = spark_version
        self.core_configuration = core_configuration
        self.h_base_configuration = h_base_configuration
        self.hdfs_configuration = hdfs_configuration
        self.hive_configuration = hive_configuration
        self.map_reduce_configuration = map_reduce_configuration
        self.oozie_configuration = oozie_configuration
        self.storm_configuration = storm_configuration
        self.yarn_configuration = yarn_configuration
        self.encrypted_credential = encrypted_credential
        self.head_node_size = head_node_size
        self.data_node_size = data_node_size
        self.zookeeper_node_size = zookeeper_node_size
        self.script_actions = script_actions
        self.virtual_network_id = virtual_network_id
        self.subnet_name = subnet_name
        self.credential = credential


class HDInsightPigActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """HDInsight Pig activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar storage_linked_services: Storage linked service references.
    :vartype storage_linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar arguments: User specified arguments to HDInsightActivity. Type: array (or Expression with
     resultType array).
    :vartype arguments: JSON
    :ivar get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
    :vartype get_debug_info: str or
     ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
    :ivar script_path: Script path. Type: string (or Expression with resultType string).
    :vartype script_path: JSON
    :ivar script_linked_service: Script linked service reference.
    :vartype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar defines: Allows user to specify defines for Pig job request.
    :vartype defines: dict[str, JSON]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "storage_linked_services": {"key": "typeProperties.storageLinkedServices", "type": "[LinkedServiceReference]"},
        "arguments": {"key": "typeProperties.arguments", "type": "object"},
        "get_debug_info": {"key": "typeProperties.getDebugInfo", "type": "str"},
        "script_path": {"key": "typeProperties.scriptPath", "type": "object"},
        "script_linked_service": {"key": "typeProperties.scriptLinkedService", "type": "LinkedServiceReference"},
        "defines": {"key": "typeProperties.defines", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        storage_linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        arguments: Optional[JSON] = None,
        get_debug_info: Optional[Union[str, "_models.HDInsightActivityDebugInfoOption"]] = None,
        script_path: Optional[JSON] = None,
        script_linked_service: Optional["_models.LinkedServiceReference"] = None,
        defines: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword storage_linked_services: Storage linked service references.
        :paramtype storage_linked_services:
         list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword arguments: User specified arguments to HDInsightActivity. Type: array (or Expression
         with resultType array).
        :paramtype arguments: JSON
        :keyword get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
        :paramtype get_debug_info: str or
         ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
        :keyword script_path: Script path. Type: string (or Expression with resultType string).
        :paramtype script_path: JSON
        :keyword script_linked_service: Script linked service reference.
        :paramtype script_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword defines: Allows user to specify defines for Pig job request.
        :paramtype defines: dict[str, JSON]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "HDInsightPig"
        self.storage_linked_services = storage_linked_services
        self.arguments = arguments
        self.get_debug_info = get_debug_info
        self.script_path = script_path
        self.script_linked_service = script_linked_service
        self.defines = defines


class HDInsightSparkActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """HDInsight Spark activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar root_path: The root path in 'sparkJobLinkedService' for all the job’s files. Type: string
     (or Expression with resultType string). Required.
    :vartype root_path: JSON
    :ivar entry_file_path: The relative path to the root folder of the code/package to be executed.
     Type: string (or Expression with resultType string). Required.
    :vartype entry_file_path: JSON
    :ivar arguments: The user-specified arguments to HDInsightSparkActivity.
    :vartype arguments: list[JSON]
    :ivar get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
    :vartype get_debug_info: str or
     ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
    :ivar spark_job_linked_service: The storage linked service for uploading the entry file and
     dependencies, and for receiving logs.
    :vartype spark_job_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar class_name: The application's Java/Spark main class.
    :vartype class_name: str
    :ivar proxy_user: The user to impersonate that will execute the job. Type: string (or
     Expression with resultType string).
    :vartype proxy_user: JSON
    :ivar spark_config: Spark configuration property.
    :vartype spark_config: dict[str, JSON]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "root_path": {"required": True},
        "entry_file_path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "root_path": {"key": "typeProperties.rootPath", "type": "object"},
        "entry_file_path": {"key": "typeProperties.entryFilePath", "type": "object"},
        "arguments": {"key": "typeProperties.arguments", "type": "[object]"},
        "get_debug_info": {"key": "typeProperties.getDebugInfo", "type": "str"},
        "spark_job_linked_service": {"key": "typeProperties.sparkJobLinkedService", "type": "LinkedServiceReference"},
        "class_name": {"key": "typeProperties.className", "type": "str"},
        "proxy_user": {"key": "typeProperties.proxyUser", "type": "object"},
        "spark_config": {"key": "typeProperties.sparkConfig", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        name: str,
        root_path: JSON,
        entry_file_path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        arguments: Optional[List[JSON]] = None,
        get_debug_info: Optional[Union[str, "_models.HDInsightActivityDebugInfoOption"]] = None,
        spark_job_linked_service: Optional["_models.LinkedServiceReference"] = None,
        class_name: Optional[str] = None,
        proxy_user: Optional[JSON] = None,
        spark_config: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword root_path: The root path in 'sparkJobLinkedService' for all the job’s files. Type:
         string (or Expression with resultType string). Required.
        :paramtype root_path: JSON
        :keyword entry_file_path: The relative path to the root folder of the code/package to be
         executed. Type: string (or Expression with resultType string). Required.
        :paramtype entry_file_path: JSON
        :keyword arguments: The user-specified arguments to HDInsightSparkActivity.
        :paramtype arguments: list[JSON]
        :keyword get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
        :paramtype get_debug_info: str or
         ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
        :keyword spark_job_linked_service: The storage linked service for uploading the entry file and
         dependencies, and for receiving logs.
        :paramtype spark_job_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword class_name: The application's Java/Spark main class.
        :paramtype class_name: str
        :keyword proxy_user: The user to impersonate that will execute the job. Type: string (or
         Expression with resultType string).
        :paramtype proxy_user: JSON
        :keyword spark_config: Spark configuration property.
        :paramtype spark_config: dict[str, JSON]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "HDInsightSpark"
        self.root_path = root_path
        self.entry_file_path = entry_file_path
        self.arguments = arguments
        self.get_debug_info = get_debug_info
        self.spark_job_linked_service = spark_job_linked_service
        self.class_name = class_name
        self.proxy_user = proxy_user
        self.spark_config = spark_config


class HDInsightStreamingActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """HDInsight streaming activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar storage_linked_services: Storage linked service references.
    :vartype storage_linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar arguments: User specified arguments to HDInsightActivity.
    :vartype arguments: list[JSON]
    :ivar get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
    :vartype get_debug_info: str or
     ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
    :ivar mapper: Mapper executable name. Type: string (or Expression with resultType string).
     Required.
    :vartype mapper: JSON
    :ivar reducer: Reducer executable name. Type: string (or Expression with resultType string).
     Required.
    :vartype reducer: JSON
    :ivar input: Input blob path. Type: string (or Expression with resultType string). Required.
    :vartype input: JSON
    :ivar output: Output blob path. Type: string (or Expression with resultType string). Required.
    :vartype output: JSON
    :ivar file_paths: Paths to streaming job files. Can be directories. Required.
    :vartype file_paths: list[JSON]
    :ivar file_linked_service: Linked service reference where the files are located.
    :vartype file_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar combiner: Combiner executable name. Type: string (or Expression with resultType string).
    :vartype combiner: JSON
    :ivar command_environment: Command line environment values.
    :vartype command_environment: list[JSON]
    :ivar defines: Allows user to specify defines for streaming job request.
    :vartype defines: dict[str, JSON]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "mapper": {"required": True},
        "reducer": {"required": True},
        "input": {"required": True},
        "output": {"required": True},
        "file_paths": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "storage_linked_services": {"key": "typeProperties.storageLinkedServices", "type": "[LinkedServiceReference]"},
        "arguments": {"key": "typeProperties.arguments", "type": "[object]"},
        "get_debug_info": {"key": "typeProperties.getDebugInfo", "type": "str"},
        "mapper": {"key": "typeProperties.mapper", "type": "object"},
        "reducer": {"key": "typeProperties.reducer", "type": "object"},
        "input": {"key": "typeProperties.input", "type": "object"},
        "output": {"key": "typeProperties.output", "type": "object"},
        "file_paths": {"key": "typeProperties.filePaths", "type": "[object]"},
        "file_linked_service": {"key": "typeProperties.fileLinkedService", "type": "LinkedServiceReference"},
        "combiner": {"key": "typeProperties.combiner", "type": "object"},
        "command_environment": {"key": "typeProperties.commandEnvironment", "type": "[object]"},
        "defines": {"key": "typeProperties.defines", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        name: str,
        mapper: JSON,
        reducer: JSON,
        input: JSON,
        output: JSON,
        file_paths: List[JSON],
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        storage_linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        arguments: Optional[List[JSON]] = None,
        get_debug_info: Optional[Union[str, "_models.HDInsightActivityDebugInfoOption"]] = None,
        file_linked_service: Optional["_models.LinkedServiceReference"] = None,
        combiner: Optional[JSON] = None,
        command_environment: Optional[List[JSON]] = None,
        defines: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword storage_linked_services: Storage linked service references.
        :paramtype storage_linked_services:
         list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword arguments: User specified arguments to HDInsightActivity.
        :paramtype arguments: list[JSON]
        :keyword get_debug_info: Debug info option. Known values are: "None", "Always", and "Failure".
        :paramtype get_debug_info: str or
         ~azure.synapse.artifacts.models.HDInsightActivityDebugInfoOption
        :keyword mapper: Mapper executable name. Type: string (or Expression with resultType string).
         Required.
        :paramtype mapper: JSON
        :keyword reducer: Reducer executable name. Type: string (or Expression with resultType string).
         Required.
        :paramtype reducer: JSON
        :keyword input: Input blob path. Type: string (or Expression with resultType string). Required.
        :paramtype input: JSON
        :keyword output: Output blob path. Type: string (or Expression with resultType string).
         Required.
        :paramtype output: JSON
        :keyword file_paths: Paths to streaming job files. Can be directories. Required.
        :paramtype file_paths: list[JSON]
        :keyword file_linked_service: Linked service reference where the files are located.
        :paramtype file_linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword combiner: Combiner executable name. Type: string (or Expression with resultType
         string).
        :paramtype combiner: JSON
        :keyword command_environment: Command line environment values.
        :paramtype command_environment: list[JSON]
        :keyword defines: Allows user to specify defines for streaming job request.
        :paramtype defines: dict[str, JSON]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "HDInsightStreaming"
        self.storage_linked_services = storage_linked_services
        self.arguments = arguments
        self.get_debug_info = get_debug_info
        self.mapper = mapper
        self.reducer = reducer
        self.input = input
        self.output = output
        self.file_paths = file_paths
        self.file_linked_service = file_linked_service
        self.combiner = combiner
        self.command_environment = command_environment
        self.defines = defines


class HiveLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Hive Server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: IP address or host name of the Hive server, separated by ';' for multiple hosts
     (only when serviceDiscoveryMode is enable). Required.
    :vartype host: JSON
    :ivar port: The TCP port that the Hive server uses to listen for client connections.
    :vartype port: JSON
    :ivar server_type: The type of Hive server. Known values are: "HiveServer1", "HiveServer2", and
     "HiveThriftServer".
    :vartype server_type: str or ~azure.synapse.artifacts.models.HiveServerType
    :ivar thrift_transport_protocol: The transport protocol to use in the Thrift layer. Known
     values are: "Binary", "SASL", and "HTTP ".
    :vartype thrift_transport_protocol: str or
     ~azure.synapse.artifacts.models.HiveThriftTransportProtocol
    :ivar authentication_type: The authentication method used to access the Hive server. Required.
     Known values are: "Anonymous", "Username", "UsernameAndPassword", and
     "WindowsAzureHDInsightService".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.HiveAuthenticationType
    :ivar service_discovery_mode: true to indicate using the ZooKeeper service, false not.
    :vartype service_discovery_mode: JSON
    :ivar zoo_keeper_name_space: The namespace on ZooKeeper under which Hive Server 2 nodes are
     added.
    :vartype zoo_keeper_name_space: JSON
    :ivar use_native_query: Specifies whether the driver uses native HiveQL queries,or converts
     them into an equivalent form in HiveQL.
    :vartype use_native_query: JSON
    :ivar username: The user name that you use to access Hive Server.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name that you provided in the Username
     field.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar http_path: The partial URL corresponding to the Hive server.
    :vartype http_path: JSON
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false.
    :vartype enable_ssl: JSON
    :ivar enable_server_certificate_validation: Specifies whether the connections to the server
     will validate server certificate, the default value is True. Only used for Version 2.0.
    :vartype enable_server_certificate_validation: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false.
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "server_type": {"key": "typeProperties.serverType", "type": "str"},
        "thrift_transport_protocol": {"key": "typeProperties.thriftTransportProtocol", "type": "str"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "service_discovery_mode": {"key": "typeProperties.serviceDiscoveryMode", "type": "object"},
        "zoo_keeper_name_space": {"key": "typeProperties.zooKeeperNameSpace", "type": "object"},
        "use_native_query": {"key": "typeProperties.useNativeQuery", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "http_path": {"key": "typeProperties.httpPath", "type": "object"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        host: JSON,
        authentication_type: Union[str, "_models.HiveAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        server_type: Optional[Union[str, "_models.HiveServerType"]] = None,
        thrift_transport_protocol: Optional[Union[str, "_models.HiveThriftTransportProtocol"]] = None,
        service_discovery_mode: Optional[JSON] = None,
        zoo_keeper_name_space: Optional[JSON] = None,
        use_native_query: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        http_path: Optional[JSON] = None,
        enable_ssl: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: IP address or host name of the Hive server, separated by ';' for multiple hosts
         (only when serviceDiscoveryMode is enable). Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the Hive server uses to listen for client connections.
        :paramtype port: JSON
        :keyword server_type: The type of Hive server. Known values are: "HiveServer1", "HiveServer2",
         and "HiveThriftServer".
        :paramtype server_type: str or ~azure.synapse.artifacts.models.HiveServerType
        :keyword thrift_transport_protocol: The transport protocol to use in the Thrift layer. Known
         values are: "Binary", "SASL", and "HTTP ".
        :paramtype thrift_transport_protocol: str or
         ~azure.synapse.artifacts.models.HiveThriftTransportProtocol
        :keyword authentication_type: The authentication method used to access the Hive server.
         Required. Known values are: "Anonymous", "Username", "UsernameAndPassword", and
         "WindowsAzureHDInsightService".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.HiveAuthenticationType
        :keyword service_discovery_mode: true to indicate using the ZooKeeper service, false not.
        :paramtype service_discovery_mode: JSON
        :keyword zoo_keeper_name_space: The namespace on ZooKeeper under which Hive Server 2 nodes are
         added.
        :paramtype zoo_keeper_name_space: JSON
        :keyword use_native_query: Specifies whether the driver uses native HiveQL queries,or converts
         them into an equivalent form in HiveQL.
        :paramtype use_native_query: JSON
        :keyword username: The user name that you use to access Hive Server.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name that you provided in the
         Username field.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword http_path: The partial URL corresponding to the Hive server.
        :paramtype http_path: JSON
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false.
        :paramtype enable_ssl: JSON
        :keyword enable_server_certificate_validation: Specifies whether the connections to the server
         will validate server certificate, the default value is True. Only used for Version 2.0.
        :paramtype enable_server_certificate_validation: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Hive"
        self.host = host
        self.port = port
        self.server_type = server_type
        self.thrift_transport_protocol = thrift_transport_protocol
        self.authentication_type = authentication_type
        self.service_discovery_mode = service_discovery_mode
        self.zoo_keeper_name_space = zoo_keeper_name_space
        self.use_native_query = use_native_query
        self.username = username
        self.password = password
        self.http_path = http_path
        self.enable_ssl = enable_ssl
        self.enable_server_certificate_validation = enable_server_certificate_validation
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class HiveObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Hive Server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Hive. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Hive. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Hive. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Hive. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "HiveObject"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class HiveSource(TabularSource):
    """A copy activity Hive Server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "HiveSource"
        self.query = query


class HttpDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """A file in an HTTP web server.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar relative_url: The relative URL based on the URL in the HttpLinkedService refers to an
     HTTP file Type: string (or Expression with resultType string).
    :vartype relative_url: JSON
    :ivar request_method: The HTTP method for the HTTP request. Type: string (or Expression with
     resultType string).
    :vartype request_method: JSON
    :ivar request_body: The body for the HTTP request. Type: string (or Expression with resultType
     string).
    :vartype request_body: JSON
    :ivar additional_headers: The headers for the HTTP Request. e.g.
     request-header-name-1:request-header-value-1
     ...
     request-header-name-n:request-header-value-n Type: string (or Expression with resultType
     string).
    :vartype additional_headers: JSON
    :ivar format: The format of files.
    :vartype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
    :ivar compression: The data compression method used on files.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "relative_url": {"key": "typeProperties.relativeUrl", "type": "object"},
        "request_method": {"key": "typeProperties.requestMethod", "type": "object"},
        "request_body": {"key": "typeProperties.requestBody", "type": "object"},
        "additional_headers": {"key": "typeProperties.additionalHeaders", "type": "object"},
        "format": {"key": "typeProperties.format", "type": "DatasetStorageFormat"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        relative_url: Optional[JSON] = None,
        request_method: Optional[JSON] = None,
        request_body: Optional[JSON] = None,
        additional_headers: Optional[JSON] = None,
        format: Optional["_models.DatasetStorageFormat"] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword relative_url: The relative URL based on the URL in the HttpLinkedService refers to an
         HTTP file Type: string (or Expression with resultType string).
        :paramtype relative_url: JSON
        :keyword request_method: The HTTP method for the HTTP request. Type: string (or Expression with
         resultType string).
        :paramtype request_method: JSON
        :keyword request_body: The body for the HTTP request. Type: string (or Expression with
         resultType string).
        :paramtype request_body: JSON
        :keyword additional_headers: The headers for the HTTP Request. e.g.
         request-header-name-1:request-header-value-1
         ...
         request-header-name-n:request-header-value-n Type: string (or Expression with resultType
         string).
        :paramtype additional_headers: JSON
        :keyword format: The format of files.
        :paramtype format: ~azure.synapse.artifacts.models.DatasetStorageFormat
        :keyword compression: The data compression method used on files.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "HttpFile"
        self.relative_url = relative_url
        self.request_method = request_method
        self.request_body = request_body
        self.additional_headers = additional_headers
        self.format = format
        self.compression = compression


class HttpLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for an HTTP source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The base URL of the HTTP endpoint, e.g. http://www.microsoft.com. Type: string (or
     Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: The authentication type to be used to connect to the HTTP server.
     Known values are: "Basic", "Anonymous", "Digest", "Windows", and "ClientCertificate".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.HttpAuthenticationType
    :ivar user_name: User name for Basic, Digest, or Windows authentication. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: Password for Basic, Digest, Windows, or ClientCertificate with EmbeddedCertData
     authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar embedded_cert_data: Base64 encoded certificate data for ClientCertificate authentication.
     For on-premises copy with ClientCertificate authentication, either CertThumbprint or
     EmbeddedCertData/Password should be specified. Type: string (or Expression with resultType
     string).
    :vartype embedded_cert_data: JSON
    :ivar cert_thumbprint: Thumbprint of certificate for ClientCertificate authentication. Only
     valid for on-premises copy. For on-premises copy with ClientCertificate authentication, either
     CertThumbprint or EmbeddedCertData/Password should be specified. Type: string (or Expression
     with resultType string).
    :vartype cert_thumbprint: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar enable_server_certificate_validation: If true, validate the HTTPS server SSL certificate.
     Default value is true. Type: boolean (or Expression with resultType boolean).
    :vartype enable_server_certificate_validation: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "embedded_cert_data": {"key": "typeProperties.embeddedCertData", "type": "object"},
        "cert_thumbprint": {"key": "typeProperties.certThumbprint", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
    }

    def __init__(
        self,
        *,
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[Union[str, "_models.HttpAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        embedded_cert_data: Optional[JSON] = None,
        cert_thumbprint: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The base URL of the HTTP endpoint, e.g. http://www.microsoft.com. Type: string
         (or Expression with resultType string). Required.
        :paramtype url: JSON
        :keyword authentication_type: The authentication type to be used to connect to the HTTP server.
         Known values are: "Basic", "Anonymous", "Digest", "Windows", and "ClientCertificate".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.HttpAuthenticationType
        :keyword user_name: User name for Basic, Digest, or Windows authentication. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: Password for Basic, Digest, Windows, or ClientCertificate with
         EmbeddedCertData authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword embedded_cert_data: Base64 encoded certificate data for ClientCertificate
         authentication. For on-premises copy with ClientCertificate authentication, either
         CertThumbprint or EmbeddedCertData/Password should be specified. Type: string (or Expression
         with resultType string).
        :paramtype embedded_cert_data: JSON
        :keyword cert_thumbprint: Thumbprint of certificate for ClientCertificate authentication. Only
         valid for on-premises copy. For on-premises copy with ClientCertificate authentication, either
         CertThumbprint or EmbeddedCertData/Password should be specified. Type: string (or Expression
         with resultType string).
        :paramtype cert_thumbprint: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword enable_server_certificate_validation: If true, validate the HTTPS server SSL
         certificate. Default value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_server_certificate_validation: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "HttpServer"
        self.url = url
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.embedded_cert_data = embedded_cert_data
        self.cert_thumbprint = cert_thumbprint
        self.encrypted_credential = encrypted_credential
        self.enable_server_certificate_validation = enable_server_certificate_validation


class HttpReadSettings(StoreReadSettings):
    """Http read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar request_method: The HTTP method used to call the RESTful API. The default is GET. Type:
     string (or Expression with resultType string).
    :vartype request_method: JSON
    :ivar request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
     string (or Expression with resultType string).
    :vartype request_body: JSON
    :ivar additional_headers: The additional HTTP headers in the request to the RESTful API. Type:
     string (or Expression with resultType string).
    :vartype additional_headers: JSON
    :ivar request_timeout: Specifies the timeout for a HTTP client to get HTTP response from HTTP
     server.
    :vartype request_timeout: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "request_method": {"key": "requestMethod", "type": "object"},
        "request_body": {"key": "requestBody", "type": "object"},
        "additional_headers": {"key": "additionalHeaders", "type": "object"},
        "request_timeout": {"key": "requestTimeout", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        request_method: Optional[JSON] = None,
        request_body: Optional[JSON] = None,
        additional_headers: Optional[JSON] = None,
        request_timeout: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword request_method: The HTTP method used to call the RESTful API. The default is GET.
         Type: string (or Expression with resultType string).
        :paramtype request_method: JSON
        :keyword request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
         string (or Expression with resultType string).
        :paramtype request_body: JSON
        :keyword additional_headers: The additional HTTP headers in the request to the RESTful API.
         Type: string (or Expression with resultType string).
        :paramtype additional_headers: JSON
        :keyword request_timeout: Specifies the timeout for a HTTP client to get HTTP response from
         HTTP server.
        :paramtype request_timeout: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "HttpReadSettings"
        self.request_method = request_method
        self.request_body = request_body
        self.additional_headers = additional_headers
        self.request_timeout = request_timeout
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.additional_columns = additional_columns


class HttpServerLocation(DatasetLocation):
    """The location of http server.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    :ivar relative_url: Specify the relativeUrl of http server. Type: string (or Expression with
     resultType string).
    :vartype relative_url: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
        "relative_url": {"key": "relativeUrl", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        relative_url: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        :keyword relative_url: Specify the relativeUrl of http server. Type: string (or Expression with
         resultType string).
        :paramtype relative_url: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "HttpServerLocation"
        self.relative_url = relative_url


class HttpSource(CopySource):
    """A copy activity source for an HTTP file.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar http_request_timeout: Specifies the timeout for a HTTP client to get HTTP response from
     HTTP server. The default value is equivalent to System.Net.HttpWebRequest.Timeout. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword http_request_timeout: Specifies the timeout for a HTTP client to get HTTP response
         from HTTP server. The default value is equivalent to System.Net.HttpWebRequest.Timeout. Type:
         string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "HttpSource"
        self.http_request_timeout = http_request_timeout


class HubspotLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Hubspot Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar client_id: The client ID associated with your Hubspot application. Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with your Hubspot application.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar access_token: The access token obtained when initially authenticating your OAuth
     integration.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar refresh_token: The refresh token obtained when initially authenticating your OAuth
     integration.
    :vartype refresh_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "refresh_token": {"key": "typeProperties.refreshToken", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        access_token: Optional["_models.SecretBase"] = None,
        refresh_token: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword client_id: The client ID associated with your Hubspot application. Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with your Hubspot application.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword access_token: The access token obtained when initially authenticating your OAuth
         integration.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword refresh_token: The refresh token obtained when initially authenticating your OAuth
         integration.
        :paramtype refresh_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Hubspot"
        self.client_id = client_id
        self.client_secret = client_secret
        self.access_token = access_token
        self.refresh_token = refresh_token
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class HubspotObjectDataset(Dataset):
    """Hubspot Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "HubspotObject"
        self.table_name = table_name


class HubspotSource(TabularSource):
    """A copy activity Hubspot Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "HubspotSource"
        self.query = query


class IcebergDataset(Dataset):
    """Iceberg dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the iceberg storage. Setting a file name is not allowed for
     iceberg format.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the iceberg storage. Setting a file name is not allowed for
         iceberg format.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Iceberg"
        self.location = location


class IcebergSink(CopySink):
    """A copy activity Iceberg sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Iceberg store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: Iceberg format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.IcebergWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "IcebergWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.IcebergWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Iceberg store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: Iceberg format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.IcebergWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "IcebergSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class IcebergWriteSettings(FormatWriteSettings):
    """Iceberg write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "IcebergWriteSettings"


class IfConditionActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """This activity evaluates a boolean expression and executes either the activities under the
    ifTrueActivities property or the ifFalseActivities property depending on the result of the
    expression.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar expression: An expression that would evaluate to Boolean. This is used to determine the
     block of activities (ifTrueActivities or ifFalseActivities) that will be executed. Required.
    :vartype expression: ~azure.synapse.artifacts.models.Expression
    :ivar if_true_activities: List of activities to execute if expression is evaluated to true.
     This is an optional property and if not provided, the activity will exit without any action.
    :vartype if_true_activities: list[~azure.synapse.artifacts.models.Activity]
    :ivar if_false_activities: List of activities to execute if expression is evaluated to false.
     This is an optional property and if not provided, the activity will exit without any action.
    :vartype if_false_activities: list[~azure.synapse.artifacts.models.Activity]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "expression": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "expression": {"key": "typeProperties.expression", "type": "Expression"},
        "if_true_activities": {"key": "typeProperties.ifTrueActivities", "type": "[Activity]"},
        "if_false_activities": {"key": "typeProperties.ifFalseActivities", "type": "[Activity]"},
    }

    def __init__(
        self,
        *,
        name: str,
        expression: "_models.Expression",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        if_true_activities: Optional[List["_models.Activity"]] = None,
        if_false_activities: Optional[List["_models.Activity"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword expression: An expression that would evaluate to Boolean. This is used to determine
         the block of activities (ifTrueActivities or ifFalseActivities) that will be executed.
         Required.
        :paramtype expression: ~azure.synapse.artifacts.models.Expression
        :keyword if_true_activities: List of activities to execute if expression is evaluated to true.
         This is an optional property and if not provided, the activity will exit without any action.
        :paramtype if_true_activities: list[~azure.synapse.artifacts.models.Activity]
        :keyword if_false_activities: List of activities to execute if expression is evaluated to
         false. This is an optional property and if not provided, the activity will exit without any
         action.
        :paramtype if_false_activities: list[~azure.synapse.artifacts.models.Activity]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "IfCondition"
        self.expression = expression
        self.if_true_activities = if_true_activities
        self.if_false_activities = if_false_activities


class ImpalaLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Impala server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The IP address or host name of the Impala server. (i.e. 192.168.222.160). Required.
    :vartype host: JSON
    :ivar port: The TCP port that the Impala server uses to listen for client connections. The
     default value is 21050.
    :vartype port: JSON
    :ivar authentication_type: The authentication type to use. Required. Known values are:
     "Anonymous", "SASLUsername", and "UsernameAndPassword".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.ImpalaAuthenticationType
    :ivar username: The user name used to access the Impala server. The default value is anonymous
     when using SASLUsername.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name when using UsernameAndPassword.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar thrift_transport_protocol: The transport protocol to use in the Thrift layer (for V2
     only). Default value is Binary. Known values are: "Binary" and "HTTP".
    :vartype thrift_transport_protocol: str or
     ~azure.synapse.artifacts.models.ImpalaThriftTransportProtocol
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false.
    :vartype enable_ssl: JSON
    :ivar enable_server_certificate_validation: Specify whether to enable server SSL certificate
     validation when you connect.Always use System Trust Store (for V2 only). The default value is
     true.
    :vartype enable_server_certificate_validation: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false.
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "thrift_transport_protocol": {"key": "typeProperties.thriftTransportProtocol", "type": "str"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        authentication_type: Union[str, "_models.ImpalaAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        thrift_transport_protocol: Optional[Union[str, "_models.ImpalaThriftTransportProtocol"]] = None,
        enable_ssl: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The IP address or host name of the Impala server. (i.e. 192.168.222.160).
         Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the Impala server uses to listen for client connections. The
         default value is 21050.
        :paramtype port: JSON
        :keyword authentication_type: The authentication type to use. Required. Known values are:
         "Anonymous", "SASLUsername", and "UsernameAndPassword".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.ImpalaAuthenticationType
        :keyword username: The user name used to access the Impala server. The default value is
         anonymous when using SASLUsername.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name when using UsernameAndPassword.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword thrift_transport_protocol: The transport protocol to use in the Thrift layer (for V2
         only). Default value is Binary. Known values are: "Binary" and "HTTP".
        :paramtype thrift_transport_protocol: str or
         ~azure.synapse.artifacts.models.ImpalaThriftTransportProtocol
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false.
        :paramtype enable_ssl: JSON
        :keyword enable_server_certificate_validation: Specify whether to enable server SSL certificate
         validation when you connect.Always use System Trust Store (for V2 only). The default value is
         true.
        :paramtype enable_server_certificate_validation: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Impala"
        self.host = host
        self.port = port
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.thrift_transport_protocol = thrift_transport_protocol
        self.enable_ssl = enable_ssl
        self.enable_server_certificate_validation = enable_server_certificate_validation
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class ImpalaObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Impala server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Impala. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Impala. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Impala. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Impala. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ImpalaObject"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class ImpalaSource(TabularSource):
    """A copy activity Impala server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ImpalaSource"
        self.query = query


class InformixLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Informix linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The non-access credential portion of the connection string as well as
     an optional encrypted credential. Type: string, SecureString or AzureKeyVaultSecretReference.
     Required.
    :vartype connection_string: JSON
    :ivar authentication_type: Type of authentication used to connect to the Informix as ODBC data
     store. Possible values are: Anonymous and Basic. Type: string (or Expression with resultType
     string).
    :vartype authentication_type: JSON
    :ivar credential: The access credential portion of the connection string specified in
     driver-specific property-value format.
    :vartype credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar user_name: User name for Basic authentication. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "SecretBase"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        credential: Optional["_models.SecretBase"] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The non-access credential portion of the connection string as well
         as an optional encrypted credential. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype connection_string: JSON
        :keyword authentication_type: Type of authentication used to connect to the Informix as ODBC
         data store. Possible values are: Anonymous and Basic. Type: string (or Expression with
         resultType string).
        :paramtype authentication_type: JSON
        :keyword credential: The access credential portion of the connection string specified in
         driver-specific property-value format.
        :paramtype credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword user_name: User name for Basic authentication. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Informix"
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.credential = credential
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential


class InformixSink(CopySink):
    """A copy activity Informix sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: A query to execute before starting the copy. Type: string (or Expression
     with resultType string).
    :vartype pre_copy_script: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: A query to execute before starting the copy. Type: string (or
         Expression with resultType string).
        :paramtype pre_copy_script: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "InformixSink"
        self.pre_copy_script = pre_copy_script


class InformixSource(TabularSource):
    """A copy activity source for Informix.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "InformixSource"
        self.query = query


class InformixTableDataset(Dataset):
    """The Informix table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The Informix table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The Informix table name. Type: string (or Expression with resultType
         string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "InformixTable"
        self.table_name = table_name


class IntegrationRuntime(_serialization.Model):
    """Azure Synapse nested object which serves as a compute resource for activities.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    ManagedIntegrationRuntime, SelfHostedIntegrationRuntime

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of integration runtime. Required. Known values are: "Managed" and
     "SelfHosted".
    :vartype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeType
    :ivar description: Integration runtime description.
    :vartype description: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
    }

    _subtype_map = {"type": {"Managed": "ManagedIntegrationRuntime", "SelfHosted": "SelfHostedIntegrationRuntime"}}

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Integration runtime description.
        :paramtype description: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type: Optional[str] = None
        self.description = description


class IntegrationRuntimeComputeProperties(_serialization.Model):
    """The compute resource properties for managed integration runtime.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar location: The location for managed integration runtime. The supported regions could be
     found on
     https://docs.microsoft.com/en-us/azure/data-factory/data-factory-data-movement-activities.
    :vartype location: str
    :ivar node_size: The node size requirement to managed integration runtime.
    :vartype node_size: str
    :ivar number_of_nodes: The required number of nodes for managed integration runtime.
    :vartype number_of_nodes: int
    :ivar max_parallel_executions_per_node: Maximum parallel executions count per node for managed
     integration runtime.
    :vartype max_parallel_executions_per_node: int
    :ivar data_flow_properties: Data flow properties for managed integration runtime.
    :vartype data_flow_properties:
     ~azure.synapse.artifacts.models.IntegrationRuntimeDataFlowProperties
    :ivar v_net_properties: VNet properties for managed integration runtime.
    :vartype v_net_properties: ~azure.synapse.artifacts.models.IntegrationRuntimeVNetProperties
    """

    _validation = {
        "number_of_nodes": {"minimum": 1},
        "max_parallel_executions_per_node": {"minimum": 1},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "location": {"key": "location", "type": "str"},
        "node_size": {"key": "nodeSize", "type": "str"},
        "number_of_nodes": {"key": "numberOfNodes", "type": "int"},
        "max_parallel_executions_per_node": {"key": "maxParallelExecutionsPerNode", "type": "int"},
        "data_flow_properties": {"key": "dataFlowProperties", "type": "IntegrationRuntimeDataFlowProperties"},
        "v_net_properties": {"key": "vNetProperties", "type": "IntegrationRuntimeVNetProperties"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        location: Optional[str] = None,
        node_size: Optional[str] = None,
        number_of_nodes: Optional[int] = None,
        max_parallel_executions_per_node: Optional[int] = None,
        data_flow_properties: Optional["_models.IntegrationRuntimeDataFlowProperties"] = None,
        v_net_properties: Optional["_models.IntegrationRuntimeVNetProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword location: The location for managed integration runtime. The supported regions could be
         found on
         https://docs.microsoft.com/en-us/azure/data-factory/data-factory-data-movement-activities.
        :paramtype location: str
        :keyword node_size: The node size requirement to managed integration runtime.
        :paramtype node_size: str
        :keyword number_of_nodes: The required number of nodes for managed integration runtime.
        :paramtype number_of_nodes: int
        :keyword max_parallel_executions_per_node: Maximum parallel executions count per node for
         managed integration runtime.
        :paramtype max_parallel_executions_per_node: int
        :keyword data_flow_properties: Data flow properties for managed integration runtime.
        :paramtype data_flow_properties:
         ~azure.synapse.artifacts.models.IntegrationRuntimeDataFlowProperties
        :keyword v_net_properties: VNet properties for managed integration runtime.
        :paramtype v_net_properties: ~azure.synapse.artifacts.models.IntegrationRuntimeVNetProperties
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.location = location
        self.node_size = node_size
        self.number_of_nodes = number_of_nodes
        self.max_parallel_executions_per_node = max_parallel_executions_per_node
        self.data_flow_properties = data_flow_properties
        self.v_net_properties = v_net_properties


class IntegrationRuntimeCustomSetupScriptProperties(_serialization.Model):
    """Custom setup script properties for a managed dedicated integration runtime.

    :ivar blob_container_uri: The URI of the Azure blob container that contains the custom setup
     script.
    :vartype blob_container_uri: str
    :ivar sas_token: The SAS token of the Azure blob container.
    :vartype sas_token: ~azure.synapse.artifacts.models.SecureString
    """

    _attribute_map = {
        "blob_container_uri": {"key": "blobContainerUri", "type": "str"},
        "sas_token": {"key": "sasToken", "type": "SecureString"},
    }

    def __init__(
        self,
        *,
        blob_container_uri: Optional[str] = None,
        sas_token: Optional["_models.SecureString"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword blob_container_uri: The URI of the Azure blob container that contains the custom setup
         script.
        :paramtype blob_container_uri: str
        :keyword sas_token: The SAS token of the Azure blob container.
        :paramtype sas_token: ~azure.synapse.artifacts.models.SecureString
        """
        super().__init__(**kwargs)
        self.blob_container_uri = blob_container_uri
        self.sas_token = sas_token


class IntegrationRuntimeDataFlowProperties(_serialization.Model):
    """Data flow properties for managed integration runtime.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar compute_type: Compute type of the cluster which will execute data flow job. Known values
     are: "General", "MemoryOptimized", and "ComputeOptimized".
    :vartype compute_type: str or ~azure.synapse.artifacts.models.DataFlowComputeType
    :ivar core_count: Core count of the cluster which will execute data flow job. Supported values
     are: 8, 16, 32, 48, 80, 144 and 272.
    :vartype core_count: int
    :ivar time_to_live: Time to live (in minutes) setting of the cluster which will execute data
     flow job.
    :vartype time_to_live: int
    :ivar cleanup: Cluster will not be recycled and it will be used in next data flow activity run
     until TTL (time to live) is reached if this is set as false. Default is true.
    :vartype cleanup: bool
    """

    _validation = {
        "time_to_live": {"minimum": 0},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "compute_type": {"key": "computeType", "type": "str"},
        "core_count": {"key": "coreCount", "type": "int"},
        "time_to_live": {"key": "timeToLive", "type": "int"},
        "cleanup": {"key": "cleanup", "type": "bool"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        compute_type: Optional[Union[str, "_models.DataFlowComputeType"]] = None,
        core_count: Optional[int] = None,
        time_to_live: Optional[int] = None,
        cleanup: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword compute_type: Compute type of the cluster which will execute data flow job. Known
         values are: "General", "MemoryOptimized", and "ComputeOptimized".
        :paramtype compute_type: str or ~azure.synapse.artifacts.models.DataFlowComputeType
        :keyword core_count: Core count of the cluster which will execute data flow job. Supported
         values are: 8, 16, 32, 48, 80, 144 and 272.
        :paramtype core_count: int
        :keyword time_to_live: Time to live (in minutes) setting of the cluster which will execute data
         flow job.
        :paramtype time_to_live: int
        :keyword cleanup: Cluster will not be recycled and it will be used in next data flow activity
         run until TTL (time to live) is reached if this is set as false. Default is true.
        :paramtype cleanup: bool
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.compute_type = compute_type
        self.core_count = core_count
        self.time_to_live = time_to_live
        self.cleanup = cleanup


class IntegrationRuntimeDataProxyProperties(_serialization.Model):
    """Data proxy properties for a managed dedicated integration runtime.

    :ivar connect_via: The self-hosted integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.EntityReference
    :ivar staging_linked_service: The staging linked service reference.
    :vartype staging_linked_service: ~azure.synapse.artifacts.models.EntityReference
    :ivar path: The path to contain the staged data in the Blob storage.
    :vartype path: str
    """

    _attribute_map = {
        "connect_via": {"key": "connectVia", "type": "EntityReference"},
        "staging_linked_service": {"key": "stagingLinkedService", "type": "EntityReference"},
        "path": {"key": "path", "type": "str"},
    }

    def __init__(
        self,
        *,
        connect_via: Optional["_models.EntityReference"] = None,
        staging_linked_service: Optional["_models.EntityReference"] = None,
        path: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword connect_via: The self-hosted integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.EntityReference
        :keyword staging_linked_service: The staging linked service reference.
        :paramtype staging_linked_service: ~azure.synapse.artifacts.models.EntityReference
        :keyword path: The path to contain the staged data in the Blob storage.
        :paramtype path: str
        """
        super().__init__(**kwargs)
        self.connect_via = connect_via
        self.staging_linked_service = staging_linked_service
        self.path = path


class IntegrationRuntimeDebugResource(SubResourceDebugResource):
    """Integration runtime debug resource.

    All required parameters must be populated in order to send to Azure.

    :ivar name: The resource name.
    :vartype name: str
    :ivar properties: Integration runtime properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.IntegrationRuntime
    """

    _validation = {
        "properties": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "properties": {"key": "properties", "type": "IntegrationRuntime"},
    }

    def __init__(self, *, properties: "_models.IntegrationRuntime", name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The resource name.
        :paramtype name: str
        :keyword properties: Integration runtime properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.IntegrationRuntime
        """
        super().__init__(name=name, **kwargs)
        self.properties = properties


class IntegrationRuntimeListResponse(_serialization.Model):
    """A list of integration runtime resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of integration runtimes. Required.
    :vartype value: list[~azure.synapse.artifacts.models.IntegrationRuntimeResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[IntegrationRuntimeResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.IntegrationRuntimeResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of integration runtimes. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.IntegrationRuntimeResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class IntegrationRuntimeReference(_serialization.Model):
    """Integration runtime reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of integration runtime. Required. "IntegrationRuntimeReference"
    :vartype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeReferenceType
    :ivar reference_name: Reference integration runtime name. Required.
    :vartype reference_name: str
    :ivar parameters: Arguments for integration runtime.
    :vartype parameters: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
        "parameters": {"key": "parameters", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.IntegrationRuntimeReferenceType"],
        reference_name: str,
        parameters: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Type of integration runtime. Required. "IntegrationRuntimeReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeReferenceType
        :keyword reference_name: Reference integration runtime name. Required.
        :paramtype reference_name: str
        :keyword parameters: Arguments for integration runtime.
        :paramtype parameters: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name
        self.parameters = parameters


class IntegrationRuntimeResource(SubResource):
    """Integration runtime resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Integration runtime properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.IntegrationRuntime
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "IntegrationRuntime"},
    }

    def __init__(self, *, properties: "_models.IntegrationRuntime", **kwargs: Any) -> None:
        """
        :keyword properties: Integration runtime properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.IntegrationRuntime
        """
        super().__init__(**kwargs)
        self.properties = properties


class IntegrationRuntimeSsisCatalogInfo(_serialization.Model):
    """Catalog information for managed dedicated integration runtime.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar catalog_server_endpoint: The catalog database server URL.
    :vartype catalog_server_endpoint: str
    :ivar catalog_admin_user_name: The administrator user name of catalog database.
    :vartype catalog_admin_user_name: str
    :ivar catalog_admin_password: The password of the administrator user account of the catalog
     database.
    :vartype catalog_admin_password: ~azure.synapse.artifacts.models.SecureString
    :ivar catalog_pricing_tier: The pricing tier for the catalog database. The valid values could
     be found in https://azure.microsoft.com/en-us/pricing/details/sql-database/. Known values are:
     "Basic", "Standard", "Premium", and "PremiumRS".
    :vartype catalog_pricing_tier: str or
     ~azure.synapse.artifacts.models.IntegrationRuntimeSsisCatalogPricingTier
    """

    _validation = {
        "catalog_admin_user_name": {"max_length": 128, "min_length": 1},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "catalog_server_endpoint": {"key": "catalogServerEndpoint", "type": "str"},
        "catalog_admin_user_name": {"key": "catalogAdminUserName", "type": "str"},
        "catalog_admin_password": {"key": "catalogAdminPassword", "type": "SecureString"},
        "catalog_pricing_tier": {"key": "catalogPricingTier", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        catalog_server_endpoint: Optional[str] = None,
        catalog_admin_user_name: Optional[str] = None,
        catalog_admin_password: Optional["_models.SecureString"] = None,
        catalog_pricing_tier: Optional[Union[str, "_models.IntegrationRuntimeSsisCatalogPricingTier"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword catalog_server_endpoint: The catalog database server URL.
        :paramtype catalog_server_endpoint: str
        :keyword catalog_admin_user_name: The administrator user name of catalog database.
        :paramtype catalog_admin_user_name: str
        :keyword catalog_admin_password: The password of the administrator user account of the catalog
         database.
        :paramtype catalog_admin_password: ~azure.synapse.artifacts.models.SecureString
        :keyword catalog_pricing_tier: The pricing tier for the catalog database. The valid values
         could be found in https://azure.microsoft.com/en-us/pricing/details/sql-database/. Known values
         are: "Basic", "Standard", "Premium", and "PremiumRS".
        :paramtype catalog_pricing_tier: str or
         ~azure.synapse.artifacts.models.IntegrationRuntimeSsisCatalogPricingTier
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.catalog_server_endpoint = catalog_server_endpoint
        self.catalog_admin_user_name = catalog_admin_user_name
        self.catalog_admin_password = catalog_admin_password
        self.catalog_pricing_tier = catalog_pricing_tier


class IntegrationRuntimeSsisProperties(_serialization.Model):
    """SSIS properties for managed integration runtime.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar catalog_info: Catalog information for managed dedicated integration runtime.
    :vartype catalog_info: ~azure.synapse.artifacts.models.IntegrationRuntimeSsisCatalogInfo
    :ivar license_type: License type for bringing your own license scenario. Known values are:
     "BasePrice" and "LicenseIncluded".
    :vartype license_type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeLicenseType
    :ivar custom_setup_script_properties: Custom setup script properties for a managed dedicated
     integration runtime.
    :vartype custom_setup_script_properties:
     ~azure.synapse.artifacts.models.IntegrationRuntimeCustomSetupScriptProperties
    :ivar data_proxy_properties: Data proxy properties for a managed dedicated integration runtime.
    :vartype data_proxy_properties:
     ~azure.synapse.artifacts.models.IntegrationRuntimeDataProxyProperties
    :ivar edition: The edition for the SSIS Integration Runtime. Known values are: "Standard" and
     "Enterprise".
    :vartype edition: str or ~azure.synapse.artifacts.models.IntegrationRuntimeEdition
    :ivar express_custom_setup_properties: Custom setup without script properties for a SSIS
     integration runtime.
    :vartype express_custom_setup_properties: list[~azure.synapse.artifacts.models.CustomSetupBase]
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "catalog_info": {"key": "catalogInfo", "type": "IntegrationRuntimeSsisCatalogInfo"},
        "license_type": {"key": "licenseType", "type": "str"},
        "custom_setup_script_properties": {
            "key": "customSetupScriptProperties",
            "type": "IntegrationRuntimeCustomSetupScriptProperties",
        },
        "data_proxy_properties": {"key": "dataProxyProperties", "type": "IntegrationRuntimeDataProxyProperties"},
        "edition": {"key": "edition", "type": "str"},
        "express_custom_setup_properties": {"key": "expressCustomSetupProperties", "type": "[CustomSetupBase]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        catalog_info: Optional["_models.IntegrationRuntimeSsisCatalogInfo"] = None,
        license_type: Optional[Union[str, "_models.IntegrationRuntimeLicenseType"]] = None,
        custom_setup_script_properties: Optional["_models.IntegrationRuntimeCustomSetupScriptProperties"] = None,
        data_proxy_properties: Optional["_models.IntegrationRuntimeDataProxyProperties"] = None,
        edition: Optional[Union[str, "_models.IntegrationRuntimeEdition"]] = None,
        express_custom_setup_properties: Optional[List["_models.CustomSetupBase"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword catalog_info: Catalog information for managed dedicated integration runtime.
        :paramtype catalog_info: ~azure.synapse.artifacts.models.IntegrationRuntimeSsisCatalogInfo
        :keyword license_type: License type for bringing your own license scenario. Known values are:
         "BasePrice" and "LicenseIncluded".
        :paramtype license_type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeLicenseType
        :keyword custom_setup_script_properties: Custom setup script properties for a managed dedicated
         integration runtime.
        :paramtype custom_setup_script_properties:
         ~azure.synapse.artifacts.models.IntegrationRuntimeCustomSetupScriptProperties
        :keyword data_proxy_properties: Data proxy properties for a managed dedicated integration
         runtime.
        :paramtype data_proxy_properties:
         ~azure.synapse.artifacts.models.IntegrationRuntimeDataProxyProperties
        :keyword edition: The edition for the SSIS Integration Runtime. Known values are: "Standard"
         and "Enterprise".
        :paramtype edition: str or ~azure.synapse.artifacts.models.IntegrationRuntimeEdition
        :keyword express_custom_setup_properties: Custom setup without script properties for a SSIS
         integration runtime.
        :paramtype express_custom_setup_properties:
         list[~azure.synapse.artifacts.models.CustomSetupBase]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.catalog_info = catalog_info
        self.license_type = license_type
        self.custom_setup_script_properties = custom_setup_script_properties
        self.data_proxy_properties = data_proxy_properties
        self.edition = edition
        self.express_custom_setup_properties = express_custom_setup_properties


class IntegrationRuntimeVNetProperties(_serialization.Model):
    """VNet properties for managed integration runtime.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar v_net_id: The ID of the VNet that this integration runtime will join.
    :vartype v_net_id: str
    :ivar subnet: The name of the subnet this integration runtime will join.
    :vartype subnet: str
    :ivar public_i_ps: Resource IDs of the public IP addresses that this integration runtime will
     use.
    :vartype public_i_ps: list[str]
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "v_net_id": {"key": "vNetId", "type": "str"},
        "subnet": {"key": "subnet", "type": "str"},
        "public_i_ps": {"key": "publicIPs", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        v_net_id: Optional[str] = None,
        subnet: Optional[str] = None,
        public_i_ps: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword v_net_id: The ID of the VNet that this integration runtime will join.
        :paramtype v_net_id: str
        :keyword subnet: The name of the subnet this integration runtime will join.
        :paramtype subnet: str
        :keyword public_i_ps: Resource IDs of the public IP addresses that this integration runtime
         will use.
        :paramtype public_i_ps: list[str]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.v_net_id = v_net_id
        self.subnet = subnet
        self.public_i_ps = public_i_ps


class JiraLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Jira Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The IP address or host name of the Jira service. (e.g. jira.example.com). Required.
    :vartype host: JSON
    :ivar port: The TCP port that the Jira server uses to listen for client connections. The
     default value is 443 if connecting through HTTPS, or 8080 if connecting through HTTP.
    :vartype port: JSON
    :ivar username: The user name that you use to access Jira Service. Required.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name that you provided in the username
     field.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "username": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        username: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The IP address or host name of the Jira service. (e.g. jira.example.com).
         Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the Jira server uses to listen for client connections. The
         default value is 443 if connecting through HTTPS, or 8080 if connecting through HTTP.
        :paramtype port: JSON
        :keyword username: The user name that you use to access Jira Service. Required.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name that you provided in the
         username field.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Jira"
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class JiraObjectDataset(Dataset):
    """Jira Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "JiraObject"
        self.table_name = table_name


class JiraSource(TabularSource):
    """A copy activity Jira Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "JiraSource"
        self.query = query


class JsonDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Json dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the json data storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar encoding_name: The code page name of the preferred encoding. If not specified, the
     default value is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column
     of the table in the following link to set supported values:
     https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
     resultType string).
    :vartype encoding_name: JSON
    :ivar compression: The data compression method used for the json dataset.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "encoding_name": {"key": "typeProperties.encodingName", "type": "object"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        encoding_name: Optional[JSON] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the json data storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword encoding_name: The code page name of the preferred encoding. If not specified, the
         default value is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column
         of the table in the following link to set supported values:
         https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
         resultType string).
        :paramtype encoding_name: JSON
        :keyword compression: The data compression method used for the json dataset.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Json"
        self.location = location
        self.encoding_name = encoding_name
        self.compression = compression


class JsonFormat(DatasetStorageFormat):
    """The data stored in JSON format.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    :ivar file_pattern: File pattern of JSON. To be more specific, the way of separating a
     collection of JSON objects. The default value is 'setOfObjects'. It is case-sensitive.
    :vartype file_pattern: JSON
    :ivar nesting_separator: The character used to separate nesting levels. Default value is '.'
     (dot). Type: string (or Expression with resultType string).
    :vartype nesting_separator: JSON
    :ivar encoding_name: The code page name of the preferred encoding. If not provided, the default
     value is 'utf-8', unless the byte order mark (BOM) denotes another Unicode encoding. The full
     list of supported values can be found in the 'Name' column of the table of encodings in the
     following reference: https://go.microsoft.com/fwlink/?linkid=861078. Type: string (or
     Expression with resultType string).
    :vartype encoding_name: JSON
    :ivar json_node_reference: The JSONPath of the JSON array element to be flattened. Example:
     "$.ArrayPath". Type: string (or Expression with resultType string).
    :vartype json_node_reference: JSON
    :ivar json_path_definition: The JSONPath definition for each column mapping with a customized
     column name to extract data from JSON file. For fields under root object, start with "$"; for
     fields inside the array chosen by jsonNodeReference property, start from the array element.
     Example: {"Column1": "$.Column1Path", "Column2": "Column2PathInArray"}. Type: object (or
     Expression with resultType object).
    :vartype json_path_definition: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
        "file_pattern": {"key": "filePattern", "type": "object"},
        "nesting_separator": {"key": "nestingSeparator", "type": "object"},
        "encoding_name": {"key": "encodingName", "type": "object"},
        "json_node_reference": {"key": "jsonNodeReference", "type": "object"},
        "json_path_definition": {"key": "jsonPathDefinition", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        file_pattern: Optional[JSON] = None,
        nesting_separator: Optional[JSON] = None,
        encoding_name: Optional[JSON] = None,
        json_node_reference: Optional[JSON] = None,
        json_path_definition: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        :keyword file_pattern: File pattern of JSON. To be more specific, the way of separating a
         collection of JSON objects. The default value is 'setOfObjects'. It is case-sensitive.
        :paramtype file_pattern: JSON
        :keyword nesting_separator: The character used to separate nesting levels. Default value is '.'
         (dot). Type: string (or Expression with resultType string).
        :paramtype nesting_separator: JSON
        :keyword encoding_name: The code page name of the preferred encoding. If not provided, the
         default value is 'utf-8', unless the byte order mark (BOM) denotes another Unicode encoding.
         The full list of supported values can be found in the 'Name' column of the table of encodings
         in the following reference: https://go.microsoft.com/fwlink/?linkid=861078. Type: string (or
         Expression with resultType string).
        :paramtype encoding_name: JSON
        :keyword json_node_reference: The JSONPath of the JSON array element to be flattened. Example:
         "$.ArrayPath". Type: string (or Expression with resultType string).
        :paramtype json_node_reference: JSON
        :keyword json_path_definition: The JSONPath definition for each column mapping with a
         customized column name to extract data from JSON file. For fields under root object, start with
         "$"; for fields inside the array chosen by jsonNodeReference property, start from the array
         element. Example: {"Column1": "$.Column1Path", "Column2": "Column2PathInArray"}. Type: object
         (or Expression with resultType object).
        :paramtype json_path_definition: JSON
        """
        super().__init__(
            additional_properties=additional_properties, serializer=serializer, deserializer=deserializer, **kwargs
        )
        self.type: str = "JsonFormat"
        self.file_pattern = file_pattern
        self.nesting_separator = nesting_separator
        self.encoding_name = encoding_name
        self.json_node_reference = json_node_reference
        self.json_path_definition = json_path_definition


class JsonReadSettings(FormatReadSettings):
    """Json read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar compression_properties: Compression settings.
    :vartype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "compression_properties": {"key": "compressionProperties", "type": "CompressionReadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        compression_properties: Optional["_models.CompressionReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword compression_properties: Compression settings.
        :paramtype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "JsonReadSettings"
        self.compression_properties = compression_properties


class JsonSink(CopySink):
    """A copy activity Json sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Json store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: Json format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.JsonWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "JsonWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.JsonWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Json store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: Json format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.JsonWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "JsonSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class JsonSource(CopySource):
    """A copy activity Json source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Json store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: Json format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.JsonReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "formatSettings", "type": "JsonReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.JsonReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Json store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: Json format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.JsonReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "JsonSource"
        self.store_settings = store_settings
        self.format_settings = format_settings
        self.additional_columns = additional_columns


class JsonWriteSettings(FormatWriteSettings):
    """Json write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar file_pattern: File pattern of JSON. This setting controls the way a collection of JSON
     objects will be treated. The default value is 'setOfObjects'. It is case-sensitive.
    :vartype file_pattern: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "file_pattern": {"key": "filePattern", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        file_pattern: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword file_pattern: File pattern of JSON. This setting controls the way a collection of JSON
         objects will be treated. The default value is 'setOfObjects'. It is case-sensitive.
        :paramtype file_pattern: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "JsonWriteSettings"
        self.file_pattern = file_pattern


class KqlScript(_serialization.Model):
    """KqlScript.

    :ivar content:
    :vartype content: ~azure.synapse.artifacts.models.KqlScriptContent
    """

    _attribute_map = {
        "content": {"key": "content", "type": "KqlScriptContent"},
    }

    def __init__(self, *, content: Optional["_models.KqlScriptContent"] = None, **kwargs: Any) -> None:
        """
        :keyword content:
        :paramtype content: ~azure.synapse.artifacts.models.KqlScriptContent
        """
        super().__init__(**kwargs)
        self.content = content


class KqlScriptContent(_serialization.Model):
    """KqlScriptContent.

    :ivar query:
    :vartype query: str
    :ivar metadata:
    :vartype metadata: ~azure.synapse.artifacts.models.KqlScriptContentMetadata
    :ivar current_connection:
    :vartype current_connection: ~azure.synapse.artifacts.models.KqlScriptContentCurrentConnection
    """

    _attribute_map = {
        "query": {"key": "query", "type": "str"},
        "metadata": {"key": "metadata", "type": "KqlScriptContentMetadata"},
        "current_connection": {"key": "currentConnection", "type": "KqlScriptContentCurrentConnection"},
    }

    def __init__(
        self,
        *,
        query: Optional[str] = None,
        metadata: Optional["_models.KqlScriptContentMetadata"] = None,
        current_connection: Optional["_models.KqlScriptContentCurrentConnection"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword query:
        :paramtype query: str
        :keyword metadata:
        :paramtype metadata: ~azure.synapse.artifacts.models.KqlScriptContentMetadata
        :keyword current_connection:
        :paramtype current_connection:
         ~azure.synapse.artifacts.models.KqlScriptContentCurrentConnection
        """
        super().__init__(**kwargs)
        self.query = query
        self.metadata = metadata
        self.current_connection = current_connection


class KqlScriptContentCurrentConnection(_serialization.Model):
    """KqlScriptContentCurrentConnection.

    :ivar name:
    :vartype name: str
    :ivar pool_name:
    :vartype pool_name: str
    :ivar database_name:
    :vartype database_name: str
    :ivar type:
    :vartype type: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "pool_name": {"key": "poolName", "type": "str"},
        "database_name": {"key": "databaseName", "type": "str"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(
        self,
        *,
        name: Optional[str] = None,
        pool_name: Optional[str] = None,
        database_name: Optional[str] = None,
        type: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name:
        :paramtype name: str
        :keyword pool_name:
        :paramtype pool_name: str
        :keyword database_name:
        :paramtype database_name: str
        :keyword type:
        :paramtype type: str
        """
        super().__init__(**kwargs)
        self.name = name
        self.pool_name = pool_name
        self.database_name = database_name
        self.type = type


class KqlScriptContentMetadata(_serialization.Model):
    """KqlScriptContentMetadata.

    :ivar language:
    :vartype language: str
    """

    _attribute_map = {
        "language": {"key": "language", "type": "str"},
    }

    def __init__(self, *, language: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword language:
        :paramtype language: str
        """
        super().__init__(**kwargs)
        self.language = language


class KqlScriptResource(_serialization.Model):
    """KqlScriptResource.

    :ivar id:
    :vartype id: str
    :ivar name:
    :vartype name: str
    :ivar type:
    :vartype type: str
    :ivar properties: Properties of sql script.
    :vartype properties: ~azure.synapse.artifacts.models.KqlScript
    """

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "properties": {"key": "properties", "type": "KqlScript"},
    }

    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        type: Optional[str] = None,
        properties: Optional["_models.KqlScript"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id:
        :paramtype id: str
        :keyword name:
        :paramtype name: str
        :keyword type:
        :paramtype type: str
        :keyword properties: Properties of sql script.
        :paramtype properties: ~azure.synapse.artifacts.models.KqlScript
        """
        super().__init__(**kwargs)
        self.id = id
        self.name = name
        self.type = type
        self.properties = properties


class KqlScriptsResourceCollectionResponse(_serialization.Model):
    """KqlScriptsResourceCollectionResponse.

    :ivar value:
    :vartype value: list[~azure.synapse.artifacts.models.KqlScriptResource]
    :ivar next_link:
    :vartype next_link: str
    """

    _attribute_map = {
        "value": {"key": "value", "type": "[KqlScriptResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self,
        *,
        value: Optional[List["_models.KqlScriptResource"]] = None,
        next_link: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword value:
        :paramtype value: list[~azure.synapse.artifacts.models.KqlScriptResource]
        :keyword next_link:
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class LakeHouseLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Microsoft Fabric Lakehouse linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar workspace_id: The ID of Microsoft Fabric workspace. Type: string (or Expression with
     resultType string).
    :vartype workspace_id: JSON
    :ivar artifact_id: The ID of Microsoft Fabric Lakehouse artifact. Type: string (or Expression
     with resultType string).
    :vartype artifact_id: JSON
    :ivar authentication_type: The authentication type to use. Known values are:
     "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.LakehouseAuthenticationType
    :ivar service_principal_id: The ID of the application used to authenticate against Microsoft
     Fabric Lakehouse. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The Key of the application used to authenticate against Microsoft
     Fabric Lakehouse.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "workspace_id": {"key": "typeProperties.workspaceId", "type": "object"},
        "artifact_id": {"key": "typeProperties.artifactId", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        workspace_id: Optional[JSON] = None,
        artifact_id: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.LakehouseAuthenticationType"]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        encrypted_credential: Optional[str] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword workspace_id: The ID of Microsoft Fabric workspace. Type: string (or Expression with
         resultType string).
        :paramtype workspace_id: JSON
        :keyword artifact_id: The ID of Microsoft Fabric Lakehouse artifact. Type: string (or
         Expression with resultType string).
        :paramtype artifact_id: JSON
        :keyword authentication_type: The authentication type to use. Known values are:
         "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.LakehouseAuthenticationType
        :keyword service_principal_id: The ID of the application used to authenticate against Microsoft
         Fabric Lakehouse. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The Key of the application used to authenticate against
         Microsoft Fabric Lakehouse.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Lakehouse"
        self.workspace_id = workspace_id
        self.artifact_id = artifact_id
        self.authentication_type = authentication_type
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.encrypted_credential = encrypted_credential
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.credential = credential


class LakeHouseLocation(DatasetLocation):
    """The location of Microsoft Fabric Lakehouse Files dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "LakeHouseLocation"


class LakeHouseReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Microsoft Fabric Lakehouse Files read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Microsoft Fabric Lakehouse Files wildcardFolderPath. Type: string
     (or Expression with resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Microsoft Fabric Lakehouse Files wildcardFileName. Type: string (or
     Expression with resultType string).
    :vartype wildcard_file_name: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Microsoft Fabric Lakehouse Files wildcardFolderPath. Type:
         string (or Expression with resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Microsoft Fabric Lakehouse Files wildcardFileName. Type: string
         (or Expression with resultType string).
        :paramtype wildcard_file_name: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "LakeHouseReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.file_list_path = file_list_path
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end


class LakeHouseTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Microsoft Fabric Lakehouse Table.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of Microsoft Fabric Lakehouse Table. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The name of Microsoft Fabric Lakehouse Table. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of Microsoft Fabric Lakehouse Table.
         Type: string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The name of Microsoft Fabric Lakehouse Table. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "LakehouseTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class LakeHouseTableSink(CopySink):
    """A copy activity for Microsoft Fabric Lakehouse Table sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar table_action_option: The type of table action for Lakehouse Table sink. Possible values
     include: "None", "Append", "Overwrite".
    :vartype table_action_option: JSON
    :ivar partition_option: Create partitions in folder structure based on one or multiple columns.
     Each distinct column value (pair) will be a new partition. Possible values include: "None",
     "PartitionByKey".
    :vartype partition_option: JSON
    :ivar partition_name_list: Specify the partition column names from sink columns. Type: array of
     objects (or Expression with resultType array of objects).
    :vartype partition_name_list: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "table_action_option": {"key": "tableActionOption", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_name_list": {"key": "partitionNameList", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        table_action_option: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_name_list: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword table_action_option: The type of table action for Lakehouse Table sink. Possible
         values include: "None", "Append", "Overwrite".
        :paramtype table_action_option: JSON
        :keyword partition_option: Create partitions in folder structure based on one or multiple
         columns. Each distinct column value (pair) will be a new partition. Possible values include:
         "None", "PartitionByKey".
        :paramtype partition_option: JSON
        :keyword partition_name_list: Specify the partition column names from sink columns. Type: array
         of objects (or Expression with resultType array of objects).
        :paramtype partition_name_list: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "LakeHouseTableSink"
        self.table_action_option = table_action_option
        self.partition_option = partition_option
        self.partition_name_list = partition_name_list


class LakeHouseTableSource(CopySource):
    """A copy activity source for Microsoft Fabric Lakehouse Table.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar timestamp_as_of: Query an older snapshot by timestamp. Type: string (or Expression with
     resultType string).
    :vartype timestamp_as_of: JSON
    :ivar version_as_of: Query an older snapshot by version. Type: integer (or Expression with
     resultType integer).
    :vartype version_as_of: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "timestamp_as_of": {"key": "timestampAsOf", "type": "object"},
        "version_as_of": {"key": "versionAsOf", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        timestamp_as_of: Optional[JSON] = None,
        version_as_of: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword timestamp_as_of: Query an older snapshot by timestamp. Type: string (or Expression
         with resultType string).
        :paramtype timestamp_as_of: JSON
        :keyword version_as_of: Query an older snapshot by version. Type: integer (or Expression with
         resultType integer).
        :paramtype version_as_of: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "LakeHouseTableSource"
        self.timestamp_as_of = timestamp_as_of
        self.version_as_of = version_as_of
        self.additional_columns = additional_columns


class LakeHouseWriteSettings(StoreWriteSettings):
    """Microsoft Fabric Lakehouse Files write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "LakeHouseWriteSettings"


class LibraryInfo(_serialization.Model):
    """Library/package information of a Big Data pool powered by Apache Spark.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar name: Name of the library.
    :vartype name: str
    :ivar path: Storage blob path of library.
    :vartype path: str
    :ivar container_name: Storage blob container name.
    :vartype container_name: str
    :ivar uploaded_timestamp: The last update time of the library.
    :vartype uploaded_timestamp: ~datetime.datetime
    :ivar type: Type of the library.
    :vartype type: str
    :ivar provisioning_status: Provisioning status of the library/package.
    :vartype provisioning_status: str
    :ivar creator_id: Creator Id of the library/package.
    :vartype creator_id: str
    """

    _validation = {
        "provisioning_status": {"readonly": True},
        "creator_id": {"readonly": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "path": {"key": "path", "type": "str"},
        "container_name": {"key": "containerName", "type": "str"},
        "uploaded_timestamp": {"key": "uploadedTimestamp", "type": "iso-8601"},
        "type": {"key": "type", "type": "str"},
        "provisioning_status": {"key": "provisioningStatus", "type": "str"},
        "creator_id": {"key": "creatorId", "type": "str"},
    }

    def __init__(
        self,
        *,
        name: Optional[str] = None,
        path: Optional[str] = None,
        container_name: Optional[str] = None,
        uploaded_timestamp: Optional[datetime.datetime] = None,
        type: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: Name of the library.
        :paramtype name: str
        :keyword path: Storage blob path of library.
        :paramtype path: str
        :keyword container_name: Storage blob container name.
        :paramtype container_name: str
        :keyword uploaded_timestamp: The last update time of the library.
        :paramtype uploaded_timestamp: ~datetime.datetime
        :keyword type: Type of the library.
        :paramtype type: str
        """
        super().__init__(**kwargs)
        self.name = name
        self.path = path
        self.container_name = container_name
        self.uploaded_timestamp = uploaded_timestamp
        self.type = type
        self.provisioning_status = None
        self.creator_id = None


class LibraryListResponse(_serialization.Model):
    """A list of Library resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of Library. Required.
    :vartype value: list[~azure.synapse.artifacts.models.LibraryResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[LibraryResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.LibraryResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of Library. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.LibraryResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class LibraryRequirements(_serialization.Model):
    """Library requirements for a Big Data pool powered by Apache Spark.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar time: The last update time of the library requirements file.
    :vartype time: ~datetime.datetime
    :ivar content: The library requirements.
    :vartype content: str
    :ivar filename: The filename of the library requirements file.
    :vartype filename: str
    """

    _validation = {
        "time": {"readonly": True},
    }

    _attribute_map = {
        "time": {"key": "time", "type": "iso-8601"},
        "content": {"key": "content", "type": "str"},
        "filename": {"key": "filename", "type": "str"},
    }

    def __init__(self, *, content: Optional[str] = None, filename: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword content: The library requirements.
        :paramtype content: str
        :keyword filename: The filename of the library requirements file.
        :paramtype filename: str
        """
        super().__init__(**kwargs)
        self.time = None
        self.content = content
        self.filename = filename


class LibraryResource(SubResource):
    """Library response details.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Library/package properties. Required.
    :vartype properties: ~azure.synapse.artifacts.models.LibraryResourceProperties
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "LibraryResourceProperties"},
    }

    def __init__(self, *, properties: "_models.LibraryResourceProperties", **kwargs: Any) -> None:
        """
        :keyword properties: Library/package properties. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.LibraryResourceProperties
        """
        super().__init__(**kwargs)
        self.properties = properties


class LibraryResourceInfo(_serialization.Model):
    """Library resource info.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar record_id: record Id of the library/package.
    :vartype record_id: int
    :ivar state: Provisioning status of the library/package.
    :vartype state: str
    :ivar created: The creation time of the library/package.
    :vartype created: str
    :ivar changed: The last updated time of the library/package.
    :vartype changed: str
    :ivar type: The type of the resource. E.g. LibraryArtifact.
    :vartype type: str
    :ivar name: Name of the library/package.
    :vartype name: str
    :ivar operation_id: Operation Id of the operation performed on library/package.
    :vartype operation_id: str
    :ivar artifact_id: artifact Id of the library/package.
    :vartype artifact_id: str
    """

    _validation = {
        "id": {"readonly": True},
        "record_id": {"readonly": True},
        "state": {"readonly": True},
        "created": {"readonly": True},
        "changed": {"readonly": True},
        "type": {"readonly": True},
        "name": {"readonly": True},
        "operation_id": {"readonly": True},
        "artifact_id": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "record_id": {"key": "recordId", "type": "int"},
        "state": {"key": "state", "type": "str"},
        "created": {"key": "created", "type": "str"},
        "changed": {"key": "changed", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "operation_id": {"key": "operationId", "type": "str"},
        "artifact_id": {"key": "artifactId", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.id = None
        self.record_id = None
        self.state = None
        self.created = None
        self.changed = None
        self.type = None
        self.name = None
        self.operation_id = None
        self.artifact_id = None


class LibraryResourceProperties(_serialization.Model):
    """Library/package properties.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar name: Name of the library/package.
    :vartype name: str
    :ivar path: Location of library/package in storage account.
    :vartype path: str
    :ivar container_name: Container name of the library/package.
    :vartype container_name: str
    :ivar uploaded_timestamp: The last update time of the library/package.
    :vartype uploaded_timestamp: str
    :ivar type: Type of the library/package.
    :vartype type: str
    :ivar provisioning_status: Provisioning status of the library/package.
    :vartype provisioning_status: str
    :ivar creator_id: Creator Id of the library/package.
    :vartype creator_id: str
    """

    _validation = {
        "name": {"readonly": True},
        "path": {"readonly": True},
        "container_name": {"readonly": True},
        "uploaded_timestamp": {"readonly": True},
        "type": {"readonly": True},
        "provisioning_status": {"readonly": True},
        "creator_id": {"readonly": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "path": {"key": "path", "type": "str"},
        "container_name": {"key": "containerName", "type": "str"},
        "uploaded_timestamp": {"key": "uploadedTimestamp", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "provisioning_status": {"key": "provisioningStatus", "type": "str"},
        "creator_id": {"key": "creatorId", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.name = None
        self.path = None
        self.container_name = None
        self.uploaded_timestamp = None
        self.type = None
        self.provisioning_status = None
        self.creator_id = None


class LinkConnection(_serialization.Model):
    """LinkConnection.

    :ivar source_database: Properties of link connection's source database.
    :vartype source_database: ~azure.synapse.artifacts.models.LinkConnectionSourceDatabase
    :ivar target_database: Properties of link connection's target database.
    :vartype target_database: ~azure.synapse.artifacts.models.LinkConnectionTargetDatabase
    :ivar landing_zone: Properties of link connection's landing zone.
    :vartype landing_zone: ~azure.synapse.artifacts.models.LinkConnectionLandingZone
    :ivar compute: Properties of link connection's compute.
    :vartype compute: ~azure.synapse.artifacts.models.LinkConnectionCompute
    """

    _attribute_map = {
        "source_database": {"key": "sourceDatabase", "type": "LinkConnectionSourceDatabase"},
        "target_database": {"key": "targetDatabase", "type": "LinkConnectionTargetDatabase"},
        "landing_zone": {"key": "landingZone", "type": "LinkConnectionLandingZone"},
        "compute": {"key": "compute", "type": "LinkConnectionCompute"},
    }

    def __init__(
        self,
        *,
        source_database: Optional["_models.LinkConnectionSourceDatabase"] = None,
        target_database: Optional["_models.LinkConnectionTargetDatabase"] = None,
        landing_zone: Optional["_models.LinkConnectionLandingZone"] = None,
        compute: Optional["_models.LinkConnectionCompute"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword source_database: Properties of link connection's source database.
        :paramtype source_database: ~azure.synapse.artifacts.models.LinkConnectionSourceDatabase
        :keyword target_database: Properties of link connection's target database.
        :paramtype target_database: ~azure.synapse.artifacts.models.LinkConnectionTargetDatabase
        :keyword landing_zone: Properties of link connection's landing zone.
        :paramtype landing_zone: ~azure.synapse.artifacts.models.LinkConnectionLandingZone
        :keyword compute: Properties of link connection's compute.
        :paramtype compute: ~azure.synapse.artifacts.models.LinkConnectionCompute
        """
        super().__init__(**kwargs)
        self.source_database = source_database
        self.target_database = target_database
        self.landing_zone = landing_zone
        self.compute = compute


class LinkConnectionCompute(_serialization.Model):
    """LinkConnectionCompute.

    :ivar core_count: Compute core count used by the link connection.
    :vartype core_count: int
    :ivar compute_type: Link connection's compute type.
    :vartype compute_type: str
    :ivar data_process_interval_minutes: Link connection's data process interval in minutes.
    :vartype data_process_interval_minutes: int
    """

    _validation = {
        "data_process_interval_minutes": {"maximum": 60, "minimum": 20},
    }

    _attribute_map = {
        "core_count": {"key": "coreCount", "type": "int"},
        "compute_type": {"key": "computeType", "type": "str"},
        "data_process_interval_minutes": {"key": "dataProcessIntervalMinutes", "type": "int"},
    }

    def __init__(
        self,
        *,
        core_count: Optional[int] = None,
        compute_type: Optional[str] = None,
        data_process_interval_minutes: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword core_count: Compute core count used by the link connection.
        :paramtype core_count: int
        :keyword compute_type: Link connection's compute type.
        :paramtype compute_type: str
        :keyword data_process_interval_minutes: Link connection's data process interval in minutes.
        :paramtype data_process_interval_minutes: int
        """
        super().__init__(**kwargs)
        self.core_count = core_count
        self.compute_type = compute_type
        self.data_process_interval_minutes = data_process_interval_minutes


class LinkConnectionDetailedStatus(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """LinkConnectionDetailedStatus.

    :ivar id: Link connection id.
    :vartype id: str
    :ivar name: Link connection name.
    :vartype name: str
    :ivar is_applying_changes: Is link connection applying changes.
    :vartype is_applying_changes: bool
    :ivar is_partially_failed: Is link connection partially failed.
    :vartype is_partially_failed: bool
    :ivar start_time: Link connection start time.
    :vartype start_time: JSON
    :ivar stop_time: Link connection stop time.
    :vartype stop_time: JSON
    :ivar status: Link connection status, please refer to this `articles
     <https://learn.microsoft.com/azure/synapse-analytics/synapse-link/sql-database-synapse-link#monitoring>`_
     for details.
    :vartype status: str
    :ivar continuous_run_id: Link connection's corresponding continuous run id.
    :vartype continuous_run_id: str
    :ivar error: Link connection error.
    :vartype error: JSON
    :ivar refresh_status: Link connection refresh status.
    :vartype refresh_status: ~azure.synapse.artifacts.models.LinkConnectionRefreshStatus
    :ivar landing_zone_credential_expire_time: Link connection landing zone credential expire time.
    :vartype landing_zone_credential_expire_time: ~datetime.datetime
    """

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "is_applying_changes": {"key": "isApplyingChanges", "type": "bool"},
        "is_partially_failed": {"key": "isPartiallyFailed", "type": "bool"},
        "start_time": {"key": "startTime", "type": "object"},
        "stop_time": {"key": "stopTime", "type": "object"},
        "status": {"key": "status", "type": "str"},
        "continuous_run_id": {"key": "continuousRunId", "type": "str"},
        "error": {"key": "error", "type": "object"},
        "refresh_status": {"key": "refreshStatus", "type": "LinkConnectionRefreshStatus"},
        "landing_zone_credential_expire_time": {"key": "landingZoneCredentialExpireTime", "type": "iso-8601"},
    }

    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        is_applying_changes: Optional[bool] = None,
        is_partially_failed: Optional[bool] = None,
        start_time: Optional[JSON] = None,
        stop_time: Optional[JSON] = None,
        status: Optional[str] = None,
        continuous_run_id: Optional[str] = None,
        error: Optional[JSON] = None,
        refresh_status: Optional["_models.LinkConnectionRefreshStatus"] = None,
        landing_zone_credential_expire_time: Optional[datetime.datetime] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id: Link connection id.
        :paramtype id: str
        :keyword name: Link connection name.
        :paramtype name: str
        :keyword is_applying_changes: Is link connection applying changes.
        :paramtype is_applying_changes: bool
        :keyword is_partially_failed: Is link connection partially failed.
        :paramtype is_partially_failed: bool
        :keyword start_time: Link connection start time.
        :paramtype start_time: JSON
        :keyword stop_time: Link connection stop time.
        :paramtype stop_time: JSON
        :keyword status: Link connection status, please refer to this `articles
         <https://learn.microsoft.com/azure/synapse-analytics/synapse-link/sql-database-synapse-link#monitoring>`_
         for details.
        :paramtype status: str
        :keyword continuous_run_id: Link connection's corresponding continuous run id.
        :paramtype continuous_run_id: str
        :keyword error: Link connection error.
        :paramtype error: JSON
        :keyword refresh_status: Link connection refresh status.
        :paramtype refresh_status: ~azure.synapse.artifacts.models.LinkConnectionRefreshStatus
        :keyword landing_zone_credential_expire_time: Link connection landing zone credential expire
         time.
        :paramtype landing_zone_credential_expire_time: ~datetime.datetime
        """
        super().__init__(**kwargs)
        self.id = id
        self.name = name
        self.is_applying_changes = is_applying_changes
        self.is_partially_failed = is_partially_failed
        self.start_time = start_time
        self.stop_time = stop_time
        self.status = status
        self.continuous_run_id = continuous_run_id
        self.error = error
        self.refresh_status = refresh_status
        self.landing_zone_credential_expire_time = landing_zone_credential_expire_time


class LinkConnectionLandingZone(_serialization.Model):
    """LinkConnectionLandingZone.

    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar file_system: Landing zone's file system name.
    :vartype file_system: str
    :ivar folder_path: Landing zone's folder path name.
    :vartype folder_path: str
    :ivar sas_token: Landing zone's sas token.
    :vartype sas_token: ~azure.synapse.artifacts.models.SecureString
    """

    _attribute_map = {
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "file_system": {"key": "fileSystem", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "str"},
        "sas_token": {"key": "sasToken", "type": "SecureString"},
    }

    def __init__(
        self,
        *,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        file_system: Optional[str] = None,
        folder_path: Optional[str] = None,
        sas_token: Optional["_models.SecureString"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword file_system: Landing zone's file system name.
        :paramtype file_system: str
        :keyword folder_path: Landing zone's folder path name.
        :paramtype folder_path: str
        :keyword sas_token: Landing zone's sas token.
        :paramtype sas_token: ~azure.synapse.artifacts.models.SecureString
        """
        super().__init__(**kwargs)
        self.linked_service = linked_service
        self.file_system = file_system
        self.folder_path = folder_path
        self.sas_token = sas_token


class LinkConnectionListResponse(_serialization.Model):
    """LinkConnectionListResponse.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List link connection value. Required.
    :vartype value: list[~azure.synapse.artifacts.models.LinkConnectionResource]
    :ivar next_link: List link connections next link.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[LinkConnectionResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.LinkConnectionResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List link connection value. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.LinkConnectionResource]
        :keyword next_link: List link connections next link.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class LinkConnectionQueryTableStatus(_serialization.Model):
    """LinkConnectionQueryTableStatus.

    :ivar value: Link tables' status.
    :vartype value: list[~azure.synapse.artifacts.models.LinkTableStatus]
    :ivar continuation_token: Continuation token to query table status.
    :vartype continuation_token: JSON
    """

    _attribute_map = {
        "value": {"key": "value", "type": "[LinkTableStatus]"},
        "continuation_token": {"key": "continuationToken", "type": "object"},
    }

    def __init__(
        self,
        *,
        value: Optional[List["_models.LinkTableStatus"]] = None,
        continuation_token: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword value: Link tables' status.
        :paramtype value: list[~azure.synapse.artifacts.models.LinkTableStatus]
        :keyword continuation_token: Continuation token to query table status.
        :paramtype continuation_token: JSON
        """
        super().__init__(**kwargs)
        self.value = value
        self.continuation_token = continuation_token


class LinkConnectionRefreshStatus(_serialization.Model):
    """LinkConnectionRefreshStatus.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar refresh_status: Link connection refresh status.
    :vartype refresh_status: str
    :ivar error_message: Link connection refresh error message.
    :vartype error_message: str
    """

    _validation = {
        "refresh_status": {"readonly": True},
        "error_message": {"readonly": True},
    }

    _attribute_map = {
        "refresh_status": {"key": "refreshStatus", "type": "str"},
        "error_message": {"key": "errorMessage", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.refresh_status = None
        self.error_message = None


class LinkConnectionResource(_serialization.Model):
    """LinkConnectionResource.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Link connection id.
    :vartype id: str
    :ivar name: Link connection name.
    :vartype name: str
    :ivar type: Link connection type.
    :vartype type: str
    :ivar properties: Properties of link connection. Required.
    :vartype properties: ~azure.synapse.artifacts.models.LinkConnection
    :ivar description: Link connection description.
    :vartype description: str
    """

    _validation = {
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "properties": {"key": "properties", "type": "LinkConnection"},
        "description": {"key": "description", "type": "str"},
    }

    def __init__(
        self,
        *,
        properties: "_models.LinkConnection",
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        type: Optional[str] = None,
        description: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id: Link connection id.
        :paramtype id: str
        :keyword name: Link connection name.
        :paramtype name: str
        :keyword type: Link connection type.
        :paramtype type: str
        :keyword properties: Properties of link connection. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.LinkConnection
        :keyword description: Link connection description.
        :paramtype description: str
        """
        super().__init__(**kwargs)
        self.id = id
        self.name = name
        self.type = type
        self.properties = properties
        self.description = description


class LinkConnectionSourceDatabase(_serialization.Model):
    """LinkConnectionSourceDatabase.

    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar type_properties: Source database type properties.
    :vartype type_properties:
     ~azure.synapse.artifacts.models.LinkConnectionSourceDatabaseTypeProperties
    """

    _attribute_map = {
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "type_properties": {"key": "typeProperties", "type": "LinkConnectionSourceDatabaseTypeProperties"},
    }

    def __init__(
        self,
        *,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        type_properties: Optional["_models.LinkConnectionSourceDatabaseTypeProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword type_properties: Source database type properties.
        :paramtype type_properties:
         ~azure.synapse.artifacts.models.LinkConnectionSourceDatabaseTypeProperties
        """
        super().__init__(**kwargs)
        self.linked_service = linked_service
        self.type_properties = type_properties


class LinkConnectionSourceDatabaseTypeProperties(_serialization.Model):
    """LinkConnectionSourceDatabaseTypeProperties.

    :ivar resource_id: Link connection source database server's resource id.
    :vartype resource_id: str
    :ivar principal_id: Link connection source database server's principal id.
    :vartype principal_id: str
    """

    _attribute_map = {
        "resource_id": {"key": "resourceId", "type": "str"},
        "principal_id": {"key": "principalId", "type": "str"},
    }

    def __init__(self, *, resource_id: Optional[str] = None, principal_id: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword resource_id: Link connection source database server's resource id.
        :paramtype resource_id: str
        :keyword principal_id: Link connection source database server's principal id.
        :paramtype principal_id: str
        """
        super().__init__(**kwargs)
        self.resource_id = resource_id
        self.principal_id = principal_id


class LinkConnectionTargetDatabase(_serialization.Model):
    """LinkConnectionTargetDatabase.

    :ivar linked_service: Linked service reference.
    :vartype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar type_properties: Target database type properties.
    :vartype type_properties:
     ~azure.synapse.artifacts.models.LinkConnectionTargetDatabaseTypeProperties
    """

    _attribute_map = {
        "linked_service": {"key": "linkedService", "type": "LinkedServiceReference"},
        "type_properties": {"key": "typeProperties", "type": "LinkConnectionTargetDatabaseTypeProperties"},
    }

    def __init__(
        self,
        *,
        linked_service: Optional["_models.LinkedServiceReference"] = None,
        type_properties: Optional["_models.LinkConnectionTargetDatabaseTypeProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword linked_service: Linked service reference.
        :paramtype linked_service: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword type_properties: Target database type properties.
        :paramtype type_properties:
         ~azure.synapse.artifacts.models.LinkConnectionTargetDatabaseTypeProperties
        """
        super().__init__(**kwargs)
        self.linked_service = linked_service
        self.type_properties = type_properties


class LinkConnectionTargetDatabaseTypeProperties(_serialization.Model):
    """LinkConnectionTargetDatabaseTypeProperties.

    :ivar cross_table_transaction: Enable cross table transaction consistency on target database.
    :vartype cross_table_transaction: bool
    :ivar drop_existing_target_table_on_start: Drop and recreate same existing target table on link
     connection target database.
    :vartype drop_existing_target_table_on_start: bool
    :ivar action_on_existing_target_table: Action on existing target table. If not specified,
     'FailOnNonEmptyTable' action is used. Known values are: "FailOnNonEmptyTable",
     "DropAndRecreateTable", and "MergeWithExistingData".
    :vartype action_on_existing_target_table: str or
     ~azure.synapse.artifacts.models.ActionOnExistingTargetTable
    """

    _attribute_map = {
        "cross_table_transaction": {"key": "crossTableTransaction", "type": "bool"},
        "drop_existing_target_table_on_start": {"key": "dropExistingTargetTableOnStart", "type": "bool"},
        "action_on_existing_target_table": {"key": "actionOnExistingTargetTable", "type": "str"},
    }

    def __init__(
        self,
        *,
        cross_table_transaction: Optional[bool] = None,
        drop_existing_target_table_on_start: Optional[bool] = None,
        action_on_existing_target_table: Optional[Union[str, "_models.ActionOnExistingTargetTable"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword cross_table_transaction: Enable cross table transaction consistency on target
         database.
        :paramtype cross_table_transaction: bool
        :keyword drop_existing_target_table_on_start: Drop and recreate same existing target table on
         link connection target database.
        :paramtype drop_existing_target_table_on_start: bool
        :keyword action_on_existing_target_table: Action on existing target table. If not specified,
         'FailOnNonEmptyTable' action is used. Known values are: "FailOnNonEmptyTable",
         "DropAndRecreateTable", and "MergeWithExistingData".
        :paramtype action_on_existing_target_table: str or
         ~azure.synapse.artifacts.models.ActionOnExistingTargetTable
        """
        super().__init__(**kwargs)
        self.cross_table_transaction = cross_table_transaction
        self.drop_existing_target_table_on_start = drop_existing_target_table_on_start
        self.action_on_existing_target_table = action_on_existing_target_table


class LinkedIntegrationRuntimeType(_serialization.Model):
    """The base definition of a linked integration runtime.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    LinkedIntegrationRuntimeKeyAuthorization, LinkedIntegrationRuntimeRbacAuthorization

    All required parameters must be populated in order to send to Azure.

    :ivar authorization_type: The authorization type for integration runtime sharing. Required.
    :vartype authorization_type: str
    """

    _validation = {
        "authorization_type": {"required": True},
    }

    _attribute_map = {
        "authorization_type": {"key": "authorizationType", "type": "str"},
    }

    _subtype_map = {
        "authorization_type": {
            "Key": "LinkedIntegrationRuntimeKeyAuthorization",
            "RBAC": "LinkedIntegrationRuntimeRbacAuthorization",
        }
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.authorization_type: Optional[str] = None


class LinkedIntegrationRuntimeKeyAuthorization(LinkedIntegrationRuntimeType):
    """The key authorization type integration runtime.

    All required parameters must be populated in order to send to Azure.

    :ivar authorization_type: The authorization type for integration runtime sharing. Required.
    :vartype authorization_type: str
    :ivar key: The key used for authorization. Required.
    :vartype key: ~azure.synapse.artifacts.models.SecureString
    """

    _validation = {
        "authorization_type": {"required": True},
        "key": {"required": True},
    }

    _attribute_map = {
        "authorization_type": {"key": "authorizationType", "type": "str"},
        "key": {"key": "key", "type": "SecureString"},
    }

    def __init__(self, *, key: "_models.SecureString", **kwargs: Any) -> None:
        """
        :keyword key: The key used for authorization. Required.
        :paramtype key: ~azure.synapse.artifacts.models.SecureString
        """
        super().__init__(**kwargs)
        self.authorization_type: str = "Key"
        self.key = key


class LinkedIntegrationRuntimeRbacAuthorization(LinkedIntegrationRuntimeType):
    """The role based access control (RBAC) authorization type integration runtime.

    All required parameters must be populated in order to send to Azure.

    :ivar authorization_type: The authorization type for integration runtime sharing. Required.
    :vartype authorization_type: str
    :ivar resource_id: The resource identifier of the integration runtime to be shared. Required.
    :vartype resource_id: str
    """

    _validation = {
        "authorization_type": {"required": True},
        "resource_id": {"required": True},
    }

    _attribute_map = {
        "authorization_type": {"key": "authorizationType", "type": "str"},
        "resource_id": {"key": "resourceId", "type": "str"},
    }

    def __init__(self, *, resource_id: str, **kwargs: Any) -> None:
        """
        :keyword resource_id: The resource identifier of the integration runtime to be shared.
         Required.
        :paramtype resource_id: str
        """
        super().__init__(**kwargs)
        self.authorization_type: str = "RBAC"
        self.resource_id = resource_id


class LinkedServiceDebugResource(SubResourceDebugResource):
    """Linked service debug resource.

    All required parameters must be populated in order to send to Azure.

    :ivar name: The resource name.
    :vartype name: str
    :ivar properties: Properties of linked service. Required.
    :vartype properties: ~azure.synapse.artifacts.models.LinkedService
    """

    _validation = {
        "properties": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "properties": {"key": "properties", "type": "LinkedService"},
    }

    def __init__(self, *, properties: "_models.LinkedService", name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The resource name.
        :paramtype name: str
        :keyword properties: Properties of linked service. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.LinkedService
        """
        super().__init__(name=name, **kwargs)
        self.properties = properties


class LinkedServiceListResponse(_serialization.Model):
    """A list of linked service resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of linked services. Required.
    :vartype value: list[~azure.synapse.artifacts.models.LinkedServiceResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[LinkedServiceResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.LinkedServiceResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of linked services. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.LinkedServiceResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class LinkedServiceReference(_serialization.Model):
    """Linked service reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Linked service reference type. Required. "LinkedServiceReference"
    :vartype type: str or ~azure.synapse.artifacts.models.Type
    :ivar reference_name: Reference LinkedService name. Required.
    :vartype reference_name: str
    :ivar parameters: Arguments for LinkedService.
    :vartype parameters: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
        "parameters": {"key": "parameters", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.Type"],
        reference_name: str,
        parameters: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Linked service reference type. Required. "LinkedServiceReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.Type
        :keyword reference_name: Reference LinkedService name. Required.
        :paramtype reference_name: str
        :keyword parameters: Arguments for LinkedService.
        :paramtype parameters: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name
        self.parameters = parameters


class LinkedServiceResource(SubResource):
    """Linked service resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of linked service. Required.
    :vartype properties: ~azure.synapse.artifacts.models.LinkedService
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "LinkedService"},
    }

    def __init__(self, *, properties: "_models.LinkedService", **kwargs: Any) -> None:
        """
        :keyword properties: Properties of linked service. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.LinkedService
        """
        super().__init__(**kwargs)
        self.properties = properties


class LinkTableListResponse(_serialization.Model):
    """LinkTableListResponse.

    :ivar value: List link table value.
    :vartype value: list[~azure.synapse.artifacts.models.LinkTableResource]
    """

    _attribute_map = {
        "value": {"key": "value", "type": "[LinkTableResource]"},
    }

    def __init__(self, *, value: Optional[List["_models.LinkTableResource"]] = None, **kwargs: Any) -> None:
        """
        :keyword value: List link table value.
        :paramtype value: list[~azure.synapse.artifacts.models.LinkTableResource]
        """
        super().__init__(**kwargs)
        self.value = value


class LinkTableRequest(_serialization.Model):
    """LinkTableRequest.

    :ivar id: Link table id.
    :vartype id: str
    :ivar source: Source table properties for link table request.
    :vartype source: ~azure.synapse.artifacts.models.LinkTableRequestSource
    :ivar target: Target table properties for link table request.
    :vartype target: ~azure.synapse.artifacts.models.LinkTableRequestTarget
    :ivar operation_type: Link table operation type.
    :vartype operation_type: str
    """

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "source": {"key": "source", "type": "LinkTableRequestSource"},
        "target": {"key": "target", "type": "LinkTableRequestTarget"},
        "operation_type": {"key": "operationType", "type": "str"},
    }

    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        source: Optional["_models.LinkTableRequestSource"] = None,
        target: Optional["_models.LinkTableRequestTarget"] = None,
        operation_type: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id: Link table id.
        :paramtype id: str
        :keyword source: Source table properties for link table request.
        :paramtype source: ~azure.synapse.artifacts.models.LinkTableRequestSource
        :keyword target: Target table properties for link table request.
        :paramtype target: ~azure.synapse.artifacts.models.LinkTableRequestTarget
        :keyword operation_type: Link table operation type.
        :paramtype operation_type: str
        """
        super().__init__(**kwargs)
        self.id = id
        self.source = source
        self.target = target
        self.operation_type = operation_type


class LinkTableRequestSource(_serialization.Model):
    """LinkTableRequestSource.

    :ivar table_name: Source table table name.
    :vartype table_name: str
    :ivar schema_name: Source table schema name.
    :vartype schema_name: str
    """

    _attribute_map = {
        "table_name": {"key": "tableName", "type": "str"},
        "schema_name": {"key": "schemaName", "type": "str"},
    }

    def __init__(self, *, table_name: Optional[str] = None, schema_name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword table_name: Source table table name.
        :paramtype table_name: str
        :keyword schema_name: Source table schema name.
        :paramtype schema_name: str
        """
        super().__init__(**kwargs)
        self.table_name = table_name
        self.schema_name = schema_name


class LinkTableRequestTarget(_serialization.Model):
    """LinkTableRequestTarget.

    :ivar table_name: Target table table name.
    :vartype table_name: str
    :ivar schema_name: Target table schema name.
    :vartype schema_name: str
    :ivar distribution_options: Target table distribution options for link table request.
    :vartype distribution_options:
     ~azure.synapse.artifacts.models.LinkTableRequestTargetDistributionOptions
    :ivar structure_options: Target table structure options for link table request.
    :vartype structure_options:
     ~azure.synapse.artifacts.models.LinkTableRequestTargetStructureOptions
    """

    _attribute_map = {
        "table_name": {"key": "tableName", "type": "str"},
        "schema_name": {"key": "schemaName", "type": "str"},
        "distribution_options": {"key": "distributionOptions", "type": "LinkTableRequestTargetDistributionOptions"},
        "structure_options": {"key": "structureOptions", "type": "LinkTableRequestTargetStructureOptions"},
    }

    def __init__(
        self,
        *,
        table_name: Optional[str] = None,
        schema_name: Optional[str] = None,
        distribution_options: Optional["_models.LinkTableRequestTargetDistributionOptions"] = None,
        structure_options: Optional["_models.LinkTableRequestTargetStructureOptions"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword table_name: Target table table name.
        :paramtype table_name: str
        :keyword schema_name: Target table schema name.
        :paramtype schema_name: str
        :keyword distribution_options: Target table distribution options for link table request.
        :paramtype distribution_options:
         ~azure.synapse.artifacts.models.LinkTableRequestTargetDistributionOptions
        :keyword structure_options: Target table structure options for link table request.
        :paramtype structure_options:
         ~azure.synapse.artifacts.models.LinkTableRequestTargetStructureOptions
        """
        super().__init__(**kwargs)
        self.table_name = table_name
        self.schema_name = schema_name
        self.distribution_options = distribution_options
        self.structure_options = structure_options


class LinkTableRequestTargetDistributionOptions(_serialization.Model):
    """LinkTableRequestTargetDistributionOptions.

    :ivar type: Target table distribution type.
    :vartype type: str
    :ivar distribution_column: Target table distribution column.
    :vartype distribution_column: str
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "distribution_column": {"key": "distributionColumn", "type": "str"},
    }

    def __init__(self, *, type: Optional[str] = None, distribution_column: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword type: Target table distribution type.
        :paramtype type: str
        :keyword distribution_column: Target table distribution column.
        :paramtype distribution_column: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.distribution_column = distribution_column


class LinkTableRequestTargetStructureOptions(_serialization.Model):
    """LinkTableRequestTargetStructureOptions.

    :ivar type: Target table structure type.
    :vartype type: str
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
    }

    def __init__(self, *, type: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword type: Target table structure type.
        :paramtype type: str
        """
        super().__init__(**kwargs)
        self.type = type


class LinkTableResource(_serialization.Model):
    """LinkTableResource.

    :ivar id: Link table id.
    :vartype id: str
    :ivar name: Link table name.
    :vartype name: str
    :ivar source: Source table properties for link table request.
    :vartype source: ~azure.synapse.artifacts.models.LinkTableRequestSource
    :ivar target: Target table properties for link table request.
    :vartype target: ~azure.synapse.artifacts.models.LinkTableRequestTarget
    """

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "source": {"key": "source", "type": "LinkTableRequestSource"},
        "target": {"key": "target", "type": "LinkTableRequestTarget"},
    }

    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        name: Optional[str] = None,
        source: Optional["_models.LinkTableRequestSource"] = None,
        target: Optional["_models.LinkTableRequestTarget"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id: Link table id.
        :paramtype id: str
        :keyword name: Link table name.
        :paramtype name: str
        :keyword source: Source table properties for link table request.
        :paramtype source: ~azure.synapse.artifacts.models.LinkTableRequestSource
        :keyword target: Target table properties for link table request.
        :paramtype target: ~azure.synapse.artifacts.models.LinkTableRequestTarget
        """
        super().__init__(**kwargs)
        self.id = id
        self.name = name
        self.source = source
        self.target = target


class LinkTableStatus(_serialization.Model):
    """LinkTableStatus.

    :ivar id: ID provided by the client.
    :vartype id: str
    :ivar status: Link table status, please refer to this `articles
     <https://learn.microsoft.com/azure/synapse-analytics/synapse-link/sql-database-synapse-link#monitoring>`_
     for details.
    :vartype status: str
    :ivar error_message: Link table error message.
    :vartype error_message: str
    :ivar start_time: Link table start time.
    :vartype start_time: JSON
    :ivar stop_time: Link table stop time.
    :vartype stop_time: JSON
    :ivar link_table_id: Link table ID.
    :vartype link_table_id: str
    :ivar error_code: Link table error code.
    :vartype error_code: str
    :ivar last_processed_data: Link table last processed data time.
    :vartype last_processed_data: ~datetime.datetime
    :ivar last_transaction_commit_time: Link table last transaction commit time.
    :vartype last_transaction_commit_time: ~datetime.datetime
    """

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "status": {"key": "status", "type": "str"},
        "error_message": {"key": "errorMessage", "type": "str"},
        "start_time": {"key": "startTime", "type": "object"},
        "stop_time": {"key": "stopTime", "type": "object"},
        "link_table_id": {"key": "linkTableId", "type": "str"},
        "error_code": {"key": "errorCode", "type": "str"},
        "last_processed_data": {"key": "lastProcessedData", "type": "iso-8601"},
        "last_transaction_commit_time": {"key": "lastTransactionCommitTime", "type": "iso-8601"},
    }

    def __init__(
        self,
        *,
        id: Optional[str] = None,  # pylint: disable=redefined-builtin
        status: Optional[str] = None,
        error_message: Optional[str] = None,
        start_time: Optional[JSON] = None,
        stop_time: Optional[JSON] = None,
        link_table_id: Optional[str] = None,
        error_code: Optional[str] = None,
        last_processed_data: Optional[datetime.datetime] = None,
        last_transaction_commit_time: Optional[datetime.datetime] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword id: ID provided by the client.
        :paramtype id: str
        :keyword status: Link table status, please refer to this `articles
         <https://learn.microsoft.com/azure/synapse-analytics/synapse-link/sql-database-synapse-link#monitoring>`_
         for details.
        :paramtype status: str
        :keyword error_message: Link table error message.
        :paramtype error_message: str
        :keyword start_time: Link table start time.
        :paramtype start_time: JSON
        :keyword stop_time: Link table stop time.
        :paramtype stop_time: JSON
        :keyword link_table_id: Link table ID.
        :paramtype link_table_id: str
        :keyword error_code: Link table error code.
        :paramtype error_code: str
        :keyword last_processed_data: Link table last processed data time.
        :paramtype last_processed_data: ~datetime.datetime
        :keyword last_transaction_commit_time: Link table last transaction commit time.
        :paramtype last_transaction_commit_time: ~datetime.datetime
        """
        super().__init__(**kwargs)
        self.id = id
        self.status = status
        self.error_message = error_message
        self.start_time = start_time
        self.stop_time = stop_time
        self.link_table_id = link_table_id
        self.error_code = error_code
        self.last_processed_data = last_processed_data
        self.last_transaction_commit_time = last_transaction_commit_time


class LogLocationSettings(_serialization.Model):
    """Log location settings.

    All required parameters must be populated in order to send to Azure.

    :ivar linked_service_name: Log storage linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar path: The path to storage for storing detailed logs of activity execution. Type: string
     (or Expression with resultType string).
    :vartype path: JSON
    """

    _validation = {
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "path": {"key": "path", "type": "object"},
    }

    def __init__(
        self, *, linked_service_name: "_models.LinkedServiceReference", path: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword linked_service_name: Log storage linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword path: The path to storage for storing detailed logs of activity execution. Type:
         string (or Expression with resultType string).
        :paramtype path: JSON
        """
        super().__init__(**kwargs)
        self.linked_service_name = linked_service_name
        self.path = path


class LogSettings(_serialization.Model):
    """Log settings.

    All required parameters must be populated in order to send to Azure.

    :ivar enable_copy_activity_log: Specifies whether to enable copy activity log. Type: boolean
     (or Expression with resultType boolean).
    :vartype enable_copy_activity_log: JSON
    :ivar copy_activity_log_settings: Specifies settings for copy activity log.
    :vartype copy_activity_log_settings: ~azure.synapse.artifacts.models.CopyActivityLogSettings
    :ivar log_location_settings: Log location settings customer needs to provide when enabling log.
     Required.
    :vartype log_location_settings: ~azure.synapse.artifacts.models.LogLocationSettings
    """

    _validation = {
        "log_location_settings": {"required": True},
    }

    _attribute_map = {
        "enable_copy_activity_log": {"key": "enableCopyActivityLog", "type": "object"},
        "copy_activity_log_settings": {"key": "copyActivityLogSettings", "type": "CopyActivityLogSettings"},
        "log_location_settings": {"key": "logLocationSettings", "type": "LogLocationSettings"},
    }

    def __init__(
        self,
        *,
        log_location_settings: "_models.LogLocationSettings",
        enable_copy_activity_log: Optional[JSON] = None,
        copy_activity_log_settings: Optional["_models.CopyActivityLogSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword enable_copy_activity_log: Specifies whether to enable copy activity log. Type: boolean
         (or Expression with resultType boolean).
        :paramtype enable_copy_activity_log: JSON
        :keyword copy_activity_log_settings: Specifies settings for copy activity log.
        :paramtype copy_activity_log_settings: ~azure.synapse.artifacts.models.CopyActivityLogSettings
        :keyword log_location_settings: Log location settings customer needs to provide when enabling
         log. Required.
        :paramtype log_location_settings: ~azure.synapse.artifacts.models.LogLocationSettings
        """
        super().__init__(**kwargs)
        self.enable_copy_activity_log = enable_copy_activity_log
        self.copy_activity_log_settings = copy_activity_log_settings
        self.log_location_settings = log_location_settings


class LogStorageSettings(_serialization.Model):
    """(Deprecated. Please use LogSettings) Log storage settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar linked_service_name: Log storage linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar path: The path to storage for storing detailed logs of activity execution. Type: string
     (or Expression with resultType string).
    :vartype path: JSON
    :ivar log_level: Gets or sets the log level, support: Info, Warning. Type: string (or
     Expression with resultType string).
    :vartype log_level: JSON
    :ivar enable_reliable_logging: Specifies whether to enable reliable logging. Type: boolean (or
     Expression with resultType boolean).
    :vartype enable_reliable_logging: JSON
    """

    _validation = {
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "path": {"key": "path", "type": "object"},
        "log_level": {"key": "logLevel", "type": "object"},
        "enable_reliable_logging": {"key": "enableReliableLogging", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        path: Optional[JSON] = None,
        log_level: Optional[JSON] = None,
        enable_reliable_logging: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword linked_service_name: Log storage linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword path: The path to storage for storing detailed logs of activity execution. Type:
         string (or Expression with resultType string).
        :paramtype path: JSON
        :keyword log_level: Gets or sets the log level, support: Info, Warning. Type: string (or
         Expression with resultType string).
        :paramtype log_level: JSON
        :keyword enable_reliable_logging: Specifies whether to enable reliable logging. Type: boolean
         (or Expression with resultType boolean).
        :paramtype enable_reliable_logging: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.linked_service_name = linked_service_name
        self.path = path
        self.log_level = log_level
        self.enable_reliable_logging = enable_reliable_logging


class LookupActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Lookup activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar source: Dataset-specific source properties, same as copy activity source. Required.
    :vartype source: ~azure.synapse.artifacts.models.CopySource
    :ivar dataset: Lookup activity dataset reference. Required.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    :ivar first_row_only: Whether to return first row or all rows. Default value is true. Type:
     boolean (or Expression with resultType boolean).
    :vartype first_row_only: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "source": {"required": True},
        "dataset": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "source": {"key": "typeProperties.source", "type": "CopySource"},
        "dataset": {"key": "typeProperties.dataset", "type": "DatasetReference"},
        "first_row_only": {"key": "typeProperties.firstRowOnly", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        source: "_models.CopySource",
        dataset: "_models.DatasetReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        first_row_only: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword source: Dataset-specific source properties, same as copy activity source. Required.
        :paramtype source: ~azure.synapse.artifacts.models.CopySource
        :keyword dataset: Lookup activity dataset reference. Required.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        :keyword first_row_only: Whether to return first row or all rows. Default value is true. Type:
         boolean (or Expression with resultType boolean).
        :paramtype first_row_only: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "Lookup"
        self.source = source
        self.dataset = dataset
        self.first_row_only = first_row_only


class MagentoLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Magento server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The URL of the Magento instance. (i.e. 192.168.222.110/magento3). Required.
    :vartype host: JSON
    :ivar access_token: The access token from Magento.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        access_token: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The URL of the Magento instance. (i.e. 192.168.222.110/magento3). Required.
        :paramtype host: JSON
        :keyword access_token: The access token from Magento.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Magento"
        self.host = host
        self.access_token = access_token
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class MagentoObjectDataset(Dataset):
    """Magento server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MagentoObject"
        self.table_name = table_name


class MagentoSource(TabularSource):
    """A copy activity Magento server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "MagentoSource"
        self.query = query


class ManagedIdentity(_serialization.Model):
    """The workspace managed identity.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar principal_id: The principal ID of the workspace managed identity.
    :vartype principal_id: str
    :ivar tenant_id: The tenant ID of the workspace managed identity.
    :vartype tenant_id: str
    :ivar type: The type of managed identity for the workspace. Known values are: "None" and
     "SystemAssigned".
    :vartype type: str or ~azure.synapse.artifacts.models.ResourceIdentityType
    """

    _validation = {
        "principal_id": {"readonly": True},
        "tenant_id": {"readonly": True},
    }

    _attribute_map = {
        "principal_id": {"key": "principalId", "type": "str"},
        "tenant_id": {"key": "tenantId", "type": "str"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(self, *, type: Optional[Union[str, "_models.ResourceIdentityType"]] = None, **kwargs: Any) -> None:
        """
        :keyword type: The type of managed identity for the workspace. Known values are: "None" and
         "SystemAssigned".
        :paramtype type: str or ~azure.synapse.artifacts.models.ResourceIdentityType
        """
        super().__init__(**kwargs)
        self.principal_id = None
        self.tenant_id = None
        self.type = type


class ManagedIntegrationRuntime(IntegrationRuntime):
    """Managed integration runtime, including managed elastic and managed dedicated integration
    runtimes.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of integration runtime. Required. Known values are: "Managed" and
     "SelfHosted".
    :vartype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeType
    :ivar description: Integration runtime description.
    :vartype description: str
    :ivar state: Integration runtime state, only valid for managed dedicated integration runtime.
     Known values are: "Initial", "Stopped", "Started", "Starting", "Stopping", "NeedRegistration",
     "Online", "Limited", "Offline", and "AccessDenied".
    :vartype state: str or ~azure.synapse.artifacts.models.IntegrationRuntimeState
    :ivar managed_virtual_network: Managed Virtual Network reference.
    :vartype managed_virtual_network:
     ~azure.synapse.artifacts.models.ManagedVirtualNetworkReference
    :ivar compute_properties: The compute resource for managed integration runtime.
    :vartype compute_properties:
     ~azure.synapse.artifacts.models.IntegrationRuntimeComputeProperties
    :ivar ssis_properties: SSIS properties for managed integration runtime.
    :vartype ssis_properties: ~azure.synapse.artifacts.models.IntegrationRuntimeSsisProperties
    """

    _validation = {
        "type": {"required": True},
        "state": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "managed_virtual_network": {"key": "managedVirtualNetwork", "type": "ManagedVirtualNetworkReference"},
        "compute_properties": {
            "key": "typeProperties.computeProperties",
            "type": "IntegrationRuntimeComputeProperties",
        },
        "ssis_properties": {"key": "typeProperties.ssisProperties", "type": "IntegrationRuntimeSsisProperties"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        managed_virtual_network: Optional["_models.ManagedVirtualNetworkReference"] = None,
        compute_properties: Optional["_models.IntegrationRuntimeComputeProperties"] = None,
        ssis_properties: Optional["_models.IntegrationRuntimeSsisProperties"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Integration runtime description.
        :paramtype description: str
        :keyword managed_virtual_network: Managed Virtual Network reference.
        :paramtype managed_virtual_network:
         ~azure.synapse.artifacts.models.ManagedVirtualNetworkReference
        :keyword compute_properties: The compute resource for managed integration runtime.
        :paramtype compute_properties:
         ~azure.synapse.artifacts.models.IntegrationRuntimeComputeProperties
        :keyword ssis_properties: SSIS properties for managed integration runtime.
        :paramtype ssis_properties: ~azure.synapse.artifacts.models.IntegrationRuntimeSsisProperties
        """
        super().__init__(additional_properties=additional_properties, description=description, **kwargs)
        self.type: str = "Managed"
        self.state = None
        self.managed_virtual_network = managed_virtual_network
        self.compute_properties = compute_properties
        self.ssis_properties = ssis_properties


class ManagedVirtualNetworkReference(_serialization.Model):
    """Managed Virtual Network reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Managed Virtual Network reference type. Required. "ManagedVirtualNetworkReference"
    :vartype type: str or ~azure.synapse.artifacts.models.ManagedVirtualNetworkReferenceType
    :ivar reference_name: Reference ManagedVirtualNetwork name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self, *, type: Union[str, "_models.ManagedVirtualNetworkReferenceType"], reference_name: str, **kwargs: Any
    ) -> None:
        """
        :keyword type: Managed Virtual Network reference type. Required.
         "ManagedVirtualNetworkReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.ManagedVirtualNetworkReferenceType
        :keyword reference_name: Reference ManagedVirtualNetwork name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class ManagedVirtualNetworkSettings(_serialization.Model):
    """Managed Virtual Network Settings.

    :ivar prevent_data_exfiltration: Prevent Data Exfiltration.
    :vartype prevent_data_exfiltration: bool
    :ivar linked_access_check_on_target_resource: Linked Access Check On Target Resource.
    :vartype linked_access_check_on_target_resource: bool
    :ivar allowed_aad_tenant_ids_for_linking: Allowed Aad Tenant Ids For Linking.
    :vartype allowed_aad_tenant_ids_for_linking: list[str]
    """

    _attribute_map = {
        "prevent_data_exfiltration": {"key": "preventDataExfiltration", "type": "bool"},
        "linked_access_check_on_target_resource": {"key": "linkedAccessCheckOnTargetResource", "type": "bool"},
        "allowed_aad_tenant_ids_for_linking": {"key": "allowedAadTenantIdsForLinking", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        prevent_data_exfiltration: Optional[bool] = None,
        linked_access_check_on_target_resource: Optional[bool] = None,
        allowed_aad_tenant_ids_for_linking: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword prevent_data_exfiltration: Prevent Data Exfiltration.
        :paramtype prevent_data_exfiltration: bool
        :keyword linked_access_check_on_target_resource: Linked Access Check On Target Resource.
        :paramtype linked_access_check_on_target_resource: bool
        :keyword allowed_aad_tenant_ids_for_linking: Allowed Aad Tenant Ids For Linking.
        :paramtype allowed_aad_tenant_ids_for_linking: list[str]
        """
        super().__init__(**kwargs)
        self.prevent_data_exfiltration = prevent_data_exfiltration
        self.linked_access_check_on_target_resource = linked_access_check_on_target_resource
        self.allowed_aad_tenant_ids_for_linking = allowed_aad_tenant_ids_for_linking


class MappingDataFlow(DataFlow):
    """Mapping data flow.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of data flow. Required.
    :vartype type: str
    :ivar description: The description of the data flow.
    :vartype description: str
    :ivar annotations: List of tags that can be used for describing the data flow.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this data flow is in. If not specified, Data flow will appear at
     the root level.
    :vartype folder: ~azure.synapse.artifacts.models.DataFlowFolder
    :ivar sources: List of sources in data flow.
    :vartype sources: list[~azure.synapse.artifacts.models.DataFlowSource]
    :ivar sinks: List of sinks in data flow.
    :vartype sinks: list[~azure.synapse.artifacts.models.DataFlowSink]
    :ivar transformations: List of transformations in data flow.
    :vartype transformations: list[~azure.synapse.artifacts.models.Transformation]
    :ivar script: DataFlow script.
    :vartype script: str
    :ivar script_lines: Data flow script lines.
    :vartype script_lines: list[str]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DataFlowFolder"},
        "sources": {"key": "typeProperties.sources", "type": "[DataFlowSource]"},
        "sinks": {"key": "typeProperties.sinks", "type": "[DataFlowSink]"},
        "transformations": {"key": "typeProperties.transformations", "type": "[Transformation]"},
        "script": {"key": "typeProperties.script", "type": "str"},
        "script_lines": {"key": "typeProperties.scriptLines", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DataFlowFolder"] = None,
        sources: Optional[List["_models.DataFlowSource"]] = None,
        sinks: Optional[List["_models.DataFlowSink"]] = None,
        transformations: Optional[List["_models.Transformation"]] = None,
        script: Optional[str] = None,
        script_lines: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword description: The description of the data flow.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the data flow.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this data flow is in. If not specified, Data flow will appear
         at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DataFlowFolder
        :keyword sources: List of sources in data flow.
        :paramtype sources: list[~azure.synapse.artifacts.models.DataFlowSource]
        :keyword sinks: List of sinks in data flow.
        :paramtype sinks: list[~azure.synapse.artifacts.models.DataFlowSink]
        :keyword transformations: List of transformations in data flow.
        :paramtype transformations: list[~azure.synapse.artifacts.models.Transformation]
        :keyword script: DataFlow script.
        :paramtype script: str
        :keyword script_lines: Data flow script lines.
        :paramtype script_lines: list[str]
        """
        super().__init__(description=description, annotations=annotations, folder=folder, **kwargs)
        self.type: str = "MappingDataFlow"
        self.sources = sources
        self.sinks = sinks
        self.transformations = transformations
        self.script = script
        self.script_lines = script_lines


class MariaDBLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """MariaDB server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar driver_version: The version of the MariaDB driver. Type: string. V1 or empty for legacy
     driver, V2 for new driver. V1 can support connection string and property bag, V2 can only
     support connection string. The legacy driver is scheduled for deprecation by October 2024.
    :vartype driver_version: JSON
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. Type: string.
    :vartype server: JSON
    :ivar port: The port for the connection. Type: integer.
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string.
    :vartype username: JSON
    :ivar database: Database name for connection. Type: string.
    :vartype database: JSON
    :ivar ssl_mode: This option specifies whether the driver uses TLS encryption and verification
     when connecting to MariaDB. E.g., SSLMode=<0/1/2/3/4>. Options: DISABLED (0) / PREFERRED (1)
     (Default) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4), REQUIRED (2) is recommended to
     only allow connections encrypted with SSL/TLS.
    :vartype ssl_mode: JSON
    :ivar use_system_trust_store: This option specifies whether to use a CA certificate from the
     system trust store, or from a specified PEM file. E.g. UseSystemTrustStore=<0/1>; Options:
     Enabled (1) / Disabled (0) (Default).
    :vartype use_system_trust_store: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "driver_version": {"key": "typeProperties.driverVersion", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        driver_version: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        database: Optional[JSON] = None,
        ssl_mode: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword driver_version: The version of the MariaDB driver. Type: string. V1 or empty for
         legacy driver, V2 for new driver. V1 can support connection string and property bag, V2 can
         only support connection string. The legacy driver is scheduled for deprecation by October 2024.
        :paramtype driver_version: JSON
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. Type: string.
        :paramtype server: JSON
        :keyword port: The port for the connection. Type: integer.
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string.
        :paramtype username: JSON
        :keyword database: Database name for connection. Type: string.
        :paramtype database: JSON
        :keyword ssl_mode: This option specifies whether the driver uses TLS encryption and
         verification when connecting to MariaDB. E.g., SSLMode=<0/1/2/3/4>. Options: DISABLED (0) /
         PREFERRED (1) (Default) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4), REQUIRED (2) is
         recommended to only allow connections encrypted with SSL/TLS.
        :paramtype ssl_mode: JSON
        :keyword use_system_trust_store: This option specifies whether to use a CA certificate from the
         system trust store, or from a specified PEM file. E.g. UseSystemTrustStore=<0/1>; Options:
         Enabled (1) / Disabled (0) (Default).
        :paramtype use_system_trust_store: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MariaDB"
        self.driver_version = driver_version
        self.connection_string = connection_string
        self.server = server
        self.port = port
        self.username = username
        self.database = database
        self.ssl_mode = ssl_mode
        self.use_system_trust_store = use_system_trust_store
        self.password = password
        self.encrypted_credential = encrypted_credential


class MariaDBSource(TabularSource):
    """A copy activity MariaDB server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "MariaDBSource"
        self.query = query


class MariaDBTableDataset(Dataset):
    """MariaDB server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MariaDBTable"
        self.table_name = table_name


class MarketoLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Marketo server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the Marketo server. (i.e. 123-ABC-321.mktorest.com). Required.
    :vartype endpoint: JSON
    :ivar client_id: The client Id of your Marketo service. Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret of your Marketo service.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the Marketo server. (i.e. 123-ABC-321.mktorest.com).
         Required.
        :paramtype endpoint: JSON
        :keyword client_id: The client Id of your Marketo service. Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret of your Marketo service.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Marketo"
        self.endpoint = endpoint
        self.client_id = client_id
        self.client_secret = client_secret
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class MarketoObjectDataset(Dataset):
    """Marketo server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MarketoObject"
        self.table_name = table_name


class MarketoSource(TabularSource):
    """A copy activity Marketo server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "MarketoSource"
        self.query = query


class MetadataItem(_serialization.Model):
    """Specify the name and value of custom metadata item.

    :ivar name: Metadata item key name. Type: string (or Expression with resultType string).
    :vartype name: JSON
    :ivar value: Metadata item value. Type: string (or Expression with resultType string).
    :vartype value: JSON
    """

    _attribute_map = {
        "name": {"key": "name", "type": "object"},
        "value": {"key": "value", "type": "object"},
    }

    def __init__(self, *, name: Optional[JSON] = None, value: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword name: Metadata item key name. Type: string (or Expression with resultType string).
        :paramtype name: JSON
        :keyword value: Metadata item value. Type: string (or Expression with resultType string).
        :paramtype value: JSON
        """
        super().__init__(**kwargs)
        self.name = name
        self.value = value


class MetastoreRegisterObject(_serialization.Model):
    """MetastoreRegisterObject.

    All required parameters must be populated in order to send to Azure.

    :ivar input_folder: The input folder containing CDM files. Required.
    :vartype input_folder: str
    """

    _validation = {
        "input_folder": {"required": True},
    }

    _attribute_map = {
        "input_folder": {"key": "inputFolder", "type": "str"},
    }

    def __init__(self, *, input_folder: str, **kwargs: Any) -> None:
        """
        :keyword input_folder: The input folder containing CDM files. Required.
        :paramtype input_folder: str
        """
        super().__init__(**kwargs)
        self.input_folder = input_folder


class MetastoreRegistrationResponse(_serialization.Model):
    """MetastoreRegistrationResponse.

    :ivar status: Enumerates possible request statuses. Known values are: "Running", "Completed",
     and "Failed".
    :vartype status: str or ~azure.synapse.artifacts.models.RequestStatus
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
    }

    def __init__(self, *, status: Optional[Union[str, "_models.RequestStatus"]] = None, **kwargs: Any) -> None:
        """
        :keyword status: Enumerates possible request statuses. Known values are: "Running",
         "Completed", and "Failed".
        :paramtype status: str or ~azure.synapse.artifacts.models.RequestStatus
        """
        super().__init__(**kwargs)
        self.status = status


class MetastoreRequestSuccessResponse(_serialization.Model):
    """MetastoreRequestSuccessResponse.

    :ivar status: Enumerates possible Status of the resource. Known values are: "Creating",
     "Created", and "Failed".
    :vartype status: str or ~azure.synapse.artifacts.models.ResourceStatus
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
    }

    def __init__(self, *, status: Optional[Union[str, "_models.ResourceStatus"]] = None, **kwargs: Any) -> None:
        """
        :keyword status: Enumerates possible Status of the resource. Known values are: "Creating",
         "Created", and "Failed".
        :paramtype status: str or ~azure.synapse.artifacts.models.ResourceStatus
        """
        super().__init__(**kwargs)
        self.status = status


class MetastoreUpdateObject(_serialization.Model):
    """MetastoreUpdateObject.

    All required parameters must be populated in order to send to Azure.

    :ivar input_folder: The input folder containing CDM files. Required.
    :vartype input_folder: str
    """

    _validation = {
        "input_folder": {"required": True},
    }

    _attribute_map = {
        "input_folder": {"key": "inputFolder", "type": "str"},
    }

    def __init__(self, *, input_folder: str, **kwargs: Any) -> None:
        """
        :keyword input_folder: The input folder containing CDM files. Required.
        :paramtype input_folder: str
        """
        super().__init__(**kwargs)
        self.input_folder = input_folder


class MetastoreUpdationResponse(_serialization.Model):
    """MetastoreUpdationResponse.

    :ivar status: Enumerates possible request statuses. Known values are: "Running", "Completed",
     and "Failed".
    :vartype status: str or ~azure.synapse.artifacts.models.RequestStatus
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
    }

    def __init__(self, *, status: Optional[Union[str, "_models.RequestStatus"]] = None, **kwargs: Any) -> None:
        """
        :keyword status: Enumerates possible request statuses. Known values are: "Running",
         "Completed", and "Failed".
        :paramtype status: str or ~azure.synapse.artifacts.models.RequestStatus
        """
        super().__init__(**kwargs)
        self.status = status


class MicrosoftAccessLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Microsoft Access linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The non-access credential portion of the connection string as well as
     an optional encrypted credential. Type: string, SecureString or AzureKeyVaultSecretReference.
     Required.
    :vartype connection_string: JSON
    :ivar authentication_type: Type of authentication used to connect to the Microsoft Access as
     ODBC data store. Possible values are: Anonymous and Basic. Type: string (or Expression with
     resultType string).
    :vartype authentication_type: JSON
    :ivar credential: The access credential portion of the connection string specified in
     driver-specific property-value format.
    :vartype credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar user_name: User name for Basic authentication. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "SecretBase"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        credential: Optional["_models.SecretBase"] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The non-access credential portion of the connection string as well
         as an optional encrypted credential. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype connection_string: JSON
        :keyword authentication_type: Type of authentication used to connect to the Microsoft Access as
         ODBC data store. Possible values are: Anonymous and Basic. Type: string (or Expression with
         resultType string).
        :paramtype authentication_type: JSON
        :keyword credential: The access credential portion of the connection string specified in
         driver-specific property-value format.
        :paramtype credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword user_name: User name for Basic authentication. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MicrosoftAccess"
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.credential = credential
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential


class MicrosoftAccessSink(CopySink):
    """A copy activity Microsoft Access sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: A query to execute before starting the copy. Type: string (or Expression
     with resultType string).
    :vartype pre_copy_script: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: A query to execute before starting the copy. Type: string (or
         Expression with resultType string).
        :paramtype pre_copy_script: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "MicrosoftAccessSink"
        self.pre_copy_script = pre_copy_script


class MicrosoftAccessSource(CopySource):
    """A copy activity source for Microsoft Access.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "MicrosoftAccessSource"
        self.query = query
        self.additional_columns = additional_columns


class MicrosoftAccessTableDataset(Dataset):
    """The Microsoft Access table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The Microsoft Access table name. Type: string (or Expression with resultType
     string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The Microsoft Access table name. Type: string (or Expression with
         resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MicrosoftAccessTable"
        self.table_name = table_name


class MongoDbAtlasCollectionDataset(Dataset):
    """The MongoDB Atlas database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection: The collection name of the MongoDB Atlas database. Type: string (or
     Expression with resultType string). Required.
    :vartype collection: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection": {"key": "typeProperties.collection", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection: The collection name of the MongoDB Atlas database. Type: string (or
         Expression with resultType string). Required.
        :paramtype collection: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MongoDbAtlasCollection"
        self.collection = collection


class MongoDbAtlasLinkedService(LinkedService):
    """Linked service for MongoDB Atlas data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The MongoDB Atlas connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
     Required.
    :vartype connection_string: JSON
    :ivar database: The name of the MongoDB Atlas database that you want to access. Type: string
     (or Expression with resultType string). Required.
    :vartype database: JSON
    :ivar driver_version: The driver version that you want to choose. Allowed value are v1 and v2.
     Type: string (or Expression with resultType string).
    :vartype driver_version: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "driver_version": {"key": "typeProperties.driverVersion", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        driver_version: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The MongoDB Atlas connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
         Required.
        :paramtype connection_string: JSON
        :keyword database: The name of the MongoDB Atlas database that you want to access. Type: string
         (or Expression with resultType string). Required.
        :paramtype database: JSON
        :keyword driver_version: The driver version that you want to choose. Allowed value are v1 and
         v2. Type: string (or Expression with resultType string).
        :paramtype driver_version: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MongoDbAtlas"
        self.connection_string = connection_string
        self.database = database
        self.driver_version = driver_version


class MongoDbAtlasSource(CopySource):
    """A copy activity source for a MongoDB Atlas database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar filter: Specifies selection filter using query operators. To return all documents in a
     collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
     with resultType string).
    :vartype filter: JSON
    :ivar cursor_methods: Cursor methods for Mongodb query.
    :vartype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
    :ivar batch_size: Specifies the number of documents to return in each batch of the response
     from MongoDB Atlas instance. In most cases, modifying the batch size will not affect the user
     or the application. This property's main purpose is to avoid hit the limitation of response
     size. Type: integer (or Expression with resultType integer).
    :vartype batch_size: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "filter": {"key": "filter", "type": "object"},
        "cursor_methods": {"key": "cursorMethods", "type": "MongoDbCursorMethodsProperties"},
        "batch_size": {"key": "batchSize", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        filter: Optional[JSON] = None,  # pylint: disable=redefined-builtin
        cursor_methods: Optional["_models.MongoDbCursorMethodsProperties"] = None,
        batch_size: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword filter: Specifies selection filter using query operators. To return all documents in a
         collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
         with resultType string).
        :paramtype filter: JSON
        :keyword cursor_methods: Cursor methods for Mongodb query.
        :paramtype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
        :keyword batch_size: Specifies the number of documents to return in each batch of the response
         from MongoDB Atlas instance. In most cases, modifying the batch size will not affect the user
         or the application. This property's main purpose is to avoid hit the limitation of response
         size. Type: integer (or Expression with resultType integer).
        :paramtype batch_size: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "MongoDbAtlasSource"
        self.filter = filter
        self.cursor_methods = cursor_methods
        self.batch_size = batch_size
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class MongoDbCollectionDataset(Dataset):
    """The MongoDB database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection_name: The table name of the MongoDB database. Type: string (or Expression with
     resultType string). Required.
    :vartype collection_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection_name": {"key": "typeProperties.collectionName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection_name: The table name of the MongoDB database. Type: string (or Expression
         with resultType string). Required.
        :paramtype collection_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MongoDbCollection"
        self.collection_name = collection_name


class MongoDbCursorMethodsProperties(_serialization.Model):
    """Cursor methods for Mongodb query.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar project: Specifies the fields to return in the documents that match the query filter. To
     return all fields in the matching documents, omit this parameter. Type: string (or Expression
     with resultType string).
    :vartype project: JSON
    :ivar sort: Specifies the order in which the query returns matching documents. Type: string (or
     Expression with resultType string). Type: string (or Expression with resultType string).
    :vartype sort: JSON
    :ivar skip: Specifies the how many documents skipped and where MongoDB begins returning
     results. This approach may be useful in implementing paginated results. Type: integer (or
     Expression with resultType integer).
    :vartype skip: JSON
    :ivar limit: Specifies the maximum number of documents the server returns. limit() is analogous
     to the LIMIT statement in a SQL database. Type: integer (or Expression with resultType
     integer).
    :vartype limit: JSON
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "project": {"key": "project", "type": "object"},
        "sort": {"key": "sort", "type": "object"},
        "skip": {"key": "skip", "type": "object"},
        "limit": {"key": "limit", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        project: Optional[JSON] = None,
        sort: Optional[JSON] = None,
        skip: Optional[JSON] = None,
        limit: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword project: Specifies the fields to return in the documents that match the query filter.
         To return all fields in the matching documents, omit this parameter. Type: string (or
         Expression with resultType string).
        :paramtype project: JSON
        :keyword sort: Specifies the order in which the query returns matching documents. Type: string
         (or Expression with resultType string). Type: string (or Expression with resultType string).
        :paramtype sort: JSON
        :keyword skip: Specifies the how many documents skipped and where MongoDB begins returning
         results. This approach may be useful in implementing paginated results. Type: integer (or
         Expression with resultType integer).
        :paramtype skip: JSON
        :keyword limit: Specifies the maximum number of documents the server returns. limit() is
         analogous to the LIMIT statement in a SQL database. Type: integer (or Expression with
         resultType integer).
        :paramtype limit: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.project = project
        self.sort = sort
        self.skip = skip
        self.limit = limit


class MongoDbLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for MongoDb data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The IP address or server name of the MongoDB server. Type: string (or Expression
     with resultType string). Required.
    :vartype server: JSON
    :ivar authentication_type: The authentication type to be used to connect to the MongoDB
     database. Known values are: "Basic" and "Anonymous".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.MongoDbAuthenticationType
    :ivar database_name: The name of the MongoDB database that you want to access. Type: string (or
     Expression with resultType string). Required.
    :vartype database_name: JSON
    :ivar username: Username for authentication. Type: string (or Expression with resultType
     string).
    :vartype username: JSON
    :ivar password: Password for authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar auth_source: Database to verify the username and password. Type: string (or Expression
     with resultType string).
    :vartype auth_source: JSON
    :ivar port: The TCP port number that the MongoDB server uses to listen for client connections.
     The default value is 27017. Type: integer (or Expression with resultType integer), minimum: 0.
    :vartype port: JSON
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false. Type: boolean (or Expression with resultType boolean).
    :vartype enable_ssl: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false. Type: boolean (or Expression with resultType boolean).
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "database_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "database_name": {"key": "typeProperties.databaseName", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "auth_source": {"key": "typeProperties.authSource", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        database_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[Union[str, "_models.MongoDbAuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        auth_source: Optional[JSON] = None,
        port: Optional[JSON] = None,
        enable_ssl: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The IP address or server name of the MongoDB server. Type: string (or
         Expression with resultType string). Required.
        :paramtype server: JSON
        :keyword authentication_type: The authentication type to be used to connect to the MongoDB
         database. Known values are: "Basic" and "Anonymous".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.MongoDbAuthenticationType
        :keyword database_name: The name of the MongoDB database that you want to access. Type: string
         (or Expression with resultType string). Required.
        :paramtype database_name: JSON
        :keyword username: Username for authentication. Type: string (or Expression with resultType
         string).
        :paramtype username: JSON
        :keyword password: Password for authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword auth_source: Database to verify the username and password. Type: string (or Expression
         with resultType string).
        :paramtype auth_source: JSON
        :keyword port: The TCP port number that the MongoDB server uses to listen for client
         connections. The default value is 27017. Type: integer (or Expression with resultType integer),
         minimum: 0.
        :paramtype port: JSON
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_ssl: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false. Type: boolean (or Expression with resultType
         boolean).
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MongoDb"
        self.server = server
        self.authentication_type = authentication_type
        self.database_name = database_name
        self.username = username
        self.password = password
        self.auth_source = auth_source
        self.port = port
        self.enable_ssl = enable_ssl
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class MongoDbSource(CopySource):
    """A copy activity source for a MongoDB database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Database query. Should be a SQL-92 query expression. Type: string (or Expression
     with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Database query. Should be a SQL-92 query expression. Type: string (or
         Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "MongoDbSource"
        self.query = query
        self.additional_columns = additional_columns


class MongoDbV2CollectionDataset(Dataset):
    """The MongoDB database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar collection: The collection name of the MongoDB database. Type: string (or Expression with
     resultType string). Required.
    :vartype collection: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "collection": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "collection": {"key": "typeProperties.collection", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        collection: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword collection: The collection name of the MongoDB database. Type: string (or Expression
         with resultType string). Required.
        :paramtype collection: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MongoDbV2Collection"
        self.collection = collection


class MongoDbV2LinkedService(LinkedService):
    """Linked service for MongoDB data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The MongoDB connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
     Required.
    :vartype connection_string: JSON
    :ivar database: The name of the MongoDB database that you want to access. Type: string (or
     Expression with resultType string). Required.
    :vartype database: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The MongoDB connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Type: string, SecureString or AzureKeyVaultSecretReference.
         Required.
        :paramtype connection_string: JSON
        :keyword database: The name of the MongoDB database that you want to access. Type: string (or
         Expression with resultType string). Required.
        :paramtype database: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MongoDbV2"
        self.connection_string = connection_string
        self.database = database


class MongoDbV2Source(CopySource):
    """A copy activity source for a MongoDB database.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar filter: Specifies selection filter using query operators. To return all documents in a
     collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
     with resultType string).
    :vartype filter: JSON
    :ivar cursor_methods: Cursor methods for Mongodb query.
    :vartype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
    :ivar batch_size: Specifies the number of documents to return in each batch of the response
     from MongoDB instance. In most cases, modifying the batch size will not affect the user or the
     application. This property's main purpose is to avoid hit the limitation of response size.
     Type: integer (or Expression with resultType integer).
    :vartype batch_size: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "filter": {"key": "filter", "type": "object"},
        "cursor_methods": {"key": "cursorMethods", "type": "MongoDbCursorMethodsProperties"},
        "batch_size": {"key": "batchSize", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        filter: Optional[JSON] = None,  # pylint: disable=redefined-builtin
        cursor_methods: Optional["_models.MongoDbCursorMethodsProperties"] = None,
        batch_size: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword filter: Specifies selection filter using query operators. To return all documents in a
         collection, omit this parameter or pass an empty document ({}). Type: string (or Expression
         with resultType string).
        :paramtype filter: JSON
        :keyword cursor_methods: Cursor methods for Mongodb query.
        :paramtype cursor_methods: ~azure.synapse.artifacts.models.MongoDbCursorMethodsProperties
        :keyword batch_size: Specifies the number of documents to return in each batch of the response
         from MongoDB instance. In most cases, modifying the batch size will not affect the user or the
         application. This property's main purpose is to avoid hit the limitation of response size.
         Type: integer (or Expression with resultType integer).
        :paramtype batch_size: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "MongoDbV2Source"
        self.filter = filter
        self.cursor_methods = cursor_methods
        self.batch_size = batch_size
        self.query_timeout = query_timeout
        self.additional_columns = additional_columns


class MySqlLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for MySQL data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar driver_version: The version of the MySQL driver. Type: string. V1 or empty for legacy
     driver, V2 for new driver. V1 can support connection string and property bag, V2 can only
     support connection string.
    :vartype driver_version: JSON
    :ivar connection_string: The connection string.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. Type: string.
    :vartype server: JSON
    :ivar port: The port for the connection. Type: integer.
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string.
    :vartype username: JSON
    :ivar database: Database name for connection. Type: string.
    :vartype database: JSON
    :ivar ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1: prefer, 2: require, 3:
     verify-ca, 4: verify-full.
    :vartype ssl_mode: JSON
    :ivar use_system_trust_store: Use system trust store for connection. Type: integer. 0: enable,
     1: disable.
    :vartype use_system_trust_store: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar allow_zero_date_time: This allows the special “zero” date value 0000-00-00 to be
     retrieved from the database. Type: boolean.
    :vartype allow_zero_date_time: JSON
    :ivar connection_timeout: The length of time (in seconds) to wait for a connection to the
     server before terminating the attempt and generating an error. Type: integer.
    :vartype connection_timeout: JSON
    :ivar convert_zero_date_time: True to return DateTime.MinValue for date or datetime columns
     that have disallowed values. Type: boolean.
    :vartype convert_zero_date_time: JSON
    :ivar guid_format: Determines which column type (if any) should be read as a GUID. Type:
     string. None: No column types are automatically read as a Guid; Char36: All CHAR(36) columns
     are read/written as a Guid using lowercase hex with hyphens, which matches UUID.
    :vartype guid_format: JSON
    :ivar ssl_cert: The path to the client’s SSL certificate file in PEM format. SslKey must also
     be specified. Type: string.
    :vartype ssl_cert: JSON
    :ivar ssl_key: The path to the client’s SSL private key in PEM format. SslCert must also be
     specified. Type: string.
    :vartype ssl_key: JSON
    :ivar treat_tiny_as_boolean: When set to true, TINYINT(1) values are returned as booleans.
     Type: bool.
    :vartype treat_tiny_as_boolean: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "driver_version": {"key": "typeProperties.driverVersion", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "allow_zero_date_time": {"key": "typeProperties.allowZeroDateTime", "type": "object"},
        "connection_timeout": {"key": "typeProperties.connectionTimeout", "type": "object"},
        "convert_zero_date_time": {"key": "typeProperties.convertZeroDateTime", "type": "object"},
        "guid_format": {"key": "typeProperties.guidFormat", "type": "object"},
        "ssl_cert": {"key": "typeProperties.sslCert", "type": "object"},
        "ssl_key": {"key": "typeProperties.sslKey", "type": "object"},
        "treat_tiny_as_boolean": {"key": "typeProperties.treatTinyAsBoolean", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        driver_version: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        database: Optional[JSON] = None,
        ssl_mode: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        allow_zero_date_time: Optional[JSON] = None,
        connection_timeout: Optional[JSON] = None,
        convert_zero_date_time: Optional[JSON] = None,
        guid_format: Optional[JSON] = None,
        ssl_cert: Optional[JSON] = None,
        ssl_key: Optional[JSON] = None,
        treat_tiny_as_boolean: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword driver_version: The version of the MySQL driver. Type: string. V1 or empty for legacy
         driver, V2 for new driver. V1 can support connection string and property bag, V2 can only
         support connection string.
        :paramtype driver_version: JSON
        :keyword connection_string: The connection string.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. Type: string.
        :paramtype server: JSON
        :keyword port: The port for the connection. Type: integer.
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string.
        :paramtype username: JSON
        :keyword database: Database name for connection. Type: string.
        :paramtype database: JSON
        :keyword ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1: prefer, 2: require,
         3: verify-ca, 4: verify-full.
        :paramtype ssl_mode: JSON
        :keyword use_system_trust_store: Use system trust store for connection. Type: integer. 0:
         enable, 1: disable.
        :paramtype use_system_trust_store: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword allow_zero_date_time: This allows the special “zero” date value 0000-00-00 to be
         retrieved from the database. Type: boolean.
        :paramtype allow_zero_date_time: JSON
        :keyword connection_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error. Type: integer.
        :paramtype connection_timeout: JSON
        :keyword convert_zero_date_time: True to return DateTime.MinValue for date or datetime columns
         that have disallowed values. Type: boolean.
        :paramtype convert_zero_date_time: JSON
        :keyword guid_format: Determines which column type (if any) should be read as a GUID. Type:
         string. None: No column types are automatically read as a Guid; Char36: All CHAR(36) columns
         are read/written as a Guid using lowercase hex with hyphens, which matches UUID.
        :paramtype guid_format: JSON
        :keyword ssl_cert: The path to the client’s SSL certificate file in PEM format. SslKey must
         also be specified. Type: string.
        :paramtype ssl_cert: JSON
        :keyword ssl_key: The path to the client’s SSL private key in PEM format. SslCert must also be
         specified. Type: string.
        :paramtype ssl_key: JSON
        :keyword treat_tiny_as_boolean: When set to true, TINYINT(1) values are returned as booleans.
         Type: bool.
        :paramtype treat_tiny_as_boolean: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "MySql"
        self.driver_version = driver_version
        self.connection_string = connection_string
        self.server = server
        self.port = port
        self.username = username
        self.database = database
        self.ssl_mode = ssl_mode
        self.use_system_trust_store = use_system_trust_store
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.allow_zero_date_time = allow_zero_date_time
        self.connection_timeout = connection_timeout
        self.convert_zero_date_time = convert_zero_date_time
        self.guid_format = guid_format
        self.ssl_cert = ssl_cert
        self.ssl_key = ssl_key
        self.treat_tiny_as_boolean = treat_tiny_as_boolean


class MySqlSource(TabularSource):
    """A copy activity source for MySQL databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "MySqlSource"
        self.query = query


class MySqlTableDataset(Dataset):
    """The MySQL table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The MySQL table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The MySQL table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "MySqlTable"
        self.table_name = table_name


class NetezzaLinkedService(LinkedService):
    """Netezza linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar pwd: The Azure key vault secret reference of password in connection string.
    :vartype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "pwd": {"key": "typeProperties.pwd", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        pwd: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword pwd: The Azure key vault secret reference of password in connection string.
        :paramtype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Netezza"
        self.connection_string = connection_string
        self.pwd = pwd
        self.encrypted_credential = encrypted_credential


class NetezzaPartitionSettings(_serialization.Model):
    """The settings that will be leveraged for Netezza source partitioning.

    :ivar partition_column_name: The name of the column in integer type that will be used for
     proceeding range partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_lower_bound: JSON
    """

    _attribute_map = {
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_column_name: The name of the column in integer type that will be used for
         proceeding range partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_lower_bound: JSON
        """
        super().__init__(**kwargs)
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound


class NetezzaSource(TabularSource):
    """A copy activity Netezza source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    :ivar partition_option: The partition mechanism that will be used for Netezza read in parallel.
     Known values are: "None", "DataSlice", and "DynamicRange".
    :vartype partition_option: str or ~azure.synapse.artifacts.models.NetezzaPartitionOption
    :ivar partition_settings: The settings that will be leveraged for Netezza source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.NetezzaPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "str"},
        "partition_settings": {"key": "partitionSettings", "type": "NetezzaPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        partition_option: Optional[Union[str, "_models.NetezzaPartitionOption"]] = None,
        partition_settings: Optional["_models.NetezzaPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword partition_option: The partition mechanism that will be used for Netezza read in
         parallel. Known values are: "None", "DataSlice", and "DynamicRange".
        :paramtype partition_option: str or ~azure.synapse.artifacts.models.NetezzaPartitionOption
        :keyword partition_settings: The settings that will be leveraged for Netezza source
         partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.NetezzaPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "NetezzaSource"
        self.query = query
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class NetezzaTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Netezza dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Netezza. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Netezza. Type: string (or
     Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Netezza. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Netezza. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "NetezzaTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class Notebook(_serialization.Model):
    """Notebook.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar description: The description of the notebook.
    :vartype description: str
    :ivar big_data_pool: Big data pool reference.
    :vartype big_data_pool: ~azure.synapse.artifacts.models.BigDataPoolReference
    :ivar target_spark_configuration: The spark configuration of the spark job.
    :vartype target_spark_configuration:
     ~azure.synapse.artifacts.models.SparkConfigurationReference
    :ivar session_properties: Session properties.
    :vartype session_properties: ~azure.synapse.artifacts.models.NotebookSessionProperties
    :ivar metadata: Notebook root-level metadata. Required.
    :vartype metadata: ~azure.synapse.artifacts.models.NotebookMetadata
    :ivar nbformat: Notebook format (major number). Incremented between backwards incompatible
     changes to the notebook format. Required.
    :vartype nbformat: int
    :ivar nbformat_minor: Notebook format (minor number). Incremented for backward compatible
     changes to the notebook format. Required.
    :vartype nbformat_minor: int
    :ivar cells: Array of cells of the current notebook. Required.
    :vartype cells: list[~azure.synapse.artifacts.models.NotebookCell]
    :ivar folder: The folder that this notebook is in. If not specified, this notebook will appear
     at the root level.
    :vartype folder: ~azure.synapse.artifacts.models.NotebookFolder
    """

    _validation = {
        "metadata": {"required": True},
        "nbformat": {"required": True},
        "nbformat_minor": {"required": True},
        "cells": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "description": {"key": "description", "type": "str"},
        "big_data_pool": {"key": "bigDataPool", "type": "BigDataPoolReference"},
        "target_spark_configuration": {"key": "targetSparkConfiguration", "type": "SparkConfigurationReference"},
        "session_properties": {"key": "sessionProperties", "type": "NotebookSessionProperties"},
        "metadata": {"key": "metadata", "type": "NotebookMetadata"},
        "nbformat": {"key": "nbformat", "type": "int"},
        "nbformat_minor": {"key": "nbformat_minor", "type": "int"},
        "cells": {"key": "cells", "type": "[NotebookCell]"},
        "folder": {"key": "folder", "type": "NotebookFolder"},
    }

    def __init__(
        self,
        *,
        metadata: "_models.NotebookMetadata",
        nbformat: int,
        nbformat_minor: int,
        cells: List["_models.NotebookCell"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        big_data_pool: Optional["_models.BigDataPoolReference"] = None,
        target_spark_configuration: Optional["_models.SparkConfigurationReference"] = None,
        session_properties: Optional["_models.NotebookSessionProperties"] = None,
        folder: Optional["_models.NotebookFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: The description of the notebook.
        :paramtype description: str
        :keyword big_data_pool: Big data pool reference.
        :paramtype big_data_pool: ~azure.synapse.artifacts.models.BigDataPoolReference
        :keyword target_spark_configuration: The spark configuration of the spark job.
        :paramtype target_spark_configuration:
         ~azure.synapse.artifacts.models.SparkConfigurationReference
        :keyword session_properties: Session properties.
        :paramtype session_properties: ~azure.synapse.artifacts.models.NotebookSessionProperties
        :keyword metadata: Notebook root-level metadata. Required.
        :paramtype metadata: ~azure.synapse.artifacts.models.NotebookMetadata
        :keyword nbformat: Notebook format (major number). Incremented between backwards incompatible
         changes to the notebook format. Required.
        :paramtype nbformat: int
        :keyword nbformat_minor: Notebook format (minor number). Incremented for backward compatible
         changes to the notebook format. Required.
        :paramtype nbformat_minor: int
        :keyword cells: Array of cells of the current notebook. Required.
        :paramtype cells: list[~azure.synapse.artifacts.models.NotebookCell]
        :keyword folder: The folder that this notebook is in. If not specified, this notebook will
         appear at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.NotebookFolder
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.description = description
        self.big_data_pool = big_data_pool
        self.target_spark_configuration = target_spark_configuration
        self.session_properties = session_properties
        self.metadata = metadata
        self.nbformat = nbformat
        self.nbformat_minor = nbformat_minor
        self.cells = cells
        self.folder = folder


class NotebookCell(_serialization.Model):
    """Notebook cell.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar cell_type: String identifying the type of cell. Required.
    :vartype cell_type: str
    :ivar metadata: Cell-level metadata. Required.
    :vartype metadata: JSON
    :ivar source: Contents of the cell, represented as an array of lines. Required.
    :vartype source: list[str]
    :ivar attachments: Attachments associated with the cell.
    :vartype attachments: JSON
    :ivar outputs: Cell-level output items.
    :vartype outputs: list[~azure.synapse.artifacts.models.NotebookCellOutputItem]
    """

    _validation = {
        "cell_type": {"required": True},
        "metadata": {"required": True},
        "source": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "cell_type": {"key": "cell_type", "type": "str"},
        "metadata": {"key": "metadata", "type": "object"},
        "source": {"key": "source", "type": "[str]"},
        "attachments": {"key": "attachments", "type": "object"},
        "outputs": {"key": "outputs", "type": "[NotebookCellOutputItem]"},
    }

    def __init__(
        self,
        *,
        cell_type: str,
        metadata: JSON,
        source: List[str],
        additional_properties: Optional[Dict[str, JSON]] = None,
        attachments: Optional[JSON] = None,
        outputs: Optional[List["_models.NotebookCellOutputItem"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword cell_type: String identifying the type of cell. Required.
        :paramtype cell_type: str
        :keyword metadata: Cell-level metadata. Required.
        :paramtype metadata: JSON
        :keyword source: Contents of the cell, represented as an array of lines. Required.
        :paramtype source: list[str]
        :keyword attachments: Attachments associated with the cell.
        :paramtype attachments: JSON
        :keyword outputs: Cell-level output items.
        :paramtype outputs: list[~azure.synapse.artifacts.models.NotebookCellOutputItem]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.cell_type = cell_type
        self.metadata = metadata
        self.source = source
        self.attachments = attachments
        self.outputs = outputs


class NotebookCellOutputItem(_serialization.Model):
    """An item of the notebook cell execution output.

    All required parameters must be populated in order to send to Azure.

    :ivar name: For output_type=stream, determines the name of stream (stdout / stderr).
    :vartype name: str
    :ivar execution_count: Execution sequence number.
    :vartype execution_count: int
    :ivar output_type: Execution, display, or stream outputs. Required. Known values are:
     "execute_result", "display_data", "stream", and "error".
    :vartype output_type: str or ~azure.synapse.artifacts.models.CellOutputType
    :ivar text: For output_type=stream, the stream's text output, represented as a string or an
     array of strings.
    :vartype text: any
    :ivar data: Output data. Use MIME type as key, and content as value.
    :vartype data: JSON
    :ivar metadata: Metadata for the output item.
    :vartype metadata: JSON
    """

    _validation = {
        "output_type": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "execution_count": {"key": "execution_count", "type": "int"},
        "output_type": {"key": "output_type", "type": "str"},
        "text": {"key": "text", "type": "object"},
        "data": {"key": "data", "type": "object"},
        "metadata": {"key": "metadata", "type": "object"},
    }

    def __init__(
        self,
        *,
        output_type: Union[str, "_models.CellOutputType"],
        name: Optional[str] = None,
        execution_count: Optional[int] = None,
        text: Optional[Any] = None,
        data: Optional[JSON] = None,
        metadata: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: For output_type=stream, determines the name of stream (stdout / stderr).
        :paramtype name: str
        :keyword execution_count: Execution sequence number.
        :paramtype execution_count: int
        :keyword output_type: Execution, display, or stream outputs. Required. Known values are:
         "execute_result", "display_data", "stream", and "error".
        :paramtype output_type: str or ~azure.synapse.artifacts.models.CellOutputType
        :keyword text: For output_type=stream, the stream's text output, represented as a string or an
         array of strings.
        :paramtype text: any
        :keyword data: Output data. Use MIME type as key, and content as value.
        :paramtype data: JSON
        :keyword metadata: Metadata for the output item.
        :paramtype metadata: JSON
        """
        super().__init__(**kwargs)
        self.name = name
        self.execution_count = execution_count
        self.output_type = output_type
        self.text = text
        self.data = data
        self.metadata = metadata


class NotebookFolder(_serialization.Model):
    """The folder that this notebook is in. If not specified, this notebook will appear at the root
    level.

    :ivar name: The name of the folder that this notebook is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this notebook is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class NotebookKernelSpec(_serialization.Model):
    """Kernel information.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Name of the kernel specification. Required.
    :vartype name: str
    :ivar display_name: Name to display in UI. Required.
    :vartype display_name: str
    """

    _validation = {
        "name": {"required": True},
        "display_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "display_name": {"key": "display_name", "type": "str"},
    }

    def __init__(
        self, *, name: str, display_name: str, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Name of the kernel specification. Required.
        :paramtype name: str
        :keyword display_name: Name to display in UI. Required.
        :paramtype display_name: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.name = name
        self.display_name = display_name


class NotebookLanguageInfo(_serialization.Model):
    """Language info.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: The programming language which this kernel runs. Required.
    :vartype name: str
    :ivar codemirror_mode: The codemirror mode to use for code in this language.
    :vartype codemirror_mode: str
    """

    _validation = {
        "name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "codemirror_mode": {"key": "codemirror_mode", "type": "str"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        codemirror_mode: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: The programming language which this kernel runs. Required.
        :paramtype name: str
        :keyword codemirror_mode: The codemirror mode to use for code in this language.
        :paramtype codemirror_mode: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.name = name
        self.codemirror_mode = codemirror_mode


class NotebookListResponse(_serialization.Model):
    """A list of Notebook resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of Notebooks. Required.
    :vartype value: list[~azure.synapse.artifacts.models.NotebookResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[NotebookResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.NotebookResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of Notebooks. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.NotebookResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class NotebookMetadata(_serialization.Model):
    """Notebook root-level metadata.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar kernelspec: Kernel information.
    :vartype kernelspec: ~azure.synapse.artifacts.models.NotebookKernelSpec
    :ivar language_info: Language info.
    :vartype language_info: ~azure.synapse.artifacts.models.NotebookLanguageInfo
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "kernelspec": {"key": "kernelspec", "type": "NotebookKernelSpec"},
        "language_info": {"key": "language_info", "type": "NotebookLanguageInfo"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        kernelspec: Optional["_models.NotebookKernelSpec"] = None,
        language_info: Optional["_models.NotebookLanguageInfo"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword kernelspec: Kernel information.
        :paramtype kernelspec: ~azure.synapse.artifacts.models.NotebookKernelSpec
        :keyword language_info: Language info.
        :paramtype language_info: ~azure.synapse.artifacts.models.NotebookLanguageInfo
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.kernelspec = kernelspec
        self.language_info = language_info


class NotebookParameter(_serialization.Model):
    """Notebook parameter.

    :ivar value: Notebook parameter value. Type: string (or Expression with resultType string).
    :vartype value: JSON
    :ivar type: Notebook parameter type. Known values are: "string", "int", "float", and "bool".
    :vartype type: str or ~azure.synapse.artifacts.models.NotebookParameterType
    """

    _attribute_map = {
        "value": {"key": "value", "type": "object"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(
        self,
        *,
        value: Optional[JSON] = None,
        type: Optional[Union[str, "_models.NotebookParameterType"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword value: Notebook parameter value. Type: string (or Expression with resultType string).
        :paramtype value: JSON
        :keyword type: Notebook parameter type. Known values are: "string", "int", "float", and "bool".
        :paramtype type: str or ~azure.synapse.artifacts.models.NotebookParameterType
        """
        super().__init__(**kwargs)
        self.value = value
        self.type = type


class NotebookResource(_serialization.Model):
    """Notebook resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource Id for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource. Required.
    :vartype name: str
    :ivar type: The type of the resource. Ex- Microsoft.Compute/virtualMachines or
     Microsoft.Storage/storageAccounts.
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of Notebook. Required.
    :vartype properties: ~azure.synapse.artifacts.models.Notebook
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"required": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "Notebook"},
    }

    def __init__(self, *, name: str, properties: "_models.Notebook", **kwargs: Any) -> None:
        """
        :keyword name: The name of the resource. Required.
        :paramtype name: str
        :keyword properties: Properties of Notebook. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.Notebook
        """
        super().__init__(**kwargs)
        self.id = None
        self.name = name
        self.type = None
        self.etag = None
        self.properties = properties


class NotebookSessionProperties(_serialization.Model):
    """Session properties.

    All required parameters must be populated in order to send to Azure.

    :ivar driver_memory: Amount of memory to use for the driver process. Required.
    :vartype driver_memory: str
    :ivar driver_cores: Number of cores to use for the driver. Required.
    :vartype driver_cores: int
    :ivar executor_memory: Amount of memory to use per executor process. Required.
    :vartype executor_memory: str
    :ivar executor_cores: Number of cores to use for each executor. Required.
    :vartype executor_cores: int
    :ivar num_executors: Number of executors to launch for this session. Required.
    :vartype num_executors: int
    """

    _validation = {
        "driver_memory": {"required": True},
        "driver_cores": {"required": True},
        "executor_memory": {"required": True},
        "executor_cores": {"required": True},
        "num_executors": {"required": True},
    }

    _attribute_map = {
        "driver_memory": {"key": "driverMemory", "type": "str"},
        "driver_cores": {"key": "driverCores", "type": "int"},
        "executor_memory": {"key": "executorMemory", "type": "str"},
        "executor_cores": {"key": "executorCores", "type": "int"},
        "num_executors": {"key": "numExecutors", "type": "int"},
    }

    def __init__(
        self,
        *,
        driver_memory: str,
        driver_cores: int,
        executor_memory: str,
        executor_cores: int,
        num_executors: int,
        **kwargs: Any
    ) -> None:
        """
        :keyword driver_memory: Amount of memory to use for the driver process. Required.
        :paramtype driver_memory: str
        :keyword driver_cores: Number of cores to use for the driver. Required.
        :paramtype driver_cores: int
        :keyword executor_memory: Amount of memory to use per executor process. Required.
        :paramtype executor_memory: str
        :keyword executor_cores: Number of cores to use for each executor. Required.
        :paramtype executor_cores: int
        :keyword num_executors: Number of executors to launch for this session. Required.
        :paramtype num_executors: int
        """
        super().__init__(**kwargs)
        self.driver_memory = driver_memory
        self.driver_cores = driver_cores
        self.executor_memory = executor_memory
        self.executor_cores = executor_cores
        self.num_executors = num_executors


class ODataLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Open Data Protocol (OData) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The URL of the OData service endpoint. Type: string (or Expression with resultType
     string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the OData service. Known
     values are: "Basic", "Anonymous", "Windows", "AadServicePrincipal", and
     "ManagedServiceIdentity".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.ODataAuthenticationType
    :ivar user_name: User name of the OData service. Type: string (or Expression with resultType
     string).
    :vartype user_name: JSON
    :ivar password: Password of the OData service.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: Specify the tenant information (domain name or tenant ID) under which your
     application resides. Type: string (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar service_principal_id: Specify the application id of your application registered in Azure
     Active Directory. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar aad_resource_id: Specify the resource you are requesting authorization to use Directory.
     Type: string (or Expression with resultType string).
    :vartype aad_resource_id: JSON
    :ivar aad_service_principal_credential_type: Specify the credential type (key or cert) is used
     for service principal. Known values are: "ServicePrincipalKey" and "ServicePrincipalCert".
    :vartype aad_service_principal_credential_type: str or
     ~azure.synapse.artifacts.models.ODataAadServicePrincipalCredentialType
    :ivar service_principal_key: Specify the secret of your application registered in Azure Active
     Directory. Type: string (or Expression with resultType string).
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert: Specify the base64 encoded certificate of your
     application registered in Azure Active Directory. Type: string (or Expression with resultType
     string).
    :vartype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert_password: Specify the password of your certificate if
     your certificate has a password and you are using AadServicePrincipal authentication. Type:
     string (or Expression with resultType string).
    :vartype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "aad_resource_id": {"key": "typeProperties.aadResourceId", "type": "object"},
        "aad_service_principal_credential_type": {
            "key": "typeProperties.aadServicePrincipalCredentialType",
            "type": "str",
        },
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_embedded_cert": {"key": "typeProperties.servicePrincipalEmbeddedCert", "type": "SecretBase"},
        "service_principal_embedded_cert_password": {
            "key": "typeProperties.servicePrincipalEmbeddedCertPassword",
            "type": "SecretBase",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[Union[str, "_models.ODataAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        aad_resource_id: Optional[JSON] = None,
        aad_service_principal_credential_type: Optional[
            Union[str, "_models.ODataAadServicePrincipalCredentialType"]
        ] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert_password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The URL of the OData service endpoint. Type: string (or Expression with
         resultType string). Required.
        :paramtype url: JSON
        :keyword authentication_type: Type of authentication used to connect to the OData service.
         Known values are: "Basic", "Anonymous", "Windows", "AadServicePrincipal", and
         "ManagedServiceIdentity".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.ODataAuthenticationType
        :keyword user_name: User name of the OData service. Type: string (or Expression with resultType
         string).
        :paramtype user_name: JSON
        :keyword password: Password of the OData service.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: Specify the tenant information (domain name or tenant ID) under which your
         application resides. Type: string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword service_principal_id: Specify the application id of your application registered in
         Azure Active Directory. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword aad_resource_id: Specify the resource you are requesting authorization to use
         Directory. Type: string (or Expression with resultType string).
        :paramtype aad_resource_id: JSON
        :keyword aad_service_principal_credential_type: Specify the credential type (key or cert) is
         used for service principal. Known values are: "ServicePrincipalKey" and "ServicePrincipalCert".
        :paramtype aad_service_principal_credential_type: str or
         ~azure.synapse.artifacts.models.ODataAadServicePrincipalCredentialType
        :keyword service_principal_key: Specify the secret of your application registered in Azure
         Active Directory. Type: string (or Expression with resultType string).
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert: Specify the base64 encoded certificate of your
         application registered in Azure Active Directory. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert_password: Specify the password of your certificate if
         your certificate has a password and you are using AadServicePrincipal authentication. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "OData"
        self.url = url
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.tenant = tenant
        self.service_principal_id = service_principal_id
        self.azure_cloud_type = azure_cloud_type
        self.aad_resource_id = aad_resource_id
        self.aad_service_principal_credential_type = aad_service_principal_credential_type
        self.service_principal_key = service_principal_key
        self.service_principal_embedded_cert = service_principal_embedded_cert
        self.service_principal_embedded_cert_password = service_principal_embedded_cert_password
        self.encrypted_credential = encrypted_credential


class ODataResourceDataset(Dataset):
    """The Open Data Protocol (OData) resource dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar path: The OData resource path. Type: string (or Expression with resultType string).
    :vartype path: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "path": {"key": "typeProperties.path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        path: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword path: The OData resource path. Type: string (or Expression with resultType string).
        :paramtype path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ODataResource"
        self.path = path


class ODataSource(CopySource):
    """A copy activity source for OData source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: OData query. For example, "$top=1". Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:05:00. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: OData query. For example, "$top=1". Type: string (or Expression with resultType
         string).
        :paramtype query: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:05:00.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "ODataSource"
        self.query = query
        self.http_request_timeout = http_request_timeout
        self.additional_columns = additional_columns


class OdbcLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Open Database Connectivity (ODBC) linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The non-access credential portion of the connection string as well as
     an optional encrypted credential. Type: string, SecureString or AzureKeyVaultSecretReference.
     Required.
    :vartype connection_string: JSON
    :ivar authentication_type: Type of authentication used to connect to the ODBC data store.
     Possible values are: Anonymous and Basic. Type: string (or Expression with resultType string).
    :vartype authentication_type: JSON
    :ivar credential: The access credential portion of the connection string specified in
     driver-specific property-value format.
    :vartype credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar user_name: User name for Basic authentication. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "SecretBase"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        authentication_type: Optional[JSON] = None,
        credential: Optional["_models.SecretBase"] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The non-access credential portion of the connection string as well
         as an optional encrypted credential. Type: string, SecureString or
         AzureKeyVaultSecretReference. Required.
        :paramtype connection_string: JSON
        :keyword authentication_type: Type of authentication used to connect to the ODBC data store.
         Possible values are: Anonymous and Basic. Type: string (or Expression with resultType string).
        :paramtype authentication_type: JSON
        :keyword credential: The access credential portion of the connection string specified in
         driver-specific property-value format.
        :paramtype credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword user_name: User name for Basic authentication. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Odbc"
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.credential = credential
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential


class OdbcSink(CopySink):
    """A copy activity ODBC sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: A query to execute before starting the copy. Type: string (or Expression
     with resultType string).
    :vartype pre_copy_script: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: A query to execute before starting the copy. Type: string (or
         Expression with resultType string).
        :paramtype pre_copy_script: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "OdbcSink"
        self.pre_copy_script = pre_copy_script


class OdbcSource(TabularSource):
    """A copy activity source for ODBC databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "OdbcSource"
        self.query = query


class OdbcTableDataset(Dataset):
    """The ODBC table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The ODBC table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The ODBC table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "OdbcTable"
        self.table_name = table_name


class Office365Dataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Office365 account.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: Name of the dataset to extract from Office 365. Type: string (or Expression
     with resultType string). Required.
    :vartype table_name: JSON
    :ivar predicate: A predicate expression that can be used to filter the specific rows to extract
     from Office 365. Type: string (or Expression with resultType string).
    :vartype predicate: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "table_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "predicate": {"key": "typeProperties.predicate", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        table_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        predicate: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: Name of the dataset to extract from Office 365. Type: string (or
         Expression with resultType string). Required.
        :paramtype table_name: JSON
        :keyword predicate: A predicate expression that can be used to filter the specific rows to
         extract from Office 365. Type: string (or Expression with resultType string).
        :paramtype predicate: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Office365Table"
        self.table_name = table_name
        self.predicate = predicate


class Office365LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Office365 linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar office365_tenant_id: Azure tenant ID to which the Office 365 account belongs. Type:
     string (or Expression with resultType string). Required.
    :vartype office365_tenant_id: JSON
    :ivar service_principal_tenant_id: Specify the tenant information under which your Azure AD web
     application resides. Type: string (or Expression with resultType string). Required.
    :vartype service_principal_tenant_id: JSON
    :ivar service_principal_id: Specify the application's client ID. Type: string (or Expression
     with resultType string). Required.
    :vartype service_principal_id: JSON
    :ivar service_principal_key: Specify the application's key. Required.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type for
     authentication.'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert' for certificate. If
     not specified, 'ServicePrincipalKey' is in use. Type: string (or Expression with resultType
     string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_embedded_cert: Specify the base64 encoded certificate of your
     application registered in Azure Active Directory. Type: string (or Expression with resultType
     string).
    :vartype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert_password: Specify the password of your certificate if
     your certificate has a password and you are using AadServicePrincipal authentication. Type:
     string (or Expression with resultType string).
    :vartype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "office365_tenant_id": {"required": True},
        "service_principal_tenant_id": {"required": True},
        "service_principal_id": {"required": True},
        "service_principal_key": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "office365_tenant_id": {"key": "typeProperties.office365TenantId", "type": "object"},
        "service_principal_tenant_id": {"key": "typeProperties.servicePrincipalTenantId", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_embedded_cert": {"key": "typeProperties.servicePrincipalEmbeddedCert", "type": "SecretBase"},
        "service_principal_embedded_cert_password": {
            "key": "typeProperties.servicePrincipalEmbeddedCertPassword",
            "type": "SecretBase",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        office365_tenant_id: JSON,
        service_principal_tenant_id: JSON,
        service_principal_id: JSON,
        service_principal_key: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_embedded_cert: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert_password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword office365_tenant_id: Azure tenant ID to which the Office 365 account belongs. Type:
         string (or Expression with resultType string). Required.
        :paramtype office365_tenant_id: JSON
        :keyword service_principal_tenant_id: Specify the tenant information under which your Azure AD
         web application resides. Type: string (or Expression with resultType string). Required.
        :paramtype service_principal_tenant_id: JSON
        :keyword service_principal_id: Specify the application's client ID. Type: string (or Expression
         with resultType string). Required.
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: Specify the application's key. Required.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type for
         authentication.'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert' for certificate. If
         not specified, 'ServicePrincipalKey' is in use. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_embedded_cert: Specify the base64 encoded certificate of your
         application registered in Azure Active Directory. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert_password: Specify the password of your certificate if
         your certificate has a password and you are using AadServicePrincipal authentication. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Office365"
        self.office365_tenant_id = office365_tenant_id
        self.service_principal_tenant_id = service_principal_tenant_id
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_embedded_cert = service_principal_embedded_cert
        self.service_principal_embedded_cert_password = service_principal_embedded_cert_password
        self.encrypted_credential = encrypted_credential


class Office365Source(CopySource):  # pylint: disable=too-many-instance-attributes
    """A copy activity source for an Office 365 service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar allowed_groups: The groups containing all the users. Type: array of strings (or
     Expression with resultType array of strings).
    :vartype allowed_groups: JSON
    :ivar user_scope_filter_uri: The user scope uri. Type: string (or Expression with resultType
     string).
    :vartype user_scope_filter_uri: JSON
    :ivar date_filter_column: The Column to apply the :code:`<paramref name="StartTime"/>` and
     :code:`<paramref name="EndTime"/>`. Type: string (or Expression with resultType string).
    :vartype date_filter_column: JSON
    :ivar start_time: Start time of the requested range for this dataset. Type: string (or
     Expression with resultType string).
    :vartype start_time: JSON
    :ivar end_time: End time of the requested range for this dataset. Type: string (or Expression
     with resultType string).
    :vartype end_time: JSON
    :ivar output_columns: The columns to be read out from the Office 365 table. Type: array of
     objects (or Expression with resultType array of objects). itemType: OutputColumn.  Example: [ {
     "name": "Id" }, { "name": "CreatedDateTime" } ].
    :vartype output_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "allowed_groups": {"key": "allowedGroups", "type": "object"},
        "user_scope_filter_uri": {"key": "userScopeFilterUri", "type": "object"},
        "date_filter_column": {"key": "dateFilterColumn", "type": "object"},
        "start_time": {"key": "startTime", "type": "object"},
        "end_time": {"key": "endTime", "type": "object"},
        "output_columns": {"key": "outputColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        allowed_groups: Optional[JSON] = None,
        user_scope_filter_uri: Optional[JSON] = None,
        date_filter_column: Optional[JSON] = None,
        start_time: Optional[JSON] = None,
        end_time: Optional[JSON] = None,
        output_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword allowed_groups: The groups containing all the users. Type: array of strings (or
         Expression with resultType array of strings).
        :paramtype allowed_groups: JSON
        :keyword user_scope_filter_uri: The user scope uri. Type: string (or Expression with resultType
         string).
        :paramtype user_scope_filter_uri: JSON
        :keyword date_filter_column: The Column to apply the :code:`<paramref name="StartTime"/>` and
         :code:`<paramref name="EndTime"/>`. Type: string (or Expression with resultType string).
        :paramtype date_filter_column: JSON
        :keyword start_time: Start time of the requested range for this dataset. Type: string (or
         Expression with resultType string).
        :paramtype start_time: JSON
        :keyword end_time: End time of the requested range for this dataset. Type: string (or
         Expression with resultType string).
        :paramtype end_time: JSON
        :keyword output_columns: The columns to be read out from the Office 365 table. Type: array of
         objects (or Expression with resultType array of objects). itemType: OutputColumn.  Example: [ {
         "name": "Id" }, { "name": "CreatedDateTime" } ].
        :paramtype output_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "Office365Source"
        self.allowed_groups = allowed_groups
        self.user_scope_filter_uri = user_scope_filter_uri
        self.date_filter_column = date_filter_column
        self.start_time = start_time
        self.end_time = end_time
        self.output_columns = output_columns


class OperationResult(_serialization.Model):
    """Operation status for the operation.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar status: Operation status.
    :vartype status: str
    :ivar code: Error code.
    :vartype code: str
    :ivar message: Error message.
    :vartype message: str
    :ivar target: Property name/path in request associated with error.
    :vartype target: str
    :ivar details: Array with additional error details.
    :vartype details: list[~azure.synapse.artifacts.models.CloudError]
    """

    _validation = {
        "status": {"readonly": True},
    }

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "code": {"key": "error.code", "type": "str"},
        "message": {"key": "error.message", "type": "str"},
        "target": {"key": "error.target", "type": "str"},
        "details": {"key": "error.details", "type": "[CloudError]"},
    }

    def __init__(
        self,
        *,
        code: Optional[str] = None,
        message: Optional[str] = None,
        target: Optional[str] = None,
        details: Optional[List["_models.CloudError"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword code: Error code.
        :paramtype code: str
        :keyword message: Error message.
        :paramtype message: str
        :keyword target: Property name/path in request associated with error.
        :paramtype target: str
        :keyword details: Array with additional error details.
        :paramtype details: list[~azure.synapse.artifacts.models.CloudError]
        """
        super().__init__(**kwargs)
        self.status = None
        self.code = code
        self.message = message
        self.target = target
        self.details = details


class OracleLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Oracle database. This linked service has supported version property. The Version 1.0 is
    scheduled for deprecation while your pipeline will continue to run after EOL but without any
    bug fix or new features.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference. Only used for Version 1.0.
    :vartype connection_string: JSON
    :ivar server: The location of Oracle database you want to connect to, the supported forms
     include connector descriptor, Easy Connect (Plus) Naming and Oracle Net Services Name (Only
     self-hosted IR). Type: string. Only used for Version 2.0.
    :vartype server: JSON
    :ivar authentication_type: Authentication type for connecting to the Oracle database. Only used
     for Version 2.0. "Basic"
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.OracleAuthenticationType
    :ivar username: The Oracle database username. Type: string. Only used for Version 2.0.
    :vartype username: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encryption_client: Specifies the encryption client behavior. Supported values are
     accepted, rejected, requested or required, default value is required. Type: string. Only used
     for Version 2.0.
    :vartype encryption_client: JSON
    :ivar encryption_types_client: Specifies the encryption algorithms that client can use.
     Supported values are AES128, AES192, AES256, 3DES112, 3DES168, default value is (AES256). Type:
     string. Only used for Version 2.0.
    :vartype encryption_types_client: JSON
    :ivar crypto_checksum_client: Specifies the desired data integrity behavior when this client
     connects to a server. Supported values are accepted, rejected, requested or required, default
     value is required. Type: string. Only used for Version 2.0.
    :vartype crypto_checksum_client: JSON
    :ivar crypto_checksum_types_client: Specifies the crypto-checksum algorithms that client can
     use. Supported values are SHA1, SHA256, SHA384, SHA512, default value is (SHA512). Type:
     string. Only used for Version 2.0.
    :vartype crypto_checksum_types_client: JSON
    :ivar initial_lob_fetch_size: Specifies the amount that the source initially fetches for LOB
     columns, default value is 0. Type: integer. Only used for Version 2.0.
    :vartype initial_lob_fetch_size: JSON
    :ivar fetch_size: Specifies the number of bytes that the driver allocates to fetch the data in
     one database round-trip, default value is 10485760. Type: integer. Only used for Version 2.0.
    :vartype fetch_size: JSON
    :ivar statement_cache_size: Specifies the number of cursors or statements to be cached for each
     database connection, default value is 0. Type: integer. Only used for Version 2.0.
    :vartype statement_cache_size: JSON
    :ivar initialization_string: Specifies a command that is issued immediately after connecting to
     the database to manage session settings. Type: string. Only used for Version 2.0.
    :vartype initialization_string: JSON
    :ivar enable_bulk_load: Specifies whether to use bulk copy or batch insert when loading data
     into the database, default value is true. Type: boolean. Only used for Version 2.0.
    :vartype enable_bulk_load: JSON
    :ivar support_v1_data_types: Specifies whether to use the Version 1.0 data type mappings. Do
     not set this to true unless you want to keep backward compatibility with Version 1.0's data
     type mappings, default value is false. Type: boolean. Only used for Version 2.0.
    :vartype support_v1_data_types: JSON
    :ivar fetch_tswtz_as_timestamp: Specifies whether the driver returns column value with the
     TIMESTAMP WITH TIME ZONE data type as DateTime or string. This setting is ignored if
     supportV1DataTypes is not true, default value is true. Type: boolean. Only used for Version
     2.0.
    :vartype fetch_tswtz_as_timestamp: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encryption_client": {"key": "typeProperties.encryptionClient", "type": "object"},
        "encryption_types_client": {"key": "typeProperties.encryptionTypesClient", "type": "object"},
        "crypto_checksum_client": {"key": "typeProperties.cryptoChecksumClient", "type": "object"},
        "crypto_checksum_types_client": {"key": "typeProperties.cryptoChecksumTypesClient", "type": "object"},
        "initial_lob_fetch_size": {"key": "typeProperties.initialLobFetchSize", "type": "object"},
        "fetch_size": {"key": "typeProperties.fetchSize", "type": "object"},
        "statement_cache_size": {"key": "typeProperties.statementCacheSize", "type": "object"},
        "initialization_string": {"key": "typeProperties.initializationString", "type": "object"},
        "enable_bulk_load": {"key": "typeProperties.enableBulkLoad", "type": "object"},
        "support_v1_data_types": {"key": "typeProperties.supportV1DataTypes", "type": "object"},
        "fetch_tswtz_as_timestamp": {"key": "typeProperties.fetchTswtzAsTimestamp", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.OracleAuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encryption_client: Optional[JSON] = None,
        encryption_types_client: Optional[JSON] = None,
        crypto_checksum_client: Optional[JSON] = None,
        crypto_checksum_types_client: Optional[JSON] = None,
        initial_lob_fetch_size: Optional[JSON] = None,
        fetch_size: Optional[JSON] = None,
        statement_cache_size: Optional[JSON] = None,
        initialization_string: Optional[JSON] = None,
        enable_bulk_load: Optional[JSON] = None,
        support_v1_data_types: Optional[JSON] = None,
        fetch_tswtz_as_timestamp: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference. Only used for Version 1.0.
        :paramtype connection_string: JSON
        :keyword server: The location of Oracle database you want to connect to, the supported forms
         include connector descriptor, Easy Connect (Plus) Naming and Oracle Net Services Name (Only
         self-hosted IR). Type: string. Only used for Version 2.0.
        :paramtype server: JSON
        :keyword authentication_type: Authentication type for connecting to the Oracle database. Only
         used for Version 2.0. "Basic"
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.OracleAuthenticationType
        :keyword username: The Oracle database username. Type: string. Only used for Version 2.0.
        :paramtype username: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encryption_client: Specifies the encryption client behavior. Supported values are
         accepted, rejected, requested or required, default value is required. Type: string. Only used
         for Version 2.0.
        :paramtype encryption_client: JSON
        :keyword encryption_types_client: Specifies the encryption algorithms that client can use.
         Supported values are AES128, AES192, AES256, 3DES112, 3DES168, default value is (AES256). Type:
         string. Only used for Version 2.0.
        :paramtype encryption_types_client: JSON
        :keyword crypto_checksum_client: Specifies the desired data integrity behavior when this client
         connects to a server. Supported values are accepted, rejected, requested or required, default
         value is required. Type: string. Only used for Version 2.0.
        :paramtype crypto_checksum_client: JSON
        :keyword crypto_checksum_types_client: Specifies the crypto-checksum algorithms that client can
         use. Supported values are SHA1, SHA256, SHA384, SHA512, default value is (SHA512). Type:
         string. Only used for Version 2.0.
        :paramtype crypto_checksum_types_client: JSON
        :keyword initial_lob_fetch_size: Specifies the amount that the source initially fetches for LOB
         columns, default value is 0. Type: integer. Only used for Version 2.0.
        :paramtype initial_lob_fetch_size: JSON
        :keyword fetch_size: Specifies the number of bytes that the driver allocates to fetch the data
         in one database round-trip, default value is 10485760. Type: integer. Only used for Version
         2.0.
        :paramtype fetch_size: JSON
        :keyword statement_cache_size: Specifies the number of cursors or statements to be cached for
         each database connection, default value is 0. Type: integer. Only used for Version 2.0.
        :paramtype statement_cache_size: JSON
        :keyword initialization_string: Specifies a command that is issued immediately after connecting
         to the database to manage session settings. Type: string. Only used for Version 2.0.
        :paramtype initialization_string: JSON
        :keyword enable_bulk_load: Specifies whether to use bulk copy or batch insert when loading data
         into the database, default value is true. Type: boolean. Only used for Version 2.0.
        :paramtype enable_bulk_load: JSON
        :keyword support_v1_data_types: Specifies whether to use the Version 1.0 data type mappings. Do
         not set this to true unless you want to keep backward compatibility with Version 1.0's data
         type mappings, default value is false. Type: boolean. Only used for Version 2.0.
        :paramtype support_v1_data_types: JSON
        :keyword fetch_tswtz_as_timestamp: Specifies whether the driver returns column value with the
         TIMESTAMP WITH TIME ZONE data type as DateTime or string. This setting is ignored if
         supportV1DataTypes is not true, default value is true. Type: boolean. Only used for Version
         2.0.
        :paramtype fetch_tswtz_as_timestamp: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Oracle"
        self.connection_string = connection_string
        self.server = server
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.encryption_client = encryption_client
        self.encryption_types_client = encryption_types_client
        self.crypto_checksum_client = crypto_checksum_client
        self.crypto_checksum_types_client = crypto_checksum_types_client
        self.initial_lob_fetch_size = initial_lob_fetch_size
        self.fetch_size = fetch_size
        self.statement_cache_size = statement_cache_size
        self.initialization_string = initialization_string
        self.enable_bulk_load = enable_bulk_load
        self.support_v1_data_types = support_v1_data_types
        self.fetch_tswtz_as_timestamp = fetch_tswtz_as_timestamp
        self.encrypted_credential = encrypted_credential


class OraclePartitionSettings(_serialization.Model):
    """The settings that will be leveraged for Oracle source partitioning.

    :ivar partition_names: Names of the physical partitions of Oracle table.
    :vartype partition_names: JSON
    :ivar partition_column_name: The name of the column in integer type that will be used for
     proceeding range partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_lower_bound: JSON
    """

    _attribute_map = {
        "partition_names": {"key": "partitionNames", "type": "object"},
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_names: Optional[JSON] = None,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_names: Names of the physical partitions of Oracle table.
        :paramtype partition_names: JSON
        :keyword partition_column_name: The name of the column in integer type that will be used for
         proceeding range partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_lower_bound: JSON
        """
        super().__init__(**kwargs)
        self.partition_names = partition_names
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound


class OracleServiceCloudLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Oracle Service Cloud linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The URL of the Oracle Service Cloud instance. Required.
    :vartype host: JSON
    :ivar username: The user name that you use to access Oracle Service Cloud server. Required.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name that you provided in the username
     key. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
     boolean).
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "username": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        username: JSON,
        password: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The URL of the Oracle Service Cloud instance. Required.
        :paramtype host: JSON
        :keyword username: The user name that you use to access Oracle Service Cloud server. Required.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name that you provided in the
         username key. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
         boolean).
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "OracleServiceCloud"
        self.host = host
        self.username = username
        self.password = password
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class OracleServiceCloudObjectDataset(Dataset):
    """Oracle Service Cloud dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "OracleServiceCloudObject"
        self.table_name = table_name


class OracleServiceCloudSource(TabularSource):
    """A copy activity Oracle Service Cloud source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "OracleServiceCloudSource"
        self.query = query


class OracleSink(CopySink):
    """A copy activity Oracle sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "OracleSink"
        self.pre_copy_script = pre_copy_script


class OracleSource(CopySource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Oracle source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar oracle_reader_query: Oracle reader query. Type: string (or Expression with resultType
     string).
    :vartype oracle_reader_query: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar partition_option: The partition mechanism that will be used for Oracle read in parallel.
     Known values are: "None", "PhysicalPartitionsOfTable", and "DynamicRange".
    :vartype partition_option: str or ~azure.synapse.artifacts.models.OraclePartitionOption
    :ivar partition_settings: The settings that will be leveraged for Oracle source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.OraclePartitionSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar number_precision: The decimal precision used to represent Oracle NUMBER type without
     precision and scale. The range is 1 to 256 and default value is 256 if not specified. Type:
     integer (or Expression with resultType integer). Only used for Version 2.0.
    :vartype number_precision: JSON
    :ivar number_scale: The decimal scale used to represent Oracle NUMBER type without precision
     and scale. The range is 0 to 130 and default value is 130 if not specified. Type: integer (or
     Expression with resultType integer). Only used for Version 2.0.
    :vartype number_scale: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "oracle_reader_query": {"key": "oracleReaderQuery", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "str"},
        "partition_settings": {"key": "partitionSettings", "type": "OraclePartitionSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "number_precision": {"key": "numberPrecision", "type": "object"},
        "number_scale": {"key": "numberScale", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        oracle_reader_query: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        partition_option: Optional[Union[str, "_models.OraclePartitionOption"]] = None,
        partition_settings: Optional["_models.OraclePartitionSettings"] = None,
        additional_columns: Optional[JSON] = None,
        number_precision: Optional[JSON] = None,
        number_scale: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword oracle_reader_query: Oracle reader query. Type: string (or Expression with resultType
         string).
        :paramtype oracle_reader_query: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword partition_option: The partition mechanism that will be used for Oracle read in
         parallel. Known values are: "None", "PhysicalPartitionsOfTable", and "DynamicRange".
        :paramtype partition_option: str or ~azure.synapse.artifacts.models.OraclePartitionOption
        :keyword partition_settings: The settings that will be leveraged for Oracle source
         partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.OraclePartitionSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword number_precision: The decimal precision used to represent Oracle NUMBER type without
         precision and scale. The range is 1 to 256 and default value is 256 if not specified. Type:
         integer (or Expression with resultType integer). Only used for Version 2.0.
        :paramtype number_precision: JSON
        :keyword number_scale: The decimal scale used to represent Oracle NUMBER type without precision
         and scale. The range is 0 to 130 and default value is 130 if not specified. Type: integer (or
         Expression with resultType integer). Only used for Version 2.0.
        :paramtype number_scale: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "OracleSource"
        self.oracle_reader_query = oracle_reader_query
        self.query_timeout = query_timeout
        self.partition_option = partition_option
        self.partition_settings = partition_settings
        self.additional_columns = additional_columns
        self.number_precision = number_precision
        self.number_scale = number_scale


class OracleTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The on-premises Oracle database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The schema name of the on-premises Oracle database. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the on-premises Oracle database. Type: string (or Expression
     with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The schema name of the on-premises Oracle database.
         Type: string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the on-premises Oracle database. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "OracleTable"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class OrcDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """ORC dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the ORC data storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar orc_compression_codec: The data orcCompressionCodec. Type: string (or Expression with
     resultType string).
    :vartype orc_compression_codec: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "orc_compression_codec": {"key": "typeProperties.orcCompressionCodec", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        orc_compression_codec: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the ORC data storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword orc_compression_codec: The data orcCompressionCodec. Type: string (or Expression with
         resultType string).
        :paramtype orc_compression_codec: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Orc"
        self.location = location
        self.orc_compression_codec = orc_compression_codec


class OrcFormat(DatasetStorageFormat):
    """The data stored in Optimized Row Columnar (ORC) format.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        """
        super().__init__(
            additional_properties=additional_properties, serializer=serializer, deserializer=deserializer, **kwargs
        )
        self.type: str = "OrcFormat"


class OrcSink(CopySink):
    """A copy activity ORC sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: ORC store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: ORC format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.OrcWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "OrcWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.OrcWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: ORC store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: ORC format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.OrcWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "OrcSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class OrcSource(CopySource):
    """A copy activity ORC source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: ORC store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: ORC store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "OrcSource"
        self.store_settings = store_settings
        self.additional_columns = additional_columns


class OrcWriteSettings(FormatWriteSettings):
    """Orc write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_rows_per_file: Limit the written file's row count to be smaller than or equal to the
     specified count. Type: integer (or Expression with resultType integer).
    :vartype max_rows_per_file: JSON
    :ivar file_name_prefix: Specifies the file name pattern
     :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
     based store without partitionOptions. Type: string (or Expression with resultType string).
    :vartype file_name_prefix: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_rows_per_file": {"key": "maxRowsPerFile", "type": "object"},
        "file_name_prefix": {"key": "fileNamePrefix", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_rows_per_file: Optional[JSON] = None,
        file_name_prefix: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_rows_per_file: Limit the written file's row count to be smaller than or equal to
         the specified count. Type: integer (or Expression with resultType integer).
        :paramtype max_rows_per_file: JSON
        :keyword file_name_prefix: Specifies the file name pattern
         :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
         based store without partitionOptions. Type: string (or Expression with resultType string).
        :paramtype file_name_prefix: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "OrcWriteSettings"
        self.max_rows_per_file = max_rows_per_file
        self.file_name_prefix = file_name_prefix


class OutputColumn(_serialization.Model):
    """The columns to be read out from the Office 365 table.

    :ivar name: Name of the table column. Type: string.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: Name of the table column. Type: string.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class ParameterSpecification(_serialization.Model):
    """Definition of a single parameter for an entity.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Parameter type. Required. Known values are: "Object", "String", "Int", "Float",
     "Bool", "Array", and "SecureString".
    :vartype type: str or ~azure.synapse.artifacts.models.ParameterType
    :ivar default_value: Default value of parameter.
    :vartype default_value: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "default_value": {"key": "defaultValue", "type": "object"},
    }

    def __init__(
        self, *, type: Union[str, "_models.ParameterType"], default_value: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword type: Parameter type. Required. Known values are: "Object", "String", "Int", "Float",
         "Bool", "Array", and "SecureString".
        :paramtype type: str or ~azure.synapse.artifacts.models.ParameterType
        :keyword default_value: Default value of parameter.
        :paramtype default_value: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.default_value = default_value


class ParquetDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Parquet dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the parquet storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar compression_codec: A string from ParquetCompressionCodecEnum or an expression.
    :vartype compression_codec: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "compression_codec": {"key": "typeProperties.compressionCodec", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        compression_codec: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the parquet storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword compression_codec: A string from ParquetCompressionCodecEnum or an expression.
        :paramtype compression_codec: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Parquet"
        self.location = location
        self.compression_codec = compression_codec


class ParquetFormat(DatasetStorageFormat):
    """The data stored in Parquet format.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        """
        super().__init__(
            additional_properties=additional_properties, serializer=serializer, deserializer=deserializer, **kwargs
        )
        self.type: str = "ParquetFormat"


class ParquetReadSettings(FormatReadSettings):
    """Parquet read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar compression_properties: Compression settings.
    :vartype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "compression_properties": {"key": "compressionProperties", "type": "CompressionReadSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        compression_properties: Optional["_models.CompressionReadSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword compression_properties: Compression settings.
        :paramtype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "ParquetReadSettings"
        self.compression_properties = compression_properties


class ParquetSink(CopySink):
    """A copy activity Parquet sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Parquet store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
    :ivar format_settings: Parquet format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.ParquetWriteSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreWriteSettings"},
        "format_settings": {"key": "formatSettings", "type": "ParquetWriteSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreWriteSettings"] = None,
        format_settings: Optional["_models.ParquetWriteSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Parquet store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreWriteSettings
        :keyword format_settings: Parquet format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.ParquetWriteSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "ParquetSink"
        self.store_settings = store_settings
        self.format_settings = format_settings


class ParquetSource(CopySource):
    """A copy activity Parquet source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Parquet store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: Parquet format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.ParquetReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "formatSettings", "type": "ParquetReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.ParquetReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Parquet store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: Parquet format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.ParquetReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "ParquetSource"
        self.store_settings = store_settings
        self.format_settings = format_settings
        self.additional_columns = additional_columns


class ParquetWriteSettings(FormatWriteSettings):
    """Parquet write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_rows_per_file: Limit the written file's row count to be smaller than or equal to the
     specified count. Type: integer (or Expression with resultType integer).
    :vartype max_rows_per_file: JSON
    :ivar file_name_prefix: Specifies the file name pattern
     :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
     based store without partitionOptions. Type: string (or Expression with resultType string).
    :vartype file_name_prefix: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_rows_per_file": {"key": "maxRowsPerFile", "type": "object"},
        "file_name_prefix": {"key": "fileNamePrefix", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_rows_per_file: Optional[JSON] = None,
        file_name_prefix: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_rows_per_file: Limit the written file's row count to be smaller than or equal to
         the specified count. Type: integer (or Expression with resultType integer).
        :paramtype max_rows_per_file: JSON
        :keyword file_name_prefix: Specifies the file name pattern
         :code:`<fileNamePrefix>`_:code:`<fileIndex>`.:code:`<fileExtension>` when copy from non-file
         based store without partitionOptions. Type: string (or Expression with resultType string).
        :paramtype file_name_prefix: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "ParquetWriteSettings"
        self.max_rows_per_file = max_rows_per_file
        self.file_name_prefix = file_name_prefix


class PaypalLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Paypal Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The URL of the PayPal instance. (i.e. api.sandbox.paypal.com). Required.
    :vartype host: JSON
    :ivar client_id: The client ID associated with your PayPal application. Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with your PayPal application.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The URL of the PayPal instance. (i.e. api.sandbox.paypal.com). Required.
        :paramtype host: JSON
        :keyword client_id: The client ID associated with your PayPal application. Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with your PayPal application.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Paypal"
        self.host = host
        self.client_id = client_id
        self.client_secret = client_secret
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class PaypalObjectDataset(Dataset):
    """Paypal Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "PaypalObject"
        self.table_name = table_name


class PaypalSource(TabularSource):
    """A copy activity Paypal Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "PaypalSource"
        self.query = query


class PhoenixLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Phoenix server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The IP address or host name of the Phoenix server. (i.e. 192.168.222.160).
     Required.
    :vartype host: JSON
    :ivar port: The TCP port that the Phoenix server uses to listen for client connections. The
     default value is 8765.
    :vartype port: JSON
    :ivar http_path: The partial URL corresponding to the Phoenix server. (i.e.
     /gateway/sandbox/phoenix/version). The default value is hbasephoenix if using
     WindowsAzureHDInsightService.
    :vartype http_path: JSON
    :ivar authentication_type: The authentication mechanism used to connect to the Phoenix server.
     Required. Known values are: "Anonymous", "UsernameAndPassword", and
     "WindowsAzureHDInsightService".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.PhoenixAuthenticationType
    :ivar username: The user name used to connect to the Phoenix server.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false.
    :vartype enable_ssl: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false.
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "http_path": {"key": "typeProperties.httpPath", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        authentication_type: Union[str, "_models.PhoenixAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        http_path: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        enable_ssl: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The IP address or host name of the Phoenix server. (i.e. 192.168.222.160).
         Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the Phoenix server uses to listen for client connections. The
         default value is 8765.
        :paramtype port: JSON
        :keyword http_path: The partial URL corresponding to the Phoenix server. (i.e.
         /gateway/sandbox/phoenix/version). The default value is hbasephoenix if using
         WindowsAzureHDInsightService.
        :paramtype http_path: JSON
        :keyword authentication_type: The authentication mechanism used to connect to the Phoenix
         server. Required. Known values are: "Anonymous", "UsernameAndPassword", and
         "WindowsAzureHDInsightService".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.PhoenixAuthenticationType
        :keyword username: The user name used to connect to the Phoenix server.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false.
        :paramtype enable_ssl: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Phoenix"
        self.host = host
        self.port = port
        self.http_path = http_path
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.enable_ssl = enable_ssl
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class PhoenixObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Phoenix server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Phoenix. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Phoenix. Type: string (or
     Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Phoenix. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Phoenix. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "PhoenixObject"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class PhoenixSource(TabularSource):
    """A copy activity Phoenix server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "PhoenixSource"
        self.query = query


class PipelineFolder(_serialization.Model):
    """The folder that this Pipeline is in. If not specified, Pipeline will appear at the root level.

    :ivar name: The name of the folder that this Pipeline is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this Pipeline is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class PipelineListResponse(_serialization.Model):
    """A list of pipeline resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of pipelines. Required.
    :vartype value: list[~azure.synapse.artifacts.models.PipelineResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[PipelineResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.PipelineResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of pipelines. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.PipelineResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class PipelineReference(_serialization.Model):
    """Pipeline reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Pipeline reference type. Required. "PipelineReference"
    :vartype type: str or ~azure.synapse.artifacts.models.PipelineReferenceType
    :ivar reference_name: Reference pipeline name. Required.
    :vartype reference_name: str
    :ivar name: Reference name.
    :vartype name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
        "name": {"key": "name", "type": "str"},
    }

    def __init__(
        self,
        *,
        type: Union[str, "_models.PipelineReferenceType"],
        reference_name: str,
        name: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Pipeline reference type. Required. "PipelineReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.PipelineReferenceType
        :keyword reference_name: Reference pipeline name. Required.
        :paramtype reference_name: str
        :keyword name: Reference name.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name
        self.name = name


class PipelineResource(SubResource):  # pylint: disable=too-many-instance-attributes
    """Pipeline resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar description: The description of the pipeline.
    :vartype description: str
    :ivar activities: List of activities in pipeline.
    :vartype activities: list[~azure.synapse.artifacts.models.Activity]
    :ivar parameters: List of parameters for pipeline.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar variables: List of variables for pipeline.
    :vartype variables: dict[str, ~azure.synapse.artifacts.models.VariableSpecification]
    :ivar concurrency: The max number of concurrent runs for the pipeline.
    :vartype concurrency: int
    :ivar annotations: List of tags that can be used for describing the Pipeline.
    :vartype annotations: list[JSON]
    :ivar run_dimensions: Dimensions emitted by Pipeline.
    :vartype run_dimensions: dict[str, JSON]
    :ivar folder: The folder that this Pipeline is in. If not specified, Pipeline will appear at
     the root level.
    :vartype folder: ~azure.synapse.artifacts.models.PipelineFolder
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "concurrency": {"minimum": 1},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "additional_properties": {"key": "", "type": "{object}"},
        "description": {"key": "properties.description", "type": "str"},
        "activities": {"key": "properties.activities", "type": "[Activity]"},
        "parameters": {"key": "properties.parameters", "type": "{ParameterSpecification}"},
        "variables": {"key": "properties.variables", "type": "{VariableSpecification}"},
        "concurrency": {"key": "properties.concurrency", "type": "int"},
        "annotations": {"key": "properties.annotations", "type": "[object]"},
        "run_dimensions": {"key": "properties.runDimensions", "type": "{object}"},
        "folder": {"key": "properties.folder", "type": "PipelineFolder"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        activities: Optional[List["_models.Activity"]] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        variables: Optional[Dict[str, "_models.VariableSpecification"]] = None,
        concurrency: Optional[int] = None,
        annotations: Optional[List[JSON]] = None,
        run_dimensions: Optional[Dict[str, JSON]] = None,
        folder: Optional["_models.PipelineFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: The description of the pipeline.
        :paramtype description: str
        :keyword activities: List of activities in pipeline.
        :paramtype activities: list[~azure.synapse.artifacts.models.Activity]
        :keyword parameters: List of parameters for pipeline.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword variables: List of variables for pipeline.
        :paramtype variables: dict[str, ~azure.synapse.artifacts.models.VariableSpecification]
        :keyword concurrency: The max number of concurrent runs for the pipeline.
        :paramtype concurrency: int
        :keyword annotations: List of tags that can be used for describing the Pipeline.
        :paramtype annotations: list[JSON]
        :keyword run_dimensions: Dimensions emitted by Pipeline.
        :paramtype run_dimensions: dict[str, JSON]
        :keyword folder: The folder that this Pipeline is in. If not specified, Pipeline will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.PipelineFolder
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.description = description
        self.activities = activities
        self.parameters = parameters
        self.variables = variables
        self.concurrency = concurrency
        self.annotations = annotations
        self.run_dimensions = run_dimensions
        self.folder = folder


class PipelineRun(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """Information about a pipeline run.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar run_id: Identifier of a run.
    :vartype run_id: str
    :ivar run_group_id: Identifier that correlates all the recovery runs of a pipeline run.
    :vartype run_group_id: str
    :ivar is_latest: Indicates if the recovered pipeline run is the latest in its group.
    :vartype is_latest: bool
    :ivar pipeline_name: The pipeline name.
    :vartype pipeline_name: str
    :ivar parameters: The full or partial list of parameter name, value pair used in the pipeline
     run.
    :vartype parameters: dict[str, str]
    :ivar invoked_by: Entity that started the pipeline run.
    :vartype invoked_by: ~azure.synapse.artifacts.models.PipelineRunInvokedBy
    :ivar last_updated: The last updated timestamp for the pipeline run event in ISO8601 format.
    :vartype last_updated: ~datetime.datetime
    :ivar run_start: The start time of a pipeline run in ISO8601 format.
    :vartype run_start: ~datetime.datetime
    :ivar run_end: The end time of a pipeline run in ISO8601 format.
    :vartype run_end: ~datetime.datetime
    :ivar duration_in_ms: The duration of a pipeline run.
    :vartype duration_in_ms: int
    :ivar status: The status of a pipeline run.
    :vartype status: str
    :ivar message: The message from a pipeline run.
    :vartype message: str
    """

    _validation = {
        "run_id": {"readonly": True},
        "run_group_id": {"readonly": True},
        "is_latest": {"readonly": True},
        "pipeline_name": {"readonly": True},
        "parameters": {"readonly": True},
        "invoked_by": {"readonly": True},
        "last_updated": {"readonly": True},
        "run_start": {"readonly": True},
        "run_end": {"readonly": True},
        "duration_in_ms": {"readonly": True},
        "status": {"readonly": True},
        "message": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "run_id": {"key": "runId", "type": "str"},
        "run_group_id": {"key": "runGroupId", "type": "str"},
        "is_latest": {"key": "isLatest", "type": "bool"},
        "pipeline_name": {"key": "pipelineName", "type": "str"},
        "parameters": {"key": "parameters", "type": "{str}"},
        "invoked_by": {"key": "invokedBy", "type": "PipelineRunInvokedBy"},
        "last_updated": {"key": "lastUpdated", "type": "iso-8601"},
        "run_start": {"key": "runStart", "type": "iso-8601"},
        "run_end": {"key": "runEnd", "type": "iso-8601"},
        "duration_in_ms": {"key": "durationInMs", "type": "int"},
        "status": {"key": "status", "type": "str"},
        "message": {"key": "message", "type": "str"},
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.run_id = None
        self.run_group_id = None
        self.is_latest = None
        self.pipeline_name = None
        self.parameters = None
        self.invoked_by = None
        self.last_updated = None
        self.run_start = None
        self.run_end = None
        self.duration_in_ms = None
        self.status = None
        self.message = None


class PipelineRunInvokedBy(_serialization.Model):
    """Provides entity name and id that started the pipeline run.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar name: Name of the entity that started the pipeline run.
    :vartype name: str
    :ivar id: The ID of the entity that started the run.
    :vartype id: str
    :ivar invoked_by_type: The type of the entity that started the run.
    :vartype invoked_by_type: str
    """

    _validation = {
        "name": {"readonly": True},
        "id": {"readonly": True},
        "invoked_by_type": {"readonly": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "id": {"key": "id", "type": "str"},
        "invoked_by_type": {"key": "invokedByType", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.name = None
        self.id = None
        self.invoked_by_type = None


class PipelineRunsQueryResponse(_serialization.Model):
    """A list pipeline runs.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of pipeline runs. Required.
    :vartype value: list[~azure.synapse.artifacts.models.PipelineRun]
    :ivar continuation_token: The continuation token for getting the next page of results, if any
     remaining results exist, null otherwise.
    :vartype continuation_token: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[PipelineRun]"},
        "continuation_token": {"key": "continuationToken", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.PipelineRun"], continuation_token: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of pipeline runs. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.PipelineRun]
        :keyword continuation_token: The continuation token for getting the next page of results, if
         any remaining results exist, null otherwise.
        :paramtype continuation_token: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.continuation_token = continuation_token


class PolybaseSettings(_serialization.Model):
    """PolyBase settings.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar reject_type: Reject type. Known values are: "value" and "percentage".
    :vartype reject_type: str or ~azure.synapse.artifacts.models.PolybaseSettingsRejectType
    :ivar reject_value: Specifies the value or the percentage of rows that can be rejected before
     the query fails. Type: number (or Expression with resultType number), minimum: 0.
    :vartype reject_value: JSON
    :ivar reject_sample_value: Determines the number of rows to attempt to retrieve before the
     PolyBase recalculates the percentage of rejected rows. Type: integer (or Expression with
     resultType integer), minimum: 0.
    :vartype reject_sample_value: JSON
    :ivar use_type_default: Specifies how to handle missing values in delimited text files when
     PolyBase retrieves data from the text file. Type: boolean (or Expression with resultType
     boolean).
    :vartype use_type_default: JSON
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "reject_type": {"key": "rejectType", "type": "str"},
        "reject_value": {"key": "rejectValue", "type": "object"},
        "reject_sample_value": {"key": "rejectSampleValue", "type": "object"},
        "use_type_default": {"key": "useTypeDefault", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        reject_type: Optional[Union[str, "_models.PolybaseSettingsRejectType"]] = None,
        reject_value: Optional[JSON] = None,
        reject_sample_value: Optional[JSON] = None,
        use_type_default: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword reject_type: Reject type. Known values are: "value" and "percentage".
        :paramtype reject_type: str or ~azure.synapse.artifacts.models.PolybaseSettingsRejectType
        :keyword reject_value: Specifies the value or the percentage of rows that can be rejected
         before the query fails. Type: number (or Expression with resultType number), minimum: 0.
        :paramtype reject_value: JSON
        :keyword reject_sample_value: Determines the number of rows to attempt to retrieve before the
         PolyBase recalculates the percentage of rejected rows. Type: integer (or Expression with
         resultType integer), minimum: 0.
        :paramtype reject_sample_value: JSON
        :keyword use_type_default: Specifies how to handle missing values in delimited text files when
         PolyBase retrieves data from the text file. Type: boolean (or Expression with resultType
         boolean).
        :paramtype use_type_default: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.reject_type = reject_type
        self.reject_value = reject_value
        self.reject_sample_value = reject_sample_value
        self.use_type_default = use_type_default


class PostgreSqlLinkedService(LinkedService):
    """Linked service for PostgreSQL data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string. Required.
    :vartype connection_string: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string. Required.
        :paramtype connection_string: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "PostgreSql"
        self.connection_string = connection_string
        self.password = password
        self.encrypted_credential = encrypted_credential


class PostgreSqlSource(TabularSource):
    """A copy activity source for PostgreSQL databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "PostgreSqlSource"
        self.query = query


class PostgreSqlTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The PostgreSQL table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The PostgreSQL table name. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The PostgreSQL schema name. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The PostgreSQL table name. Type: string (or Expression with resultType string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The PostgreSQL schema name. Type: string (or Expression
         with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "PostgreSqlTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class PostgreSqlV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for PostgreSQLV2 data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Server name for connection. Type: string. Required.
    :vartype server: JSON
    :ivar port: The port for the connection. Type: integer.
    :vartype port: JSON
    :ivar username: Username for authentication. Type: string. Required.
    :vartype username: JSON
    :ivar database: Database name for connection. Type: string. Required.
    :vartype database: JSON
    :ivar authentication_type: The authentication type to use. Type: string. Required.
    :vartype authentication_type: JSON
    :ivar ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
     require, 4: verify-ca, 5: verify-full. Type: integer. Required.
    :vartype ssl_mode: JSON
    :ivar schema: Sets the schema search path. Type: string.
    :vartype schema: JSON
    :ivar pooling: Whether connection pooling should be used. Type: boolean.
    :vartype pooling: JSON
    :ivar connection_timeout: The time to wait (in seconds) while trying to establish a connection
     before terminating the attempt and generating an error. Type: integer.
    :vartype connection_timeout: JSON
    :ivar command_timeout: The time to wait (in seconds) while trying to execute a command before
     terminating the attempt and generating an error. Set to zero for infinity. Type: integer.
    :vartype command_timeout: JSON
    :ivar trust_server_certificate: Whether to trust the server certificate without validating it.
     Type: boolean.
    :vartype trust_server_certificate: JSON
    :ivar ssl_certificate: Location of a client certificate to be sent to the server. Type: string.
    :vartype ssl_certificate: JSON
    :ivar ssl_key: Location of a client key for a client certificate to be sent to the server.
     Type: string.
    :vartype ssl_key: JSON
    :ivar ssl_password: Password for a key for a client certificate. Type: string.
    :vartype ssl_password: JSON
    :ivar read_buffer_size: Determines the size of the internal buffer uses when reading.
     Increasing may improve performance if transferring large values from the database. Type:
     integer.
    :vartype read_buffer_size: JSON
    :ivar log_parameters: When enabled, parameter values are logged when commands are executed.
     Type: boolean.
    :vartype log_parameters: JSON
    :ivar timezone: Gets or sets the session timezone. Type: string.
    :vartype timezone: JSON
    :ivar encoding: Gets or sets the .NET encoding that will be used to encode/decode PostgreSQL
     string data. Type: string.
    :vartype encoding: JSON
    :ivar password: The Azure key vault secret reference of password in connection string. Type:
     string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "username": {"required": True},
        "database": {"required": True},
        "authentication_type": {"required": True},
        "ssl_mode": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "schema": {"key": "typeProperties.schema", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_timeout": {"key": "typeProperties.connectionTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "ssl_certificate": {"key": "typeProperties.sslCertificate", "type": "object"},
        "ssl_key": {"key": "typeProperties.sslKey", "type": "object"},
        "ssl_password": {"key": "typeProperties.sslPassword", "type": "object"},
        "read_buffer_size": {"key": "typeProperties.readBufferSize", "type": "object"},
        "log_parameters": {"key": "typeProperties.logParameters", "type": "object"},
        "timezone": {"key": "typeProperties.timezone", "type": "object"},
        "encoding": {"key": "typeProperties.encoding", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: JSON,
        username: JSON,
        database: JSON,
        authentication_type: JSON,
        ssl_mode: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        ssl_certificate: Optional[JSON] = None,
        ssl_key: Optional[JSON] = None,
        ssl_password: Optional[JSON] = None,
        read_buffer_size: Optional[JSON] = None,
        log_parameters: Optional[JSON] = None,
        timezone: Optional[JSON] = None,
        encoding: Optional[JSON] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Server name for connection. Type: string. Required.
        :paramtype server: JSON
        :keyword port: The port for the connection. Type: integer.
        :paramtype port: JSON
        :keyword username: Username for authentication. Type: string. Required.
        :paramtype username: JSON
        :keyword database: Database name for connection. Type: string. Required.
        :paramtype database: JSON
        :keyword authentication_type: The authentication type to use. Type: string. Required.
        :paramtype authentication_type: JSON
        :keyword ssl_mode: SSL mode for connection. Type: integer. 0: disable, 1:allow, 2: prefer, 3:
         require, 4: verify-ca, 5: verify-full. Type: integer. Required.
        :paramtype ssl_mode: JSON
        :keyword schema: Sets the schema search path. Type: string.
        :paramtype schema: JSON
        :keyword pooling: Whether connection pooling should be used. Type: boolean.
        :paramtype pooling: JSON
        :keyword connection_timeout: The time to wait (in seconds) while trying to establish a
         connection before terminating the attempt and generating an error. Type: integer.
        :paramtype connection_timeout: JSON
        :keyword command_timeout: The time to wait (in seconds) while trying to execute a command
         before terminating the attempt and generating an error. Set to zero for infinity. Type:
         integer.
        :paramtype command_timeout: JSON
        :keyword trust_server_certificate: Whether to trust the server certificate without validating
         it. Type: boolean.
        :paramtype trust_server_certificate: JSON
        :keyword ssl_certificate: Location of a client certificate to be sent to the server. Type:
         string.
        :paramtype ssl_certificate: JSON
        :keyword ssl_key: Location of a client key for a client certificate to be sent to the server.
         Type: string.
        :paramtype ssl_key: JSON
        :keyword ssl_password: Password for a key for a client certificate. Type: string.
        :paramtype ssl_password: JSON
        :keyword read_buffer_size: Determines the size of the internal buffer uses when reading.
         Increasing may improve performance if transferring large values from the database. Type:
         integer.
        :paramtype read_buffer_size: JSON
        :keyword log_parameters: When enabled, parameter values are logged when commands are executed.
         Type: boolean.
        :paramtype log_parameters: JSON
        :keyword timezone: Gets or sets the session timezone. Type: string.
        :paramtype timezone: JSON
        :keyword encoding: Gets or sets the .NET encoding that will be used to encode/decode PostgreSQL
         string data. Type: string.
        :paramtype encoding: JSON
        :keyword password: The Azure key vault secret reference of password in connection string. Type:
         string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "PostgreSqlV2"
        self.server = server
        self.port = port
        self.username = username
        self.database = database
        self.authentication_type = authentication_type
        self.ssl_mode = ssl_mode
        self.schema = schema
        self.pooling = pooling
        self.connection_timeout = connection_timeout
        self.command_timeout = command_timeout
        self.trust_server_certificate = trust_server_certificate
        self.ssl_certificate = ssl_certificate
        self.ssl_key = ssl_key
        self.ssl_password = ssl_password
        self.read_buffer_size = read_buffer_size
        self.log_parameters = log_parameters
        self.timezone = timezone
        self.encoding = encoding
        self.password = password
        self.encrypted_credential = encrypted_credential


class PostgreSqlV2Source(TabularSource):
    """A copy activity source for PostgreSQL databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "PostgreSqlV2Source"
        self.query = query


class PostgreSqlV2TableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The PostgreSQLV2 table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table: The PostgreSQL table name. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The PostgreSQL schema name. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table: The PostgreSQL table name. Type: string (or Expression with resultType string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The PostgreSQL schema name. Type: string (or Expression
         with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "PostgreSqlV2Table"
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class PowerBIWorkspaceLinkedService(LinkedService):
    """Power BI Workspace linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar workspace_id: The Power BI workspace id. Required.
    :vartype workspace_id: str
    :ivar tenant_id: The tenant id to which the Power BI workspace belongs. Required.
    :vartype tenant_id: str
    """

    _validation = {
        "type": {"required": True},
        "workspace_id": {"required": True},
        "tenant_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "workspace_id": {"key": "typeProperties.workspaceId", "type": "str"},
        "tenant_id": {"key": "typeProperties.tenantId", "type": "str"},
    }

    def __init__(
        self,
        *,
        workspace_id: str,
        tenant_id: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword workspace_id: The Power BI workspace id. Required.
        :paramtype workspace_id: str
        :keyword tenant_id: The tenant id to which the Power BI workspace belongs. Required.
        :paramtype tenant_id: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "PowerBIWorkspace"
        self.workspace_id = workspace_id
        self.tenant_id = tenant_id


class PrestoLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Presto server linked service. This linked service has supported version property. The Version
    1.0 is scheduled for deprecation while your pipeline will continue to run after EOL but without
    any bug fix or new features.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The IP address or host name of the Presto server. (i.e. 192.168.222.160). Required.
    :vartype host: JSON
    :ivar server_version: The version of the Presto server. (i.e. 0.148-t) Only used for Version
     1.0.
    :vartype server_version: JSON
    :ivar catalog: The catalog context for all request against the server. Required.
    :vartype catalog: JSON
    :ivar port: The TCP port that the Presto server uses to listen for client connections. The
     default value is 8080 when disable SSL, default value is 443 when enable SSL.
    :vartype port: JSON
    :ivar authentication_type: The authentication mechanism used to connect to the Presto server.
     Required. Known values are: "Anonymous" and "LDAP".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.PrestoAuthenticationType
    :ivar username: The user name used to connect to the Presto server.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value for legacy version is False. The default value for version 2.0 is True.
    :vartype enable_ssl: JSON
    :ivar enable_server_certificate_validation: Specifies whether the connections to the server
     will validate server certificate, the default value is True. Only used for Version 2.0.
    :vartype enable_server_certificate_validation: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR. Only used for
     Version 1.0.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false. Only used for Version 1.0.
    :vartype use_system_trust_store: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
     Only used for Version 1.0.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false. Only used for Version 1.0.
    :vartype allow_self_signed_server_cert: JSON
    :ivar time_zone_id: The local time zone used by the connection. Valid values for this option
     are specified in the IANA Time Zone Database. The default value for Version 1.0 is the client
     system time zone. The default value for Version 2.0 is server system timeZone.
    :vartype time_zone_id: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "catalog": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "server_version": {"key": "typeProperties.serverVersion", "type": "object"},
        "catalog": {"key": "typeProperties.catalog", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "time_zone_id": {"key": "typeProperties.timeZoneID", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        catalog: JSON,
        authentication_type: Union[str, "_models.PrestoAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server_version: Optional[JSON] = None,
        port: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        enable_ssl: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        time_zone_id: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The IP address or host name of the Presto server. (i.e. 192.168.222.160).
         Required.
        :paramtype host: JSON
        :keyword server_version: The version of the Presto server. (i.e. 0.148-t) Only used for Version
         1.0.
        :paramtype server_version: JSON
        :keyword catalog: The catalog context for all request against the server. Required.
        :paramtype catalog: JSON
        :keyword port: The TCP port that the Presto server uses to listen for client connections. The
         default value is 8080 when disable SSL, default value is 443 when enable SSL.
        :paramtype port: JSON
        :keyword authentication_type: The authentication mechanism used to connect to the Presto
         server. Required. Known values are: "Anonymous" and "LDAP".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.PrestoAuthenticationType
        :keyword username: The user name used to connect to the Presto server.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value for legacy version is False. The default value for version 2.0 is True.
        :paramtype enable_ssl: JSON
        :keyword enable_server_certificate_validation: Specifies whether the connections to the server
         will validate server certificate, the default value is True. Only used for Version 2.0.
        :paramtype enable_server_certificate_validation: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR. Only used
         for Version 1.0.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false. Only used for Version
         1.0.
        :paramtype use_system_trust_store: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
         Only used for Version 1.0.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false. Only used for Version 1.0.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword time_zone_id: The local time zone used by the connection. Valid values for this option
         are specified in the IANA Time Zone Database. The default value for Version 1.0 is the client
         system time zone. The default value for Version 2.0 is server system timeZone.
        :paramtype time_zone_id: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Presto"
        self.host = host
        self.server_version = server_version
        self.catalog = catalog
        self.port = port
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.enable_ssl = enable_ssl
        self.enable_server_certificate_validation = enable_server_certificate_validation
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.time_zone_id = time_zone_id
        self.encrypted_credential = encrypted_credential


class PrestoObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Presto server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Presto. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Presto. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Presto. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Presto. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "PrestoObject"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class PrestoSource(TabularSource):
    """A copy activity Presto server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "PrestoSource"
        self.query = query


class PrivateEndpoint(_serialization.Model):
    """Private endpoint details.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Resource id of the private endpoint.
    :vartype id: str
    """

    _validation = {
        "id": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.id = None


class ProxyResource(Resource):
    """The resource model definition for a Azure Resource Manager proxy resource. It will not have
    tags and a location.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    """


class PrivateEndpointConnection(ProxyResource):
    """A private endpoint connection.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar private_endpoint: The private endpoint which the connection belongs to.
    :vartype private_endpoint: ~azure.synapse.artifacts.models.PrivateEndpoint
    :ivar private_link_service_connection_state: Connection state of the private endpoint
     connection.
    :vartype private_link_service_connection_state:
     ~azure.synapse.artifacts.models.PrivateLinkServiceConnectionState
    :ivar provisioning_state: Provisioning state of the private endpoint connection.
    :vartype provisioning_state: str
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "provisioning_state": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "private_endpoint": {"key": "properties.privateEndpoint", "type": "PrivateEndpoint"},
        "private_link_service_connection_state": {
            "key": "properties.privateLinkServiceConnectionState",
            "type": "PrivateLinkServiceConnectionState",
        },
        "provisioning_state": {"key": "properties.provisioningState", "type": "str"},
    }

    def __init__(
        self,
        *,
        private_endpoint: Optional["_models.PrivateEndpoint"] = None,
        private_link_service_connection_state: Optional["_models.PrivateLinkServiceConnectionState"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword private_endpoint: The private endpoint which the connection belongs to.
        :paramtype private_endpoint: ~azure.synapse.artifacts.models.PrivateEndpoint
        :keyword private_link_service_connection_state: Connection state of the private endpoint
         connection.
        :paramtype private_link_service_connection_state:
         ~azure.synapse.artifacts.models.PrivateLinkServiceConnectionState
        """
        super().__init__(**kwargs)
        self.private_endpoint = private_endpoint
        self.private_link_service_connection_state = private_link_service_connection_state
        self.provisioning_state = None


class PrivateLinkServiceConnectionState(_serialization.Model):
    """Connection state details of the private endpoint.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar status: The private link service connection status.
    :vartype status: str
    :ivar description: The private link service connection description.
    :vartype description: str
    :ivar actions_required: The actions required for private link service connection.
    :vartype actions_required: str
    """

    _validation = {
        "actions_required": {"readonly": True},
    }

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "actions_required": {"key": "actionsRequired", "type": "str"},
    }

    def __init__(self, *, status: Optional[str] = None, description: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword status: The private link service connection status.
        :paramtype status: str
        :keyword description: The private link service connection description.
        :paramtype description: str
        """
        super().__init__(**kwargs)
        self.status = status
        self.description = description
        self.actions_required = None


class PurviewConfiguration(_serialization.Model):
    """Purview Configuration.

    :ivar purview_resource_id: Purview Resource ID.
    :vartype purview_resource_id: str
    """

    _attribute_map = {
        "purview_resource_id": {"key": "purviewResourceId", "type": "str"},
    }

    def __init__(self, *, purview_resource_id: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword purview_resource_id: Purview Resource ID.
        :paramtype purview_resource_id: str
        """
        super().__init__(**kwargs)
        self.purview_resource_id = purview_resource_id


class QueryDataFlowDebugSessionsResponse(_serialization.Model):
    """A list of active debug sessions.

    :ivar value: Array with all active debug sessions.
    :vartype value: list[~azure.synapse.artifacts.models.DataFlowDebugSessionInfo]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _attribute_map = {
        "value": {"key": "value", "type": "[DataFlowDebugSessionInfo]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self,
        *,
        value: Optional[List["_models.DataFlowDebugSessionInfo"]] = None,
        next_link: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword value: Array with all active debug sessions.
        :paramtype value: list[~azure.synapse.artifacts.models.DataFlowDebugSessionInfo]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class QueryTableStatusRequest(_serialization.Model):
    """QueryTableStatusRequest.

    :ivar max_segment_count: Max segment count to query table status.
    :vartype max_segment_count: int
    :ivar continuation_token: Continuation token to query table status.
    :vartype continuation_token: JSON
    """

    _validation = {
        "max_segment_count": {"maximum": 1000},
    }

    _attribute_map = {
        "max_segment_count": {"key": "maxSegmentCount", "type": "int"},
        "continuation_token": {"key": "continuationToken", "type": "object"},
    }

    def __init__(
        self, *, max_segment_count: Optional[int] = None, continuation_token: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword max_segment_count: Max segment count to query table status.
        :paramtype max_segment_count: int
        :keyword continuation_token: Continuation token to query table status.
        :paramtype continuation_token: JSON
        """
        super().__init__(**kwargs)
        self.max_segment_count = max_segment_count
        self.continuation_token = continuation_token


class QuickbaseLinkedService(LinkedService):
    """Linked service for Quickbase.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The url to connect Quickbase source. Type: string (or Expression with resultType
     string). Required.
    :vartype url: JSON
    :ivar user_token: The user token for the Quickbase source. Required.
    :vartype user_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
        "user_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "user_token": {"key": "typeProperties.userToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        user_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The url to connect Quickbase source. Type: string (or Expression with resultType
         string). Required.
        :paramtype url: JSON
        :keyword user_token: The user token for the Quickbase source. Required.
        :paramtype user_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Quickbase"
        self.url = url
        self.user_token = user_token
        self.encrypted_credential = encrypted_credential


class QuickBooksLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """QuickBooks server linked service. This linked service has supported version property. The
    Version 1.0 is scheduled for deprecation while your pipeline will continue to run after EOL but
    without any bug fix or new features.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to QuickBooks. It is mutually exclusive
     with any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar endpoint: The endpoint of the QuickBooks server. (i.e. quickbooks.api.intuit.com).
     Required.
    :vartype endpoint: JSON
    :ivar company_id: The company ID of the QuickBooks company to authorize. Required.
    :vartype company_id: JSON
    :ivar consumer_key: The consumer key for OAuth 2.0 authentication. Required.
    :vartype consumer_key: JSON
    :ivar consumer_secret: The consumer secret for OAuth 2.0 authentication. Required.
    :vartype consumer_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar access_token: The access token for OAuth 2.0 authentication.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar access_token_secret: The access token secret is deprecated for OAuth 1.0 authentication.
     Only used for version 1.0.
    :vartype access_token_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar refresh_token: The refresh token for OAuth 2.0 authentication.
    :vartype refresh_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "company_id": {"required": True},
        "consumer_key": {"required": True},
        "consumer_secret": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "company_id": {"key": "typeProperties.companyId", "type": "object"},
        "consumer_key": {"key": "typeProperties.consumerKey", "type": "object"},
        "consumer_secret": {"key": "typeProperties.consumerSecret", "type": "SecretBase"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "access_token_secret": {"key": "typeProperties.accessTokenSecret", "type": "SecretBase"},
        "refresh_token": {"key": "typeProperties.refreshToken", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        company_id: JSON,
        consumer_key: JSON,
        consumer_secret: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        access_token: Optional["_models.SecretBase"] = None,
        access_token_secret: Optional["_models.SecretBase"] = None,
        refresh_token: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to QuickBooks. It is mutually
         exclusive with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword endpoint: The endpoint of the QuickBooks server. (i.e. quickbooks.api.intuit.com).
         Required.
        :paramtype endpoint: JSON
        :keyword company_id: The company ID of the QuickBooks company to authorize. Required.
        :paramtype company_id: JSON
        :keyword consumer_key: The consumer key for OAuth 2.0 authentication. Required.
        :paramtype consumer_key: JSON
        :keyword consumer_secret: The consumer secret for OAuth 2.0 authentication. Required.
        :paramtype consumer_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword access_token: The access token for OAuth 2.0 authentication.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword access_token_secret: The access token secret is deprecated for OAuth 1.0
         authentication. Only used for version 1.0.
        :paramtype access_token_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword refresh_token: The refresh token for OAuth 2.0 authentication.
        :paramtype refresh_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "QuickBooks"
        self.connection_properties = connection_properties
        self.endpoint = endpoint
        self.company_id = company_id
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret
        self.access_token = access_token
        self.access_token_secret = access_token_secret
        self.refresh_token = refresh_token
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.encrypted_credential = encrypted_credential


class QuickBooksObjectDataset(Dataset):
    """QuickBooks server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "QuickBooksObject"
        self.table_name = table_name


class QuickBooksSource(TabularSource):
    """A copy activity QuickBooks server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "QuickBooksSource"
        self.query = query


class RecurrenceSchedule(_serialization.Model):
    """The recurrence schedule.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar minutes: The minutes.
    :vartype minutes: list[int]
    :ivar hours: The hours.
    :vartype hours: list[int]
    :ivar week_days: The days of the week.
    :vartype week_days: list[str or ~azure.synapse.artifacts.models.DayOfWeek]
    :ivar month_days: The month days.
    :vartype month_days: list[int]
    :ivar monthly_occurrences: The monthly occurrences.
    :vartype monthly_occurrences:
     list[~azure.synapse.artifacts.models.RecurrenceScheduleOccurrence]
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "minutes": {"key": "minutes", "type": "[int]"},
        "hours": {"key": "hours", "type": "[int]"},
        "week_days": {"key": "weekDays", "type": "[str]"},
        "month_days": {"key": "monthDays", "type": "[int]"},
        "monthly_occurrences": {"key": "monthlyOccurrences", "type": "[RecurrenceScheduleOccurrence]"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        minutes: Optional[List[int]] = None,
        hours: Optional[List[int]] = None,
        week_days: Optional[List[Union[str, "_models.DayOfWeek"]]] = None,
        month_days: Optional[List[int]] = None,
        monthly_occurrences: Optional[List["_models.RecurrenceScheduleOccurrence"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword minutes: The minutes.
        :paramtype minutes: list[int]
        :keyword hours: The hours.
        :paramtype hours: list[int]
        :keyword week_days: The days of the week.
        :paramtype week_days: list[str or ~azure.synapse.artifacts.models.DayOfWeek]
        :keyword month_days: The month days.
        :paramtype month_days: list[int]
        :keyword monthly_occurrences: The monthly occurrences.
        :paramtype monthly_occurrences:
         list[~azure.synapse.artifacts.models.RecurrenceScheduleOccurrence]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.minutes = minutes
        self.hours = hours
        self.week_days = week_days
        self.month_days = month_days
        self.monthly_occurrences = monthly_occurrences


class RecurrenceScheduleOccurrence(_serialization.Model):
    """The recurrence schedule occurrence.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar day: The day of the week. Known values are: "Sunday", "Monday", "Tuesday", "Wednesday",
     "Thursday", "Friday", and "Saturday".
    :vartype day: str or ~azure.synapse.artifacts.models.DayOfWeek
    :ivar occurrence: The occurrence.
    :vartype occurrence: int
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "day": {"key": "day", "type": "str"},
        "occurrence": {"key": "occurrence", "type": "int"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        day: Optional[Union[str, "_models.DayOfWeek"]] = None,
        occurrence: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword day: The day of the week. Known values are: "Sunday", "Monday", "Tuesday",
         "Wednesday", "Thursday", "Friday", and "Saturday".
        :paramtype day: str or ~azure.synapse.artifacts.models.DayOfWeek
        :keyword occurrence: The occurrence.
        :paramtype occurrence: int
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.day = day
        self.occurrence = occurrence


class RedirectIncompatibleRowSettings(_serialization.Model):
    """Redirect incompatible row settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar linked_service_name: Name of the Azure Storage, Storage SAS, or Azure Data Lake Store
     linked service used for redirecting incompatible row. Must be specified if
     redirectIncompatibleRowSettings is specified. Type: string (or Expression with resultType
     string). Required.
    :vartype linked_service_name: JSON
    :ivar path: The path for storing the redirect incompatible row data. Type: string (or
     Expression with resultType string).
    :vartype path: JSON
    """

    _validation = {
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "linked_service_name": {"key": "linkedServiceName", "type": "object"},
        "path": {"key": "path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        path: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword linked_service_name: Name of the Azure Storage, Storage SAS, or Azure Data Lake Store
         linked service used for redirecting incompatible row. Must be specified if
         redirectIncompatibleRowSettings is specified. Type: string (or Expression with resultType
         string). Required.
        :paramtype linked_service_name: JSON
        :keyword path: The path for storing the redirect incompatible row data. Type: string (or
         Expression with resultType string).
        :paramtype path: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.linked_service_name = linked_service_name
        self.path = path


class RedshiftUnloadSettings(_serialization.Model):
    """The Amazon S3 settings needed for the interim Amazon S3 when copying from Amazon Redshift with
    unload. With this, data from Amazon Redshift source will be unloaded into S3 first and then
    copied into the targeted sink from the interim S3.

    All required parameters must be populated in order to send to Azure.

    :ivar s3_linked_service_name: The name of the Amazon S3 linked service which will be used for
     the unload operation when copying from the Amazon Redshift source. Required.
    :vartype s3_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar bucket_name: The bucket of the interim Amazon S3 which will be used to store the unloaded
     data from Amazon Redshift source. The bucket must be in the same region as the Amazon Redshift
     source. Type: string (or Expression with resultType string). Required.
    :vartype bucket_name: JSON
    """

    _validation = {
        "s3_linked_service_name": {"required": True},
        "bucket_name": {"required": True},
    }

    _attribute_map = {
        "s3_linked_service_name": {"key": "s3LinkedServiceName", "type": "LinkedServiceReference"},
        "bucket_name": {"key": "bucketName", "type": "object"},
    }

    def __init__(
        self, *, s3_linked_service_name: "_models.LinkedServiceReference", bucket_name: JSON, **kwargs: Any
    ) -> None:
        """
        :keyword s3_linked_service_name: The name of the Amazon S3 linked service which will be used
         for the unload operation when copying from the Amazon Redshift source. Required.
        :paramtype s3_linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword bucket_name: The bucket of the interim Amazon S3 which will be used to store the
         unloaded data from Amazon Redshift source. The bucket must be in the same region as the Amazon
         Redshift source. Type: string (or Expression with resultType string). Required.
        :paramtype bucket_name: JSON
        """
        super().__init__(**kwargs)
        self.s3_linked_service_name = s3_linked_service_name
        self.bucket_name = bucket_name


class RelationalSource(CopySource):
    """A copy activity source for various relational databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "RelationalSource"
        self.query = query
        self.additional_columns = additional_columns


class RelationalTableDataset(Dataset):
    """The relational table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The relational table name. Type: string (or Expression with resultType
     string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The relational table name. Type: string (or Expression with resultType
         string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "RelationalTable"
        self.table_name = table_name


class RerunTriggerListResponse(_serialization.Model):
    """A list of rerun triggers.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of rerun triggers. Required.
    :vartype value: list[~azure.synapse.artifacts.models.RerunTriggerResource]
    :ivar next_link: The continuation token for getting the next page of results, if any remaining
     results exist, null otherwise.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
        "next_link": {"readonly": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[RerunTriggerResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(self, *, value: List["_models.RerunTriggerResource"], **kwargs: Any) -> None:
        """
        :keyword value: List of rerun triggers. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.RerunTriggerResource]
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = None


class RerunTriggerResource(SubResource):
    """RerunTrigger resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of the rerun trigger. Required.
    :vartype properties: ~azure.synapse.artifacts.models.RerunTumblingWindowTrigger
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "RerunTumblingWindowTrigger"},
    }

    def __init__(self, *, properties: "_models.RerunTumblingWindowTrigger", **kwargs: Any) -> None:
        """
        :keyword properties: Properties of the rerun trigger. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.RerunTumblingWindowTrigger
        """
        super().__init__(**kwargs)
        self.properties = properties


class RerunTumblingWindowTrigger(Trigger):
    """Trigger that schedules pipeline reruns for all fixed time interval windows from a requested
    start time to requested end time.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar parent_trigger: The parent trigger reference. Required.
    :vartype parent_trigger: JSON
    :ivar requested_start_time: The start time for the time period for which restatement is
     initiated. Only UTC time is currently supported. Required.
    :vartype requested_start_time: ~datetime.datetime
    :ivar requested_end_time: The end time for the time period for which restatement is initiated.
     Only UTC time is currently supported. Required.
    :vartype requested_end_time: ~datetime.datetime
    :ivar rerun_concurrency: The max number of parallel time windows (ready for execution) for
     which a rerun is triggered. Required.
    :vartype rerun_concurrency: int
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "parent_trigger": {"required": True},
        "requested_start_time": {"required": True},
        "requested_end_time": {"required": True},
        "rerun_concurrency": {"required": True, "maximum": 50, "minimum": 1},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "parent_trigger": {"key": "typeProperties.parentTrigger", "type": "object"},
        "requested_start_time": {"key": "typeProperties.requestedStartTime", "type": "iso-8601"},
        "requested_end_time": {"key": "typeProperties.requestedEndTime", "type": "iso-8601"},
        "rerun_concurrency": {"key": "typeProperties.rerunConcurrency", "type": "int"},
    }

    def __init__(
        self,
        *,
        parent_trigger: JSON,
        requested_start_time: datetime.datetime,
        requested_end_time: datetime.datetime,
        rerun_concurrency: int,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword parent_trigger: The parent trigger reference. Required.
        :paramtype parent_trigger: JSON
        :keyword requested_start_time: The start time for the time period for which restatement is
         initiated. Only UTC time is currently supported. Required.
        :paramtype requested_start_time: ~datetime.datetime
        :keyword requested_end_time: The end time for the time period for which restatement is
         initiated. Only UTC time is currently supported. Required.
        :paramtype requested_end_time: ~datetime.datetime
        :keyword rerun_concurrency: The max number of parallel time windows (ready for execution) for
         which a rerun is triggered. Required.
        :paramtype rerun_concurrency: int
        """
        super().__init__(
            additional_properties=additional_properties, description=description, annotations=annotations, **kwargs
        )
        self.type: str = "RerunTumblingWindowTrigger"
        self.parent_trigger = parent_trigger
        self.requested_start_time = requested_start_time
        self.requested_end_time = requested_end_time
        self.rerun_concurrency = rerun_concurrency


class RerunTumblingWindowTriggerActionParameters(_serialization.Model):
    """Rerun tumbling window trigger Parameters.

    All required parameters must be populated in order to send to Azure.

    :ivar start_time: The start time for the time period for which restatement is initiated. Only
     UTC time is currently supported. Required.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time for the time period for which restatement is initiated. Only UTC
     time is currently supported. Required.
    :vartype end_time: ~datetime.datetime
    :ivar max_concurrency: The max number of parallel time windows (ready for execution) for which
     a rerun is triggered. Required.
    :vartype max_concurrency: int
    """

    _validation = {
        "start_time": {"required": True},
        "end_time": {"required": True},
        "max_concurrency": {"required": True, "maximum": 50, "minimum": 1},
    }

    _attribute_map = {
        "start_time": {"key": "startTime", "type": "iso-8601"},
        "end_time": {"key": "endTime", "type": "iso-8601"},
        "max_concurrency": {"key": "maxConcurrency", "type": "int"},
    }

    def __init__(
        self, *, start_time: datetime.datetime, end_time: datetime.datetime, max_concurrency: int, **kwargs: Any
    ) -> None:
        """
        :keyword start_time: The start time for the time period for which restatement is initiated.
         Only UTC time is currently supported. Required.
        :paramtype start_time: ~datetime.datetime
        :keyword end_time: The end time for the time period for which restatement is initiated. Only
         UTC time is currently supported. Required.
        :paramtype end_time: ~datetime.datetime
        :keyword max_concurrency: The max number of parallel time windows (ready for execution) for
         which a rerun is triggered. Required.
        :paramtype max_concurrency: int
        """
        super().__init__(**kwargs)
        self.start_time = start_time
        self.end_time = end_time
        self.max_concurrency = max_concurrency


class ResponsysLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Responsys linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the Responsys server. Required.
    :vartype endpoint: JSON
    :ivar client_id: The client ID associated with the Responsys application. Type: string (or
     Expression with resultType string). Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with the Responsys application. Type: string
     (or Expression with resultType string).
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
     boolean).
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the Responsys server. Required.
        :paramtype endpoint: JSON
        :keyword client_id: The client ID associated with the Responsys application. Type: string (or
         Expression with resultType string). Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with the Responsys application. Type:
         string (or Expression with resultType string).
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
         boolean).
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Responsys"
        self.endpoint = endpoint
        self.client_id = client_id
        self.client_secret = client_secret
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class ResponsysObjectDataset(Dataset):
    """Responsys dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ResponsysObject"
        self.table_name = table_name


class ResponsysSource(TabularSource):
    """A copy activity Responsys source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ResponsysSource"
        self.query = query


class RestResourceDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """A Rest service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar relative_url: The relative URL to the resource that the RESTful API provides. Type:
     string (or Expression with resultType string).
    :vartype relative_url: JSON
    :ivar request_method: The HTTP method used to call the RESTful API. The default is GET. Type:
     string (or Expression with resultType string).
    :vartype request_method: JSON
    :ivar request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
     string (or Expression with resultType string).
    :vartype request_body: JSON
    :ivar additional_headers: The additional HTTP headers in the request to the RESTful API. Type:
     string (or Expression with resultType string).
    :vartype additional_headers: JSON
    :ivar pagination_rules: The pagination rules to compose next page requests. Type: string (or
     Expression with resultType string).
    :vartype pagination_rules: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "relative_url": {"key": "typeProperties.relativeUrl", "type": "object"},
        "request_method": {"key": "typeProperties.requestMethod", "type": "object"},
        "request_body": {"key": "typeProperties.requestBody", "type": "object"},
        "additional_headers": {"key": "typeProperties.additionalHeaders", "type": "object"},
        "pagination_rules": {"key": "typeProperties.paginationRules", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        relative_url: Optional[JSON] = None,
        request_method: Optional[JSON] = None,
        request_body: Optional[JSON] = None,
        additional_headers: Optional[JSON] = None,
        pagination_rules: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword relative_url: The relative URL to the resource that the RESTful API provides. Type:
         string (or Expression with resultType string).
        :paramtype relative_url: JSON
        :keyword request_method: The HTTP method used to call the RESTful API. The default is GET.
         Type: string (or Expression with resultType string).
        :paramtype request_method: JSON
        :keyword request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
         string (or Expression with resultType string).
        :paramtype request_body: JSON
        :keyword additional_headers: The additional HTTP headers in the request to the RESTful API.
         Type: string (or Expression with resultType string).
        :paramtype additional_headers: JSON
        :keyword pagination_rules: The pagination rules to compose next page requests. Type: string (or
         Expression with resultType string).
        :paramtype pagination_rules: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "RestResource"
        self.relative_url = relative_url
        self.request_method = request_method
        self.request_body = request_body
        self.additional_headers = additional_headers
        self.pagination_rules = pagination_rules


class RestServiceLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Rest Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The base URL of the REST service. Required.
    :vartype url: JSON
    :ivar enable_server_certificate_validation: Whether to validate server side SSL certificate
     when connecting to the endpoint.The default value is true. Type: boolean (or Expression with
     resultType boolean).
    :vartype enable_server_certificate_validation: JSON
    :ivar authentication_type: Type of authentication used to connect to the REST service.
     Required. Known values are: "Anonymous", "Basic", "AadServicePrincipal",
     "ManagedServiceIdentity", and "OAuth2ClientCredential".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.RestServiceAuthenticationType
    :ivar user_name: The user name used in Basic authentication type.
    :vartype user_name: JSON
    :ivar password: The password used in Basic authentication type.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar auth_headers: The additional HTTP headers in the request to RESTful API used for
     authorization. Type: object (or Expression with resultType object).
    :vartype auth_headers: JSON
    :ivar service_principal_id: The application's client ID used in AadServicePrincipal
     authentication type.
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The application's key used in AadServicePrincipal authentication
     type.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The tenant information (domain name or tenant ID) used in AadServicePrincipal
     authentication type under which your application resides.
    :vartype tenant: JSON
    :ivar azure_cloud_type: Indicates the azure cloud type of the service principle auth. Allowed
     values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is the data
     factory regions’ cloud type. Type: string (or Expression with resultType string).
    :vartype azure_cloud_type: JSON
    :ivar aad_resource_id: The resource you are requesting authorization to use.
    :vartype aad_resource_id: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    :ivar client_id: The client ID associated with your application. Type: string (or Expression
     with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with your application.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar token_endpoint: The token endpoint of the authorization server to acquire access token.
     Type: string (or Expression with resultType string).
    :vartype token_endpoint: JSON
    :ivar resource: The target service or resource to which the access will be requested. Type:
     string (or Expression with resultType string).
    :vartype resource: JSON
    :ivar scope: The scope of the access required. It describes what kind of access will be
     requested. Type: string (or Expression with resultType string).
    :vartype scope: JSON
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_embedded_cert: Specify the base64 encoded certificate of your
     application registered in Azure Active Directory. Type: string (or Expression with resultType
     string).
    :vartype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert_password: Specify the password of your certificate if
     your certificate has a password and you are using AadServicePrincipal authentication. Type:
     string (or Expression with resultType string).
    :vartype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "auth_headers": {"key": "typeProperties.authHeaders", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "azure_cloud_type": {"key": "typeProperties.azureCloudType", "type": "object"},
        "aad_resource_id": {"key": "typeProperties.aadResourceId", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "token_endpoint": {"key": "typeProperties.tokenEndpoint", "type": "object"},
        "resource": {"key": "typeProperties.resource", "type": "object"},
        "scope": {"key": "typeProperties.scope", "type": "object"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_embedded_cert": {"key": "typeProperties.servicePrincipalEmbeddedCert", "type": "SecretBase"},
        "service_principal_embedded_cert_password": {
            "key": "typeProperties.servicePrincipalEmbeddedCertPassword",
            "type": "SecretBase",
        },
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        url: JSON,
        authentication_type: Union[str, "_models.RestServiceAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        auth_headers: Optional[JSON] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        azure_cloud_type: Optional[JSON] = None,
        aad_resource_id: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        token_endpoint: Optional[JSON] = None,
        resource: Optional[JSON] = None,
        scope: Optional[JSON] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_embedded_cert: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert_password: Optional["_models.SecretBase"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The base URL of the REST service. Required.
        :paramtype url: JSON
        :keyword enable_server_certificate_validation: Whether to validate server side SSL certificate
         when connecting to the endpoint.The default value is true. Type: boolean (or Expression with
         resultType boolean).
        :paramtype enable_server_certificate_validation: JSON
        :keyword authentication_type: Type of authentication used to connect to the REST service.
         Required. Known values are: "Anonymous", "Basic", "AadServicePrincipal",
         "ManagedServiceIdentity", and "OAuth2ClientCredential".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.RestServiceAuthenticationType
        :keyword user_name: The user name used in Basic authentication type.
        :paramtype user_name: JSON
        :keyword password: The password used in Basic authentication type.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword auth_headers: The additional HTTP headers in the request to RESTful API used for
         authorization. Type: object (or Expression with resultType object).
        :paramtype auth_headers: JSON
        :keyword service_principal_id: The application's client ID used in AadServicePrincipal
         authentication type.
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The application's key used in AadServicePrincipal
         authentication type.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The tenant information (domain name or tenant ID) used in AadServicePrincipal
         authentication type under which your application resides.
        :paramtype tenant: JSON
        :keyword azure_cloud_type: Indicates the azure cloud type of the service principle auth.
         Allowed values are AzurePublic, AzureChina, AzureUsGovernment, AzureGermany. Default value is
         the data factory regions’ cloud type. Type: string (or Expression with resultType string).
        :paramtype azure_cloud_type: JSON
        :keyword aad_resource_id: The resource you are requesting authorization to use.
        :paramtype aad_resource_id: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        :keyword client_id: The client ID associated with your application. Type: string (or Expression
         with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with your application.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword token_endpoint: The token endpoint of the authorization server to acquire access
         token. Type: string (or Expression with resultType string).
        :paramtype token_endpoint: JSON
        :keyword resource: The target service or resource to which the access will be requested. Type:
         string (or Expression with resultType string).
        :paramtype resource: JSON
        :keyword scope: The scope of the access required. It describes what kind of access will be
         requested. Type: string (or Expression with resultType string).
        :paramtype scope: JSON
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_embedded_cert: Specify the base64 encoded certificate of your
         application registered in Azure Active Directory. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert_password: Specify the password of your certificate if
         your certificate has a password and you are using AadServicePrincipal authentication. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "RestService"
        self.url = url
        self.enable_server_certificate_validation = enable_server_certificate_validation
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.auth_headers = auth_headers
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.azure_cloud_type = azure_cloud_type
        self.aad_resource_id = aad_resource_id
        self.encrypted_credential = encrypted_credential
        self.credential = credential
        self.client_id = client_id
        self.client_secret = client_secret
        self.token_endpoint = token_endpoint
        self.resource = resource
        self.scope = scope
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_embedded_cert = service_principal_embedded_cert
        self.service_principal_embedded_cert_password = service_principal_embedded_cert_password


class RestSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Rest service Sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar request_method: The HTTP method used to call the RESTful API. The default is POST. Type:
     string (or Expression with resultType string).
    :vartype request_method: JSON
    :ivar additional_headers: The additional HTTP headers in the request to the RESTful API. Type:
     string (or Expression with resultType string).
    :vartype additional_headers: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:01:40. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    :ivar request_interval: The time to await before sending next request, in milliseconds.
    :vartype request_interval: JSON
    :ivar http_compression_type: Http Compression Type to Send data in compressed format with
     Optimal Compression Level, Default is None. And The Only Supported option is Gzip.
    :vartype http_compression_type: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "request_method": {"key": "requestMethod", "type": "object"},
        "additional_headers": {"key": "additionalHeaders", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
        "request_interval": {"key": "requestInterval", "type": "object"},
        "http_compression_type": {"key": "httpCompressionType", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        request_method: Optional[JSON] = None,
        additional_headers: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        request_interval: Optional[JSON] = None,
        http_compression_type: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword request_method: The HTTP method used to call the RESTful API. The default is POST.
         Type: string (or Expression with resultType string).
        :paramtype request_method: JSON
        :keyword additional_headers: The additional HTTP headers in the request to the RESTful API.
         Type: string (or Expression with resultType string).
        :paramtype additional_headers: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:01:40.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        :keyword request_interval: The time to await before sending next request, in milliseconds.
        :paramtype request_interval: JSON
        :keyword http_compression_type: Http Compression Type to Send data in compressed format with
         Optimal Compression Level, Default is None. And The Only Supported option is Gzip.
        :paramtype http_compression_type: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "RestSink"
        self.request_method = request_method
        self.additional_headers = additional_headers
        self.http_request_timeout = http_request_timeout
        self.request_interval = request_interval
        self.http_compression_type = http_compression_type


class RestSource(CopySource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Rest service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar request_method: The HTTP method used to call the RESTful API. The default is GET. Type:
     string (or Expression with resultType string).
    :vartype request_method: JSON
    :ivar request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
     string (or Expression with resultType string).
    :vartype request_body: JSON
    :ivar additional_headers: The additional HTTP headers in the request to the RESTful API. Type:
     string (or Expression with resultType string).
    :vartype additional_headers: JSON
    :ivar pagination_rules: The pagination rules to compose next page requests. Type: string (or
     Expression with resultType string).
    :vartype pagination_rules: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:01:40. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    :ivar request_interval: The time to await before sending next page request.
    :vartype request_interval: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "request_method": {"key": "requestMethod", "type": "object"},
        "request_body": {"key": "requestBody", "type": "object"},
        "additional_headers": {"key": "additionalHeaders", "type": "object"},
        "pagination_rules": {"key": "paginationRules", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
        "request_interval": {"key": "requestInterval", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        request_method: Optional[JSON] = None,
        request_body: Optional[JSON] = None,
        additional_headers: Optional[JSON] = None,
        pagination_rules: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        request_interval: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword request_method: The HTTP method used to call the RESTful API. The default is GET.
         Type: string (or Expression with resultType string).
        :paramtype request_method: JSON
        :keyword request_body: The HTTP request body to the RESTful API if requestMethod is POST. Type:
         string (or Expression with resultType string).
        :paramtype request_body: JSON
        :keyword additional_headers: The additional HTTP headers in the request to the RESTful API.
         Type: string (or Expression with resultType string).
        :paramtype additional_headers: JSON
        :keyword pagination_rules: The pagination rules to compose next page requests. Type: string (or
         Expression with resultType string).
        :paramtype pagination_rules: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:01:40.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        :keyword request_interval: The time to await before sending next page request.
        :paramtype request_interval: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "RestSource"
        self.request_method = request_method
        self.request_body = request_body
        self.additional_headers = additional_headers
        self.pagination_rules = pagination_rules
        self.http_request_timeout = http_request_timeout
        self.request_interval = request_interval
        self.additional_columns = additional_columns


class RetryPolicy(_serialization.Model):
    """Execution policy for an activity.

    :ivar count: Maximum ordinary retry attempts. Default is 0. Type: integer (or Expression with
     resultType integer), minimum: 0.
    :vartype count: JSON
    :ivar interval_in_seconds: Interval between retries in seconds. Default is 30.
    :vartype interval_in_seconds: int
    """

    _validation = {
        "interval_in_seconds": {"maximum": 86400, "minimum": 30},
    }

    _attribute_map = {
        "count": {"key": "count", "type": "object"},
        "interval_in_seconds": {"key": "intervalInSeconds", "type": "int"},
    }

    def __init__(
        self, *, count: Optional[JSON] = None, interval_in_seconds: Optional[int] = None, **kwargs: Any
    ) -> None:
        """
        :keyword count: Maximum ordinary retry attempts. Default is 0. Type: integer (or Expression
         with resultType integer), minimum: 0.
        :paramtype count: JSON
        :keyword interval_in_seconds: Interval between retries in seconds. Default is 30.
        :paramtype interval_in_seconds: int
        """
        super().__init__(**kwargs)
        self.count = count
        self.interval_in_seconds = interval_in_seconds


class RunFilterParameters(_serialization.Model):
    """Query parameters for listing runs.

    All required parameters must be populated in order to send to Azure.

    :ivar continuation_token: The continuation token for getting the next page of results. Null for
     first page.
    :vartype continuation_token: str
    :ivar last_updated_after: The time at or after which the run event was updated in 'ISO 8601'
     format. Required.
    :vartype last_updated_after: ~datetime.datetime
    :ivar last_updated_before: The time at or before which the run event was updated in 'ISO 8601'
     format. Required.
    :vartype last_updated_before: ~datetime.datetime
    :ivar filters: List of filters.
    :vartype filters: list[~azure.synapse.artifacts.models.RunQueryFilter]
    :ivar order_by: List of OrderBy option.
    :vartype order_by: list[~azure.synapse.artifacts.models.RunQueryOrderBy]
    """

    _validation = {
        "last_updated_after": {"required": True},
        "last_updated_before": {"required": True},
    }

    _attribute_map = {
        "continuation_token": {"key": "continuationToken", "type": "str"},
        "last_updated_after": {"key": "lastUpdatedAfter", "type": "iso-8601"},
        "last_updated_before": {"key": "lastUpdatedBefore", "type": "iso-8601"},
        "filters": {"key": "filters", "type": "[RunQueryFilter]"},
        "order_by": {"key": "orderBy", "type": "[RunQueryOrderBy]"},
    }

    def __init__(
        self,
        *,
        last_updated_after: datetime.datetime,
        last_updated_before: datetime.datetime,
        continuation_token: Optional[str] = None,
        filters: Optional[List["_models.RunQueryFilter"]] = None,
        order_by: Optional[List["_models.RunQueryOrderBy"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword continuation_token: The continuation token for getting the next page of results. Null
         for first page.
        :paramtype continuation_token: str
        :keyword last_updated_after: The time at or after which the run event was updated in 'ISO 8601'
         format. Required.
        :paramtype last_updated_after: ~datetime.datetime
        :keyword last_updated_before: The time at or before which the run event was updated in 'ISO
         8601' format. Required.
        :paramtype last_updated_before: ~datetime.datetime
        :keyword filters: List of filters.
        :paramtype filters: list[~azure.synapse.artifacts.models.RunQueryFilter]
        :keyword order_by: List of OrderBy option.
        :paramtype order_by: list[~azure.synapse.artifacts.models.RunQueryOrderBy]
        """
        super().__init__(**kwargs)
        self.continuation_token = continuation_token
        self.last_updated_after = last_updated_after
        self.last_updated_before = last_updated_before
        self.filters = filters
        self.order_by = order_by


class RunNotebookError(_serialization.Model):
    """Run notebook error.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar ename: Error name.
    :vartype ename: str
    :ivar evalue: Error message.
    :vartype evalue: str
    :ivar traceback: Error trace.
    :vartype traceback: list[str]
    """

    _validation = {
        "ename": {"readonly": True},
        "evalue": {"readonly": True},
    }

    _attribute_map = {
        "ename": {"key": "ename", "type": "str"},
        "evalue": {"key": "evalue", "type": "str"},
        "traceback": {"key": "traceback", "type": "[str]"},
    }

    def __init__(self, *, traceback: Optional[List[str]] = None, **kwargs: Any) -> None:
        """
        :keyword traceback: Error trace.
        :paramtype traceback: list[str]
        """
        super().__init__(**kwargs)
        self.ename = None
        self.evalue = None
        self.traceback = traceback


class RunNotebookParameter(_serialization.Model):
    """Run notebook parameter.

    :ivar type: Parameter type.
    :vartype type: str
    :ivar value: Parameter value.
    :vartype value: JSON
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "value": {"key": "value", "type": "object"},
    }

    def __init__(self, *, type: Optional[str] = None, value: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword type: Parameter type.
        :paramtype type: str
        :keyword value: Parameter value.
        :paramtype value: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.value = value


class RunNotebookRequest(_serialization.Model):
    """Run notebook request.

    :ivar notebook: Notebook name.
    :vartype notebook: str
    :ivar spark_pool: SparkPool name.
    :vartype spark_pool: str
    :ivar session_options: Session properties.
    :vartype session_options: ~azure.synapse.artifacts.models.RunNotebookSparkSessionOptions
    :ivar honor_session_time_to_live: Whether session should run till time to live after run
     completes.
    :vartype honor_session_time_to_live: bool
    :ivar parameters: Run notebook parameters.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.RunNotebookParameter]
    """

    _attribute_map = {
        "notebook": {"key": "notebook", "type": "str"},
        "spark_pool": {"key": "sparkPool", "type": "str"},
        "session_options": {"key": "sessionOptions", "type": "RunNotebookSparkSessionOptions"},
        "honor_session_time_to_live": {"key": "honorSessionTimeToLive", "type": "bool"},
        "parameters": {"key": "parameters", "type": "{RunNotebookParameter}"},
    }

    def __init__(
        self,
        *,
        notebook: Optional[str] = None,
        spark_pool: Optional[str] = None,
        session_options: Optional["_models.RunNotebookSparkSessionOptions"] = None,
        honor_session_time_to_live: Optional[bool] = None,
        parameters: Optional[Dict[str, "_models.RunNotebookParameter"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword notebook: Notebook name.
        :paramtype notebook: str
        :keyword spark_pool: SparkPool name.
        :paramtype spark_pool: str
        :keyword session_options: Session properties.
        :paramtype session_options: ~azure.synapse.artifacts.models.RunNotebookSparkSessionOptions
        :keyword honor_session_time_to_live: Whether session should run till time to live after run
         completes.
        :paramtype honor_session_time_to_live: bool
        :keyword parameters: Run notebook parameters.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.RunNotebookParameter]
        """
        super().__init__(**kwargs)
        self.notebook = notebook
        self.spark_pool = spark_pool
        self.session_options = session_options
        self.honor_session_time_to_live = honor_session_time_to_live
        self.parameters = parameters


class RunNotebookResponse(_serialization.Model):
    """Run notebook response.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar message: Response message.
    :vartype message: str
    :ivar result: Result of run notebook.
    :vartype result: ~azure.synapse.artifacts.models.RunNotebookResult
    """

    _validation = {
        "message": {"readonly": True},
    }

    _attribute_map = {
        "message": {"key": "message", "type": "str"},
        "result": {"key": "result", "type": "RunNotebookResult"},
    }

    def __init__(self, *, result: Optional["_models.RunNotebookResult"] = None, **kwargs: Any) -> None:
        """
        :keyword result: Result of run notebook.
        :paramtype result: ~azure.synapse.artifacts.models.RunNotebookResult
        """
        super().__init__(**kwargs)
        self.message = None
        self.result = result


class RunNotebookResult(_serialization.Model):
    """Result of run notebook.

    :ivar run_id: Run id.
    :vartype run_id: str
    :ivar run_status: Status of the run notebook.
    :vartype run_status: str
    :ivar last_checked_on: Timestamp of last update.
    :vartype last_checked_on: str
    :ivar session_id: Livy session id.
    :vartype session_id: str
    :ivar spark_pool: SparkPool name.
    :vartype spark_pool: str
    :ivar session_detail: Run notebook session details.
    :vartype session_detail: JSON
    :ivar exit_value: Output of exit command.
    :vartype exit_value: str
    :ivar error: Run notebook error.
    :vartype error: ~azure.synapse.artifacts.models.RunNotebookError
    """

    _attribute_map = {
        "run_id": {"key": "runId", "type": "str"},
        "run_status": {"key": "runStatus", "type": "str"},
        "last_checked_on": {"key": "lastCheckedOn", "type": "str"},
        "session_id": {"key": "sessionId", "type": "str"},
        "spark_pool": {"key": "sparkPool", "type": "str"},
        "session_detail": {"key": "sessionDetail", "type": "object"},
        "exit_value": {"key": "exitValue", "type": "str"},
        "error": {"key": "error", "type": "RunNotebookError"},
    }

    def __init__(
        self,
        *,
        run_id: Optional[str] = None,
        run_status: Optional[str] = None,
        last_checked_on: Optional[str] = None,
        session_id: Optional[str] = None,
        spark_pool: Optional[str] = None,
        session_detail: Optional[JSON] = None,
        exit_value: Optional[str] = None,
        error: Optional["_models.RunNotebookError"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword run_id: Run id.
        :paramtype run_id: str
        :keyword run_status: Status of the run notebook.
        :paramtype run_status: str
        :keyword last_checked_on: Timestamp of last update.
        :paramtype last_checked_on: str
        :keyword session_id: Livy session id.
        :paramtype session_id: str
        :keyword spark_pool: SparkPool name.
        :paramtype spark_pool: str
        :keyword session_detail: Run notebook session details.
        :paramtype session_detail: JSON
        :keyword exit_value: Output of exit command.
        :paramtype exit_value: str
        :keyword error: Run notebook error.
        :paramtype error: ~azure.synapse.artifacts.models.RunNotebookError
        """
        super().__init__(**kwargs)
        self.run_id = run_id
        self.run_status = run_status
        self.last_checked_on = last_checked_on
        self.session_id = session_id
        self.spark_pool = spark_pool
        self.session_detail = session_detail
        self.exit_value = exit_value
        self.error = error


class RunNotebookSnapshot(_serialization.Model):
    """Run notebook snapshot.

    All required parameters must be populated in order to send to Azure.

    :ivar exit_value: Output of exit command.
    :vartype exit_value: str
    :ivar id: Run notebook runId. Required.
    :vartype id: str
    :ivar notebook: Notebook name. Required.
    :vartype notebook: str
    :ivar session_options: Session properties.
    :vartype session_options: ~azure.synapse.artifacts.models.RunNotebookSparkSessionOptions
    :ivar honor_session_time_to_live: Whether session should run till time to live after run
     completes.
    :vartype honor_session_time_to_live: bool
    :ivar session_id: Livy session id.
    :vartype session_id: str
    :ivar spark_pool: SparkPool name.
    :vartype spark_pool: str
    :ivar parameters: Run notebook parameters.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.RunNotebookParameter]
    :ivar notebook_content: Notebook resource type.
    :vartype notebook_content: ~azure.synapse.artifacts.models.NotebookResource
    """

    _validation = {
        "id": {"required": True},
        "notebook": {"required": True},
    }

    _attribute_map = {
        "exit_value": {"key": "exitValue", "type": "str"},
        "id": {"key": "id", "type": "str"},
        "notebook": {"key": "notebook", "type": "str"},
        "session_options": {"key": "sessionOptions", "type": "RunNotebookSparkSessionOptions"},
        "honor_session_time_to_live": {"key": "honorSessionTimeToLive", "type": "bool"},
        "session_id": {"key": "sessionId", "type": "str"},
        "spark_pool": {"key": "sparkPool", "type": "str"},
        "parameters": {"key": "parameters", "type": "{RunNotebookParameter}"},
        "notebook_content": {"key": "notebookContent", "type": "NotebookResource"},
    }

    def __init__(
        self,
        *,
        id: str,  # pylint: disable=redefined-builtin
        notebook: str,
        exit_value: Optional[str] = None,
        session_options: Optional["_models.RunNotebookSparkSessionOptions"] = None,
        honor_session_time_to_live: Optional[bool] = None,
        session_id: Optional[str] = None,
        spark_pool: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.RunNotebookParameter"]] = None,
        notebook_content: Optional["_models.NotebookResource"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword exit_value: Output of exit command.
        :paramtype exit_value: str
        :keyword id: Run notebook runId. Required.
        :paramtype id: str
        :keyword notebook: Notebook name. Required.
        :paramtype notebook: str
        :keyword session_options: Session properties.
        :paramtype session_options: ~azure.synapse.artifacts.models.RunNotebookSparkSessionOptions
        :keyword honor_session_time_to_live: Whether session should run till time to live after run
         completes.
        :paramtype honor_session_time_to_live: bool
        :keyword session_id: Livy session id.
        :paramtype session_id: str
        :keyword spark_pool: SparkPool name.
        :paramtype spark_pool: str
        :keyword parameters: Run notebook parameters.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.RunNotebookParameter]
        :keyword notebook_content: Notebook resource type.
        :paramtype notebook_content: ~azure.synapse.artifacts.models.NotebookResource
        """
        super().__init__(**kwargs)
        self.exit_value = exit_value
        self.id = id
        self.notebook = notebook
        self.session_options = session_options
        self.honor_session_time_to_live = honor_session_time_to_live
        self.session_id = session_id
        self.spark_pool = spark_pool
        self.parameters = parameters
        self.notebook_content = notebook_content


class RunNotebookSnapshotResponse(_serialization.Model):
    """Run notebook snapshot response.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar message: Response message.
    :vartype message: str
    :ivar result: Run notebook snapshot result.
    :vartype result: ~azure.synapse.artifacts.models.RunNotebookSnapshotResult
    """

    _validation = {
        "message": {"readonly": True},
    }

    _attribute_map = {
        "message": {"key": "message", "type": "str"},
        "result": {"key": "result", "type": "RunNotebookSnapshotResult"},
    }

    def __init__(self, *, result: Optional["_models.RunNotebookSnapshotResult"] = None, **kwargs: Any) -> None:
        """
        :keyword result: Run notebook snapshot result.
        :paramtype result: ~azure.synapse.artifacts.models.RunNotebookSnapshotResult
        """
        super().__init__(**kwargs)
        self.message = None
        self.result = result


class RunNotebookSnapshotResult(_serialization.Model):
    """Run notebook snapshot result.

    All required parameters must be populated in order to send to Azure.

    :ivar snapshot: Run notebook snapshot. Required.
    :vartype snapshot: ~azure.synapse.artifacts.models.RunNotebookSnapshot
    :ivar error: Run notebook error.
    :vartype error: ~azure.synapse.artifacts.models.RunNotebookError
    :ivar run_id: Run id. Required.
    :vartype run_id: str
    :ivar run_status: Status of the run notebook. Required.
    :vartype run_status: str
    :ivar last_checked_on: Timestamp of last update.
    :vartype last_checked_on: str
    :ivar session_id: Livy session id.
    :vartype session_id: str
    :ivar spark_pool: SparkPool name.
    :vartype spark_pool: str
    """

    _validation = {
        "snapshot": {"required": True},
        "run_id": {"required": True},
        "run_status": {"required": True},
    }

    _attribute_map = {
        "snapshot": {"key": "snapshot", "type": "RunNotebookSnapshot"},
        "error": {"key": "error", "type": "RunNotebookError"},
        "run_id": {"key": "runId", "type": "str"},
        "run_status": {"key": "runStatus", "type": "str"},
        "last_checked_on": {"key": "lastCheckedOn", "type": "str"},
        "session_id": {"key": "sessionId", "type": "str"},
        "spark_pool": {"key": "sparkPool", "type": "str"},
    }

    def __init__(
        self,
        *,
        snapshot: "_models.RunNotebookSnapshot",
        run_id: str,
        run_status: str,
        error: Optional["_models.RunNotebookError"] = None,
        last_checked_on: Optional[str] = None,
        session_id: Optional[str] = None,
        spark_pool: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword snapshot: Run notebook snapshot. Required.
        :paramtype snapshot: ~azure.synapse.artifacts.models.RunNotebookSnapshot
        :keyword error: Run notebook error.
        :paramtype error: ~azure.synapse.artifacts.models.RunNotebookError
        :keyword run_id: Run id. Required.
        :paramtype run_id: str
        :keyword run_status: Status of the run notebook. Required.
        :paramtype run_status: str
        :keyword last_checked_on: Timestamp of last update.
        :paramtype last_checked_on: str
        :keyword session_id: Livy session id.
        :paramtype session_id: str
        :keyword spark_pool: SparkPool name.
        :paramtype spark_pool: str
        """
        super().__init__(**kwargs)
        self.snapshot = snapshot
        self.error = error
        self.run_id = run_id
        self.run_status = run_status
        self.last_checked_on = last_checked_on
        self.session_id = session_id
        self.spark_pool = spark_pool


class RunNotebookSparkSessionOptions(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """RunNotebookSparkSessionOptions.

    :ivar tags: Dictionary of :code:`<string>`.
    :vartype tags: dict[str, str]
    :ivar kind: The session kind.
    :vartype kind: str
    :ivar proxy_user: User to impersonate when starting the session.
    :vartype proxy_user: str
    :ivar name: The name of this session.
    :vartype name: str
    :ivar jars: jars to be used in this session.
    :vartype jars: list[str]
    :ivar python_files: Python files to be used in this session.
    :vartype python_files: list[str]
    :ivar files: files to be used in this session.
    :vartype files: list[str]
    :ivar archives: Archives to be used in this session.
    :vartype archives: list[str]
    :ivar queue: The name of the YARN queue to which submitted.
    :vartype queue: JSON
    :ivar configuration: Spark configuration properties.
    :vartype configuration: dict[str, str]
    :ivar driver_memory: Amount of memory to use for the driver process.
    :vartype driver_memory: str
    :ivar driver_cores: Number of cores to use for the driver process.
    :vartype driver_cores: int
    :ivar executor_memory: Amount of memory to use per executor process.
    :vartype executor_memory: str
    :ivar executor_cores: Number of cores to use for each executor.
    :vartype executor_cores: int
    :ivar executor_count: Number of executors to launch for this session.
    :vartype executor_count: int
    :ivar is_queueable: Whether to queue session creation if Spark pool doesn't have enough
     capacity. Default value is true in notebook runs API.
    :vartype is_queueable: bool
    :ivar heartbeat_timeout_in_second: Timeout in second to which session be orphaned.
    :vartype heartbeat_timeout_in_second: int
    """

    _attribute_map = {
        "tags": {"key": "tags", "type": "{str}"},
        "kind": {"key": "kind", "type": "str"},
        "proxy_user": {"key": "proxyUser", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "jars": {"key": "jars", "type": "[str]"},
        "python_files": {"key": "pyFiles", "type": "[str]"},
        "files": {"key": "files", "type": "[str]"},
        "archives": {"key": "archives", "type": "[str]"},
        "queue": {"key": "queue", "type": "object"},
        "configuration": {"key": "conf", "type": "{str}"},
        "driver_memory": {"key": "driverMemory", "type": "str"},
        "driver_cores": {"key": "driverCores", "type": "int"},
        "executor_memory": {"key": "executorMemory", "type": "str"},
        "executor_cores": {"key": "executorCores", "type": "int"},
        "executor_count": {"key": "numExecutors", "type": "int"},
        "is_queueable": {"key": "isQueueable", "type": "bool"},
        "heartbeat_timeout_in_second": {"key": "heartbeatTimeoutInSecond", "type": "int"},
    }

    def __init__(
        self,
        *,
        tags: Optional[Dict[str, str]] = None,
        kind: Optional[str] = None,
        proxy_user: Optional[str] = None,
        name: Optional[str] = None,
        jars: Optional[List[str]] = None,
        python_files: Optional[List[str]] = None,
        files: Optional[List[str]] = None,
        archives: Optional[List[str]] = None,
        queue: Optional[JSON] = None,
        configuration: Optional[Dict[str, str]] = None,
        driver_memory: Optional[str] = None,
        driver_cores: Optional[int] = None,
        executor_memory: Optional[str] = None,
        executor_cores: Optional[int] = None,
        executor_count: Optional[int] = None,
        is_queueable: Optional[bool] = None,
        heartbeat_timeout_in_second: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword tags: Dictionary of :code:`<string>`.
        :paramtype tags: dict[str, str]
        :keyword kind: The session kind.
        :paramtype kind: str
        :keyword proxy_user: User to impersonate when starting the session.
        :paramtype proxy_user: str
        :keyword name: The name of this session.
        :paramtype name: str
        :keyword jars: jars to be used in this session.
        :paramtype jars: list[str]
        :keyword python_files: Python files to be used in this session.
        :paramtype python_files: list[str]
        :keyword files: files to be used in this session.
        :paramtype files: list[str]
        :keyword archives: Archives to be used in this session.
        :paramtype archives: list[str]
        :keyword queue: The name of the YARN queue to which submitted.
        :paramtype queue: JSON
        :keyword configuration: Spark configuration properties.
        :paramtype configuration: dict[str, str]
        :keyword driver_memory: Amount of memory to use for the driver process.
        :paramtype driver_memory: str
        :keyword driver_cores: Number of cores to use for the driver process.
        :paramtype driver_cores: int
        :keyword executor_memory: Amount of memory to use per executor process.
        :paramtype executor_memory: str
        :keyword executor_cores: Number of cores to use for each executor.
        :paramtype executor_cores: int
        :keyword executor_count: Number of executors to launch for this session.
        :paramtype executor_count: int
        :keyword is_queueable: Whether to queue session creation if Spark pool doesn't have enough
         capacity. Default value is true in notebook runs API.
        :paramtype is_queueable: bool
        :keyword heartbeat_timeout_in_second: Timeout in second to which session be orphaned.
        :paramtype heartbeat_timeout_in_second: int
        """
        super().__init__(**kwargs)
        self.tags = tags
        self.kind = kind
        self.proxy_user = proxy_user
        self.name = name
        self.jars = jars
        self.python_files = python_files
        self.files = files
        self.archives = archives
        self.queue = queue
        self.configuration = configuration
        self.driver_memory = driver_memory
        self.driver_cores = driver_cores
        self.executor_memory = executor_memory
        self.executor_cores = executor_cores
        self.executor_count = executor_count
        self.is_queueable = is_queueable
        self.heartbeat_timeout_in_second = heartbeat_timeout_in_second


class RunQueryFilter(_serialization.Model):
    """Query filter option for listing runs.

    All required parameters must be populated in order to send to Azure.

    :ivar operand: Parameter name to be used for filter. The allowed operands to query pipeline
     runs are PipelineName, RunStart, RunEnd and Status; to query activity runs are ActivityName,
     ActivityRunStart, ActivityRunEnd, ActivityType and Status, and to query trigger runs are
     TriggerName, TriggerRunTimestamp and Status. Required. Known values are: "PipelineName",
     "Status", "RunStart", "RunEnd", "ActivityName", "ActivityRunStart", "ActivityRunEnd",
     "ActivityType", "TriggerName", "TriggerRunTimestamp", "RunGroupId", and "LatestOnly".
    :vartype operand: str or ~azure.synapse.artifacts.models.RunQueryFilterOperand
    :ivar operator: Operator to be used for filter. Required. Known values are: "Equals",
     "NotEquals", "In", "NotIn", and "In".
    :vartype operator: str or ~azure.synapse.artifacts.models.RunQueryFilterOperator
    :ivar values: List of filter values. Required.
    :vartype values: list[str]
    """

    _validation = {
        "operand": {"required": True},
        "operator": {"required": True},
        "values": {"required": True},
    }

    _attribute_map = {
        "operand": {"key": "operand", "type": "str"},
        "operator": {"key": "operator", "type": "str"},
        "values": {"key": "values", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        operand: Union[str, "_models.RunQueryFilterOperand"],
        operator: Union[str, "_models.RunQueryFilterOperator"],
        values: List[str],
        **kwargs: Any
    ) -> None:
        """
        :keyword operand: Parameter name to be used for filter. The allowed operands to query pipeline
         runs are PipelineName, RunStart, RunEnd and Status; to query activity runs are ActivityName,
         ActivityRunStart, ActivityRunEnd, ActivityType and Status, and to query trigger runs are
         TriggerName, TriggerRunTimestamp and Status. Required. Known values are: "PipelineName",
         "Status", "RunStart", "RunEnd", "ActivityName", "ActivityRunStart", "ActivityRunEnd",
         "ActivityType", "TriggerName", "TriggerRunTimestamp", "RunGroupId", and "LatestOnly".
        :paramtype operand: str or ~azure.synapse.artifacts.models.RunQueryFilterOperand
        :keyword operator: Operator to be used for filter. Required. Known values are: "Equals",
         "NotEquals", "In", "NotIn", and "In".
        :paramtype operator: str or ~azure.synapse.artifacts.models.RunQueryFilterOperator
        :keyword values: List of filter values. Required.
        :paramtype values: list[str]
        """
        super().__init__(**kwargs)
        self.operand = operand
        self.operator = operator
        self.values = values


class RunQueryOrderBy(_serialization.Model):
    """An object to provide order by options for listing runs.

    All required parameters must be populated in order to send to Azure.

    :ivar order_by: Parameter name to be used for order by. The allowed parameters to order by for
     pipeline runs are PipelineName, RunStart, RunEnd and Status; for activity runs are
     ActivityName, ActivityRunStart, ActivityRunEnd and Status; for trigger runs are TriggerName,
     TriggerRunTimestamp and Status. Required. Known values are: "RunStart", "RunEnd",
     "PipelineName", "Status", "ActivityName", "ActivityRunStart", "ActivityRunEnd", "TriggerName",
     and "TriggerRunTimestamp".
    :vartype order_by: str or ~azure.synapse.artifacts.models.RunQueryOrderByField
    :ivar order: Sorting order of the parameter. Required. Known values are: "ASC" and "DESC".
    :vartype order: str or ~azure.synapse.artifacts.models.RunQueryOrder
    """

    _validation = {
        "order_by": {"required": True},
        "order": {"required": True},
    }

    _attribute_map = {
        "order_by": {"key": "orderBy", "type": "str"},
        "order": {"key": "order", "type": "str"},
    }

    def __init__(
        self,
        *,
        order_by: Union[str, "_models.RunQueryOrderByField"],
        order: Union[str, "_models.RunQueryOrder"],
        **kwargs: Any
    ) -> None:
        """
        :keyword order_by: Parameter name to be used for order by. The allowed parameters to order by
         for pipeline runs are PipelineName, RunStart, RunEnd and Status; for activity runs are
         ActivityName, ActivityRunStart, ActivityRunEnd and Status; for trigger runs are TriggerName,
         TriggerRunTimestamp and Status. Required. Known values are: "RunStart", "RunEnd",
         "PipelineName", "Status", "ActivityName", "ActivityRunStart", "ActivityRunEnd", "TriggerName",
         and "TriggerRunTimestamp".
        :paramtype order_by: str or ~azure.synapse.artifacts.models.RunQueryOrderByField
        :keyword order: Sorting order of the parameter. Required. Known values are: "ASC" and "DESC".
        :paramtype order: str or ~azure.synapse.artifacts.models.RunQueryOrder
        """
        super().__init__(**kwargs)
        self.order_by = order_by
        self.order = order


class SalesforceLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Salesforce.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar environment_url: The URL of Salesforce instance. Default is
     'https://login.salesforce.com'. To copy data from sandbox, specify
     'https://test.salesforce.com'. To copy data from custom domain, specify, for example,
     'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
    :vartype environment_url: JSON
    :ivar username: The username for Basic authentication of the Salesforce instance. Type: string
     (or Expression with resultType string).
    :vartype username: JSON
    :ivar password: The password for Basic authentication of the Salesforce instance.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar security_token: The security token is optional to remotely access Salesforce instance.
    :vartype security_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_version: The Salesforce API version used in ADF. Type: string (or Expression with
     resultType string).
    :vartype api_version: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "environment_url": {"key": "typeProperties.environmentUrl", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "security_token": {"key": "typeProperties.securityToken", "type": "SecretBase"},
        "api_version": {"key": "typeProperties.apiVersion", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        environment_url: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        security_token: Optional["_models.SecretBase"] = None,
        api_version: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword environment_url: The URL of Salesforce instance. Default is
         'https://login.salesforce.com'. To copy data from sandbox, specify
         'https://test.salesforce.com'. To copy data from custom domain, specify, for example,
         'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
        :paramtype environment_url: JSON
        :keyword username: The username for Basic authentication of the Salesforce instance. Type:
         string (or Expression with resultType string).
        :paramtype username: JSON
        :keyword password: The password for Basic authentication of the Salesforce instance.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword security_token: The security token is optional to remotely access Salesforce instance.
        :paramtype security_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_version: The Salesforce API version used in ADF. Type: string (or Expression with
         resultType string).
        :paramtype api_version: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Salesforce"
        self.environment_url = environment_url
        self.username = username
        self.password = password
        self.security_token = security_token
        self.api_version = api_version
        self.encrypted_credential = encrypted_credential


class SalesforceMarketingCloudLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Salesforce Marketing Cloud linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to Salesforce Marketing Cloud. It is
     mutually exclusive with any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar client_id: The client ID associated with the Salesforce Marketing Cloud application.
     Type: string (or Expression with resultType string). Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with the Salesforce Marketing Cloud
     application. Type: string (or Expression with resultType string).
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
     boolean).
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to Salesforce Marketing Cloud. It is
         mutually exclusive with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword client_id: The client ID associated with the Salesforce Marketing Cloud application.
         Type: string (or Expression with resultType string). Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with the Salesforce Marketing Cloud
         application. Type: string (or Expression with resultType string).
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true. Type: boolean (or Expression with resultType
         boolean).
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SalesforceMarketingCloud"
        self.connection_properties = connection_properties
        self.client_id = client_id
        self.client_secret = client_secret
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class SalesforceMarketingCloudObjectDataset(Dataset):
    """Salesforce Marketing Cloud dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SalesforceMarketingCloudObject"
        self.table_name = table_name


class SalesforceMarketingCloudSource(TabularSource):
    """A copy activity Salesforce Marketing Cloud source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SalesforceMarketingCloudSource"
        self.query = query


class SalesforceObjectDataset(Dataset):
    """The Salesforce object dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar object_api_name: The Salesforce object API name. Type: string (or Expression with
     resultType string).
    :vartype object_api_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "object_api_name": {"key": "typeProperties.objectApiName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        object_api_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword object_api_name: The Salesforce object API name. Type: string (or Expression with
         resultType string).
        :paramtype object_api_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SalesforceObject"
        self.object_api_name = object_api_name


class SalesforceServiceCloudLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Salesforce Service Cloud.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar environment_url: The URL of Salesforce Service Cloud instance. Default is
     'https://login.salesforce.com'. To copy data from sandbox, specify
     'https://test.salesforce.com'. To copy data from custom domain, specify, for example,
     'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
    :vartype environment_url: JSON
    :ivar username: The username for Basic authentication of the Salesforce instance. Type: string
     (or Expression with resultType string).
    :vartype username: JSON
    :ivar password: The password for Basic authentication of the Salesforce instance.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar security_token: The security token is optional to remotely access Salesforce instance.
    :vartype security_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_version: The Salesforce API version used in ADF. Type: string (or Expression with
     resultType string).
    :vartype api_version: JSON
    :ivar extended_properties: Extended properties appended to the connection string. Type: string
     (or Expression with resultType string).
    :vartype extended_properties: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "environment_url": {"key": "typeProperties.environmentUrl", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "security_token": {"key": "typeProperties.securityToken", "type": "SecretBase"},
        "api_version": {"key": "typeProperties.apiVersion", "type": "object"},
        "extended_properties": {"key": "typeProperties.extendedProperties", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        environment_url: Optional[JSON] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        security_token: Optional["_models.SecretBase"] = None,
        api_version: Optional[JSON] = None,
        extended_properties: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword environment_url: The URL of Salesforce Service Cloud instance. Default is
         'https://login.salesforce.com'. To copy data from sandbox, specify
         'https://test.salesforce.com'. To copy data from custom domain, specify, for example,
         'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
        :paramtype environment_url: JSON
        :keyword username: The username for Basic authentication of the Salesforce instance. Type:
         string (or Expression with resultType string).
        :paramtype username: JSON
        :keyword password: The password for Basic authentication of the Salesforce instance.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword security_token: The security token is optional to remotely access Salesforce instance.
        :paramtype security_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_version: The Salesforce API version used in ADF. Type: string (or Expression with
         resultType string).
        :paramtype api_version: JSON
        :keyword extended_properties: Extended properties appended to the connection string. Type:
         string (or Expression with resultType string).
        :paramtype extended_properties: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloud"
        self.environment_url = environment_url
        self.username = username
        self.password = password
        self.security_token = security_token
        self.api_version = api_version
        self.extended_properties = extended_properties
        self.encrypted_credential = encrypted_credential


class SalesforceServiceCloudObjectDataset(Dataset):
    """The Salesforce Service Cloud object dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar object_api_name: The Salesforce Service Cloud object API name. Type: string (or
     Expression with resultType string).
    :vartype object_api_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "object_api_name": {"key": "typeProperties.objectApiName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        object_api_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword object_api_name: The Salesforce Service Cloud object API name. Type: string (or
         Expression with resultType string).
        :paramtype object_api_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudObject"
        self.object_api_name = object_api_name


class SalesforceServiceCloudSink(CopySink):
    """A copy activity Salesforce Service Cloud sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Default is Insert. Known values
     are: "Insert" and "Upsert".
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceSinkWriteBehavior
    :ivar external_id_field_name: The name of the external ID field for upsert operation. Default
     value is 'Id' column. Type: string (or Expression with resultType string).
    :vartype external_id_field_name: JSON
    :ivar ignore_null_values: The flag indicating whether or not to ignore null values from input
     dataset (except key fields) during write operation. Default value is false. If set it to true,
     it means ADF will leave the data in the destination object unchanged when doing upsert/update
     operation and insert defined default value when doing insert operation, versus ADF will update
     the data in the destination object to NULL when doing upsert/update operation and insert NULL
     value when doing insert operation. Type: boolean (or Expression with resultType boolean).
    :vartype ignore_null_values: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "external_id_field_name": {"key": "externalIdFieldName", "type": "object"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.SalesforceSinkWriteBehavior"]] = None,
        external_id_field_name: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Default is Insert. Known values
         are: "Insert" and "Upsert".
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceSinkWriteBehavior
        :keyword external_id_field_name: The name of the external ID field for upsert operation.
         Default value is 'Id' column. Type: string (or Expression with resultType string).
        :paramtype external_id_field_name: JSON
        :keyword ignore_null_values: The flag indicating whether or not to ignore null values from
         input dataset (except key fields) during write operation. Default value is false. If set it to
         true, it means ADF will leave the data in the destination object unchanged when doing
         upsert/update operation and insert defined default value when doing insert operation, versus
         ADF will update the data in the destination object to NULL when doing upsert/update operation
         and insert NULL value when doing insert operation. Type: boolean (or Expression with resultType
         boolean).
        :paramtype ignore_null_values: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudSink"
        self.write_behavior = write_behavior
        self.external_id_field_name = external_id_field_name
        self.ignore_null_values = ignore_null_values


class SalesforceServiceCloudSource(CopySource):
    """A copy activity Salesforce Service Cloud source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar read_behavior: The read behavior for the operation. Default is Query. Allowed values:
     Query/QueryAll. Type: string (or Expression with resultType string).
    :vartype read_behavior: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "read_behavior": {"key": "readBehavior", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        read_behavior: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword read_behavior: The read behavior for the operation. Default is Query. Allowed values:
         Query/QueryAll. Type: string (or Expression with resultType string).
        :paramtype read_behavior: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudSource"
        self.query = query
        self.read_behavior = read_behavior
        self.additional_columns = additional_columns


class SalesforceServiceCloudV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Salesforce Service Cloud V2.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar environment_url: The URL of Salesforce Service Cloud instance. For example,
     'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
    :vartype environment_url: JSON
    :ivar authentication_type: The authentication type to be used to connect to the Salesforce.
     Currently, we only support OAuth2ClientCredentials, it is also the default value.
    :vartype authentication_type: JSON
    :ivar client_id: The client Id for OAuth 2.0 Client Credentials Flow authentication of the
     Salesforce instance. Type: string (or Expression with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret for OAuth 2.0 Client Credentials Flow authentication of
     the Salesforce instance.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_version: The Salesforce API version used in ADF. The version must be larger than or
     equal to 47.0 which is required by Salesforce BULK API 2.0. Type: string (or Expression with
     resultType string).
    :vartype api_version: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "environment_url": {"key": "typeProperties.environmentUrl", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "api_version": {"key": "typeProperties.apiVersion", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        environment_url: Optional[JSON] = None,
        authentication_type: Optional[JSON] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        api_version: Optional[JSON] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword environment_url: The URL of Salesforce Service Cloud instance. For example,
         'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
        :paramtype environment_url: JSON
        :keyword authentication_type: The authentication type to be used to connect to the Salesforce.
         Currently, we only support OAuth2ClientCredentials, it is also the default value.
        :paramtype authentication_type: JSON
        :keyword client_id: The client Id for OAuth 2.0 Client Credentials Flow authentication of the
         Salesforce instance. Type: string (or Expression with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret for OAuth 2.0 Client Credentials Flow authentication
         of the Salesforce instance.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_version: The Salesforce API version used in ADF. The version must be larger than
         or equal to 47.0 which is required by Salesforce BULK API 2.0. Type: string (or Expression with
         resultType string).
        :paramtype api_version: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudV2"
        self.environment_url = environment_url
        self.authentication_type = authentication_type
        self.client_id = client_id
        self.client_secret = client_secret
        self.api_version = api_version
        self.encrypted_credential = encrypted_credential


class SalesforceServiceCloudV2ObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Salesforce Service Cloud V2 object dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar object_api_name: The Salesforce Service Cloud V2 object API name. Type: string (or
     Expression with resultType string).
    :vartype object_api_name: JSON
    :ivar report_id: The Salesforce Service Cloud V2 reportId. Type: string (or Expression with
     resultType string).
    :vartype report_id: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "object_api_name": {"key": "typeProperties.objectApiName", "type": "object"},
        "report_id": {"key": "typeProperties.reportId", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        object_api_name: Optional[JSON] = None,
        report_id: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword object_api_name: The Salesforce Service Cloud V2 object API name. Type: string (or
         Expression with resultType string).
        :paramtype object_api_name: JSON
        :keyword report_id: The Salesforce Service Cloud V2 reportId. Type: string (or Expression with
         resultType string).
        :paramtype report_id: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudV2Object"
        self.object_api_name = object_api_name
        self.report_id = report_id


class SalesforceServiceCloudV2Sink(CopySink):
    """A copy activity Salesforce Service Cloud V2 sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Default is Insert. Known values
     are: "Insert" and "Upsert".
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceV2SinkWriteBehavior
    :ivar external_id_field_name: The name of the external ID field for upsert operation. Default
     value is 'Id' column. Type: string (or Expression with resultType string).
    :vartype external_id_field_name: JSON
    :ivar ignore_null_values: The flag indicating whether or not to ignore null values from input
     dataset (except key fields) during write operation. Default value is false. If set it to true,
     it means ADF will leave the data in the destination object unchanged when doing upsert/update
     operation and insert defined default value when doing insert operation, versus ADF will update
     the data in the destination object to NULL when doing upsert/update operation and insert NULL
     value when doing insert operation. Type: boolean (or Expression with resultType boolean).
    :vartype ignore_null_values: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "external_id_field_name": {"key": "externalIdFieldName", "type": "object"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.SalesforceV2SinkWriteBehavior"]] = None,
        external_id_field_name: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Default is Insert. Known values
         are: "Insert" and "Upsert".
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceV2SinkWriteBehavior
        :keyword external_id_field_name: The name of the external ID field for upsert operation.
         Default value is 'Id' column. Type: string (or Expression with resultType string).
        :paramtype external_id_field_name: JSON
        :keyword ignore_null_values: The flag indicating whether or not to ignore null values from
         input dataset (except key fields) during write operation. Default value is false. If set it to
         true, it means ADF will leave the data in the destination object unchanged when doing
         upsert/update operation and insert defined default value when doing insert operation, versus
         ADF will update the data in the destination object to NULL when doing upsert/update operation
         and insert NULL value when doing insert operation. Type: boolean (or Expression with resultType
         boolean).
        :paramtype ignore_null_values: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudV2Sink"
        self.write_behavior = write_behavior
        self.external_id_field_name = external_id_field_name
        self.ignore_null_values = ignore_null_values


class SalesforceServiceCloudV2Source(CopySource):
    """A copy activity Salesforce Service Cloud V2 source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar soql_query: Deprecating, please use 'query' property instead. Type: string (or Expression
     with resultType string).
    :vartype soql_query: JSON
    :ivar query: You can only use Salesforce Object Query Language (SOQL) query with limitations.
     For SOQL limitations, see this article:
     https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/queries.htm#SOQL%20Considerations.
     If query is not specified, all the data of the Salesforce object specified in
     ObjectApiName/reportId in dataset will be retrieved. Type: string (or Expression with
     resultType string).
    :vartype query: JSON
    :ivar include_deleted_objects: This property control whether query result contains Deleted
     objects. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype include_deleted_objects: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "soql_query": {"key": "SOQLQuery", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "include_deleted_objects": {"key": "includeDeletedObjects", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        soql_query: Optional[JSON] = None,
        query: Optional[JSON] = None,
        include_deleted_objects: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword soql_query: Deprecating, please use 'query' property instead. Type: string (or
         Expression with resultType string).
        :paramtype soql_query: JSON
        :keyword query: You can only use Salesforce Object Query Language (SOQL) query with
         limitations. For SOQL limitations, see this article:
         https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/queries.htm#SOQL%20Considerations.
         If query is not specified, all the data of the Salesforce object specified in
         ObjectApiName/reportId in dataset will be retrieved. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword include_deleted_objects: This property control whether query result contains Deleted
         objects. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype include_deleted_objects: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceServiceCloudV2Source"
        self.soql_query = soql_query
        self.query = query
        self.include_deleted_objects = include_deleted_objects
        self.additional_columns = additional_columns


class SalesforceSink(CopySink):
    """A copy activity Salesforce sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Default is Insert. Known values
     are: "Insert" and "Upsert".
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceSinkWriteBehavior
    :ivar external_id_field_name: The name of the external ID field for upsert operation. Default
     value is 'Id' column. Type: string (or Expression with resultType string).
    :vartype external_id_field_name: JSON
    :ivar ignore_null_values: The flag indicating whether or not to ignore null values from input
     dataset (except key fields) during write operation. Default value is false. If set it to true,
     it means ADF will leave the data in the destination object unchanged when doing upsert/update
     operation and insert defined default value when doing insert operation, versus ADF will update
     the data in the destination object to NULL when doing upsert/update operation and insert NULL
     value when doing insert operation. Type: boolean (or Expression with resultType boolean).
    :vartype ignore_null_values: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "external_id_field_name": {"key": "externalIdFieldName", "type": "object"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.SalesforceSinkWriteBehavior"]] = None,
        external_id_field_name: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Default is Insert. Known values
         are: "Insert" and "Upsert".
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceSinkWriteBehavior
        :keyword external_id_field_name: The name of the external ID field for upsert operation.
         Default value is 'Id' column. Type: string (or Expression with resultType string).
        :paramtype external_id_field_name: JSON
        :keyword ignore_null_values: The flag indicating whether or not to ignore null values from
         input dataset (except key fields) during write operation. Default value is false. If set it to
         true, it means ADF will leave the data in the destination object unchanged when doing
         upsert/update operation and insert defined default value when doing insert operation, versus
         ADF will update the data in the destination object to NULL when doing upsert/update operation
         and insert NULL value when doing insert operation. Type: boolean (or Expression with resultType
         boolean).
        :paramtype ignore_null_values: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceSink"
        self.write_behavior = write_behavior
        self.external_id_field_name = external_id_field_name
        self.ignore_null_values = ignore_null_values


class SalesforceSource(TabularSource):
    """A copy activity Salesforce source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar read_behavior: The read behavior for the operation. Default is Query. Allowed values:
     Query/QueryAll. Type: string (or Expression with resultType string).
    :vartype read_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "read_behavior": {"key": "readBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        read_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword read_behavior: The read behavior for the operation. Default is Query. Allowed values:
         Query/QueryAll. Type: string (or Expression with resultType string).
        :paramtype read_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SalesforceSource"
        self.query = query
        self.read_behavior = read_behavior


class SalesforceV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Salesforce V2.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar environment_url: The URL of Salesforce instance. For example,
     'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
    :vartype environment_url: JSON
    :ivar authentication_type: The authentication type to be used to connect to the Salesforce.
     Currently, we only support OAuth2ClientCredentials, it is also the default value.
    :vartype authentication_type: JSON
    :ivar client_id: The client Id for OAuth 2.0 Client Credentials Flow authentication of the
     Salesforce instance. Type: string (or Expression with resultType string).
    :vartype client_id: JSON
    :ivar client_secret: The client secret for OAuth 2.0 Client Credentials Flow authentication of
     the Salesforce instance.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_version: The Salesforce API version used in ADF. The version must be larger than or
     equal to 47.0 which is required by Salesforce BULK API 2.0. Type: string (or Expression with
     resultType string).
    :vartype api_version: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "environment_url": {"key": "typeProperties.environmentUrl", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "api_version": {"key": "typeProperties.apiVersion", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        environment_url: Optional[JSON] = None,
        authentication_type: Optional[JSON] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        api_version: Optional[JSON] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword environment_url: The URL of Salesforce instance. For example,
         'https://[domain].my.salesforce.com'. Type: string (or Expression with resultType string).
        :paramtype environment_url: JSON
        :keyword authentication_type: The authentication type to be used to connect to the Salesforce.
         Currently, we only support OAuth2ClientCredentials, it is also the default value.
        :paramtype authentication_type: JSON
        :keyword client_id: The client Id for OAuth 2.0 Client Credentials Flow authentication of the
         Salesforce instance. Type: string (or Expression with resultType string).
        :paramtype client_id: JSON
        :keyword client_secret: The client secret for OAuth 2.0 Client Credentials Flow authentication
         of the Salesforce instance.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_version: The Salesforce API version used in ADF. The version must be larger than
         or equal to 47.0 which is required by Salesforce BULK API 2.0. Type: string (or Expression with
         resultType string).
        :paramtype api_version: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SalesforceV2"
        self.environment_url = environment_url
        self.authentication_type = authentication_type
        self.client_id = client_id
        self.client_secret = client_secret
        self.api_version = api_version
        self.encrypted_credential = encrypted_credential


class SalesforceV2ObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Salesforce V2 object dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar object_api_name: The Salesforce V2 object API name. Type: string (or Expression with
     resultType string).
    :vartype object_api_name: JSON
    :ivar report_id: The Salesforce V2 report Id. Type: string (or Expression with resultType
     string).
    :vartype report_id: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "object_api_name": {"key": "typeProperties.objectApiName", "type": "object"},
        "report_id": {"key": "typeProperties.reportId", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        object_api_name: Optional[JSON] = None,
        report_id: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword object_api_name: The Salesforce V2 object API name. Type: string (or Expression with
         resultType string).
        :paramtype object_api_name: JSON
        :keyword report_id: The Salesforce V2 report Id. Type: string (or Expression with resultType
         string).
        :paramtype report_id: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SalesforceV2Object"
        self.object_api_name = object_api_name
        self.report_id = report_id


class SalesforceV2Sink(CopySink):
    """A copy activity Salesforce V2 sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Default is Insert. Known values
     are: "Insert" and "Upsert".
    :vartype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceV2SinkWriteBehavior
    :ivar external_id_field_name: The name of the external ID field for upsert operation. Default
     value is 'Id' column. Type: string (or Expression with resultType string).
    :vartype external_id_field_name: JSON
    :ivar ignore_null_values: The flag indicating whether or not to ignore null values from input
     dataset (except key fields) during write operation. Default value is false. If set it to true,
     it means ADF will leave the data in the destination object unchanged when doing upsert/update
     operation and insert defined default value when doing insert operation, versus ADF will update
     the data in the destination object to NULL when doing upsert/update operation and insert NULL
     value when doing insert operation. Type: boolean (or Expression with resultType boolean).
    :vartype ignore_null_values: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "external_id_field_name": {"key": "externalIdFieldName", "type": "object"},
        "ignore_null_values": {"key": "ignoreNullValues", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.SalesforceV2SinkWriteBehavior"]] = None,
        external_id_field_name: Optional[JSON] = None,
        ignore_null_values: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Default is Insert. Known values
         are: "Insert" and "Upsert".
        :paramtype write_behavior: str or ~azure.synapse.artifacts.models.SalesforceV2SinkWriteBehavior
        :keyword external_id_field_name: The name of the external ID field for upsert operation.
         Default value is 'Id' column. Type: string (or Expression with resultType string).
        :paramtype external_id_field_name: JSON
        :keyword ignore_null_values: The flag indicating whether or not to ignore null values from
         input dataset (except key fields) during write operation. Default value is false. If set it to
         true, it means ADF will leave the data in the destination object unchanged when doing
         upsert/update operation and insert defined default value when doing insert operation, versus
         ADF will update the data in the destination object to NULL when doing upsert/update operation
         and insert NULL value when doing insert operation. Type: boolean (or Expression with resultType
         boolean).
        :paramtype ignore_null_values: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SalesforceV2Sink"
        self.write_behavior = write_behavior
        self.external_id_field_name = external_id_field_name
        self.ignore_null_values = ignore_null_values


class SalesforceV2Source(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Salesforce V2 source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar soql_query: Deprecating, please use 'query' property instead. Type: string (or Expression
     with resultType string).
    :vartype soql_query: JSON
    :ivar query: You can only use Salesforce Object Query Language (SOQL) query with limitations.
     For SOQL limitations, see this article:
     https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/queries.htm#SOQL%20Considerations.
     If query is not specified, all the data of the Salesforce object specified in
     ObjectApiName/reportId in dataset will be retrieved. Type: string (or Expression with
     resultType string).
    :vartype query: JSON
    :ivar include_deleted_objects: This property control whether query result contains Deleted
     objects. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype include_deleted_objects: JSON
    :ivar page_size: Page size for each http request, too large pageSize will caused timeout,
     default 300,000. Type: integer (or Expression with resultType integer).
    :vartype page_size: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "soql_query": {"key": "SOQLQuery", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "include_deleted_objects": {"key": "includeDeletedObjects", "type": "object"},
        "page_size": {"key": "pageSize", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        soql_query: Optional[JSON] = None,
        query: Optional[JSON] = None,
        include_deleted_objects: Optional[JSON] = None,
        page_size: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword soql_query: Deprecating, please use 'query' property instead. Type: string (or
         Expression with resultType string).
        :paramtype soql_query: JSON
        :keyword query: You can only use Salesforce Object Query Language (SOQL) query with
         limitations. For SOQL limitations, see this article:
         https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/queries.htm#SOQL%20Considerations.
         If query is not specified, all the data of the Salesforce object specified in
         ObjectApiName/reportId in dataset will be retrieved. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword include_deleted_objects: This property control whether query result contains Deleted
         objects. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype include_deleted_objects: JSON
        :keyword page_size: Page size for each http request, too large pageSize will caused timeout,
         default 300,000. Type: integer (or Expression with resultType integer).
        :paramtype page_size: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SalesforceV2Source"
        self.soql_query = soql_query
        self.query = query
        self.include_deleted_objects = include_deleted_objects
        self.page_size = page_size


class SapBwCubeDataset(Dataset):
    """The SAP BW cube dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapBwCube"


class SapBWLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SAP Business Warehouse Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Host name of the SAP BW instance. Type: string (or Expression with resultType
     string). Required.
    :vartype server: JSON
    :ivar system_number: System number of the BW system. (Usually a two-digit decimal number
     represented as a string.) Type: string (or Expression with resultType string). Required.
    :vartype system_number: JSON
    :ivar client_id: Client ID of the client on the BW system. (Usually a three-digit decimal
     number represented as a string) Type: string (or Expression with resultType string). Required.
    :vartype client_id: JSON
    :ivar user_name: Username to access the SAP BW server. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password to access the SAP BW server.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "system_number": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "system_number": {"key": "typeProperties.systemNumber", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        system_number: JSON,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Host name of the SAP BW instance. Type: string (or Expression with resultType
         string). Required.
        :paramtype server: JSON
        :keyword system_number: System number of the BW system. (Usually a two-digit decimal number
         represented as a string.) Type: string (or Expression with resultType string). Required.
        :paramtype system_number: JSON
        :keyword client_id: Client ID of the client on the BW system. (Usually a three-digit decimal
         number represented as a string) Type: string (or Expression with resultType string). Required.
        :paramtype client_id: JSON
        :keyword user_name: Username to access the SAP BW server. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to access the SAP BW server.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapBW"
        self.server = server
        self.system_number = system_number
        self.client_id = client_id
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential


class SapBwSource(TabularSource):
    """A copy activity source for SapBW server via MDX.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: MDX query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: MDX query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapBwSource"
        self.query = query


class SapCloudForCustomerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for SAP Cloud for Customer.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The URL of SAP Cloud for Customer OData API. For example,
     '[https://[tenantname].crm.ondemand.com/sap/c4c/odata/v1]'. Type: string (or Expression with
     resultType string). Required.
    :vartype url: JSON
    :ivar username: The username for Basic authentication. Type: string (or Expression with
     resultType string).
    :vartype username: JSON
    :ivar password: The password for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Either encryptedCredential or
     username/password must be provided. Type: string (or Expression with resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The URL of SAP Cloud for Customer OData API. For example,
         '[https://[tenantname].crm.ondemand.com/sap/c4c/odata/v1]'. Type: string (or Expression with
         resultType string). Required.
        :paramtype url: JSON
        :keyword username: The username for Basic authentication. Type: string (or Expression with
         resultType string).
        :paramtype username: JSON
        :keyword password: The password for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Either encryptedCredential or
         username/password must be provided. Type: string (or Expression with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapCloudForCustomer"
        self.url = url
        self.username = username
        self.password = password
        self.encrypted_credential = encrypted_credential


class SapCloudForCustomerResourceDataset(Dataset):
    """The path of the SAP Cloud for Customer OData entity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar path: The path of the SAP Cloud for Customer OData entity. Type: string (or Expression
     with resultType string). Required.
    :vartype path: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "path": {"key": "typeProperties.path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword path: The path of the SAP Cloud for Customer OData entity. Type: string (or Expression
         with resultType string). Required.
        :paramtype path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapCloudForCustomerResource"
        self.path = path


class SapCloudForCustomerSink(CopySink):
    """A copy activity SAP Cloud for Customer sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar write_behavior: The write behavior for the operation. Default is 'Insert'. Known values
     are: "Insert" and "Update".
    :vartype write_behavior: str or
     ~azure.synapse.artifacts.models.SapCloudForCustomerSinkWriteBehavior
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:05:00. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "str"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        write_behavior: Optional[Union[str, "_models.SapCloudForCustomerSinkWriteBehavior"]] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword write_behavior: The write behavior for the operation. Default is 'Insert'. Known
         values are: "Insert" and "Update".
        :paramtype write_behavior: str or
         ~azure.synapse.artifacts.models.SapCloudForCustomerSinkWriteBehavior
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:05:00.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SapCloudForCustomerSink"
        self.write_behavior = write_behavior
        self.http_request_timeout = http_request_timeout


class SapCloudForCustomerSource(TabularSource):
    """A copy activity source for SAP Cloud for Customer source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: SAP Cloud for Customer OData query. For example, "$top=1". Type: string (or
     Expression with resultType string).
    :vartype query: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:05:00. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: SAP Cloud for Customer OData query. For example, "$top=1". Type: string (or
         Expression with resultType string).
        :paramtype query: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:05:00.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapCloudForCustomerSource"
        self.query = query
        self.http_request_timeout = http_request_timeout


class SapEccLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for SAP ERP Central Component(SAP ECC).

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar url: The URL of SAP ECC OData API. For example,
     '[https://hostname:port/sap/opu/odata/sap/servicename/]'. Type: string (or Expression with
     resultType string). Required.
    :vartype url: str
    :ivar username: The username for Basic authentication. Type: string (or Expression with
     resultType string).
    :vartype username: str
    :ivar password: The password for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Either encryptedCredential or
     username/password must be provided. Type: string (or Expression with resultType string).
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "url": {"key": "typeProperties.url", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "str"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        url: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        username: Optional[str] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword url: The URL of SAP ECC OData API. For example,
         '[https://hostname:port/sap/opu/odata/sap/servicename/]'. Type: string (or Expression with
         resultType string). Required.
        :paramtype url: str
        :keyword username: The username for Basic authentication. Type: string (or Expression with
         resultType string).
        :paramtype username: str
        :keyword password: The password for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Either encryptedCredential or
         username/password must be provided. Type: string (or Expression with resultType string).
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapEcc"
        self.url = url
        self.username = username
        self.password = password
        self.encrypted_credential = encrypted_credential


class SapEccResourceDataset(Dataset):
    """The path of the SAP ECC OData entity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar path: The path of the SAP ECC OData entity. Type: string (or Expression with resultType
     string). Required.
    :vartype path: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "path": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "path": {"key": "typeProperties.path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        path: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword path: The path of the SAP ECC OData entity. Type: string (or Expression with
         resultType string). Required.
        :paramtype path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapEccResource"
        self.path = path


class SapEccSource(TabularSource):
    """A copy activity source for SAP ECC source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: SAP ECC OData query. For example, "$top=1". Type: string (or Expression with
     resultType string).
    :vartype query: JSON
    :ivar http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the timeout
     to get a response, not the timeout to read response data. Default value: 00:05:00. Type: string
     (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: SAP ECC OData query. For example, "$top=1". Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        :keyword http_request_timeout: The timeout (TimeSpan) to get an HTTP response. It is the
         timeout to get a response, not the timeout to read response data. Default value: 00:05:00.
         Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapEccSource"
        self.query = query
        self.http_request_timeout = http_request_timeout


class SapHanaLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SAP HANA Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: SAP HANA ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Host name of the SAP HANA server. Type: string (or Expression with resultType
     string). Required.
    :vartype server: JSON
    :ivar authentication_type: The authentication type to be used to connect to the SAP HANA
     server. Known values are: "Basic" and "Windows".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.SapHanaAuthenticationType
    :ivar user_name: Username to access the SAP HANA server. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: Password to access the SAP HANA server.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.SapHanaAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: SAP HANA ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Host name of the SAP HANA server. Type: string (or Expression with resultType
         string). Required.
        :paramtype server: JSON
        :keyword authentication_type: The authentication type to be used to connect to the SAP HANA
         server. Known values are: "Basic" and "Windows".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.SapHanaAuthenticationType
        :keyword user_name: Username to access the SAP HANA server. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to access the SAP HANA server.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapHana"
        self.connection_string = connection_string
        self.server = server
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential


class SapHanaPartitionSettings(_serialization.Model):
    """The settings that will be leveraged for SAP HANA source partitioning.

    :ivar partition_column_name: The name of the column that will be used for proceeding range
     partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    """

    _attribute_map = {
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
    }

    def __init__(self, *, partition_column_name: Optional[JSON] = None, **kwargs: Any) -> None:
        """
        :keyword partition_column_name: The name of the column that will be used for proceeding range
         partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        """
        super().__init__(**kwargs)
        self.partition_column_name = partition_column_name


class SapHanaSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity source for SAP HANA source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: SAP HANA Sql query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar packet_size: The packet size of data read from SAP HANA. Type: integer(or Expression with
     resultType integer).
    :vartype packet_size: JSON
    :ivar partition_option: The partition mechanism that will be used for SAP HANA read in
     parallel. Possible values include: "None", "PhysicalPartitionsOfTable", "SapHanaDynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for SAP HANA source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SapHanaPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SapHanaPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SapHanaPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: SAP HANA Sql query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword packet_size: The packet size of data read from SAP HANA. Type: integer(or Expression
         with resultType integer).
        :paramtype packet_size: JSON
        :keyword partition_option: The partition mechanism that will be used for SAP HANA read in
         parallel. Possible values include: "None", "PhysicalPartitionsOfTable", "SapHanaDynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for SAP HANA source
         partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SapHanaPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapHanaSource"
        self.query = query
        self.packet_size = packet_size
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class SapHanaTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """SAP HANA Table properties.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of SAP HANA. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of SAP HANA. Type: string (or Expression with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of SAP HANA. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of SAP HANA. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapHanaTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class SapOdpLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SAP ODP Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Host name of the SAP instance where the table is located. Type: string (or
     Expression with resultType string).
    :vartype server: JSON
    :ivar system_number: System number of the SAP system where the table is located. (Usually a
     two-digit decimal number represented as a string.) Type: string (or Expression with resultType
     string).
    :vartype system_number: JSON
    :ivar client_id: Client ID of the client on the SAP system where the table is located. (Usually
     a three-digit decimal number represented as a string) Type: string (or Expression with
     resultType string).
    :vartype client_id: JSON
    :ivar language: Language of the SAP system where the table is located. The default value is EN.
     Type: string (or Expression with resultType string).
    :vartype language: JSON
    :ivar system_id: SystemID of the SAP system where the table is located. Type: string (or
     Expression with resultType string).
    :vartype system_id: JSON
    :ivar user_name: Username to access the SAP server where the table is located. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: Password to access the SAP server where the table is located.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar message_server: The hostname of the SAP Message Server. Type: string (or Expression with
     resultType string).
    :vartype message_server: JSON
    :ivar message_server_service: The service name or port number of the Message Server. Type:
     string (or Expression with resultType string).
    :vartype message_server_service: JSON
    :ivar snc_mode: SNC activation flag (Boolean) to access the SAP server where the table is
     located. Type: boolean (or Expression with resultType boolean).
    :vartype snc_mode: JSON
    :ivar snc_my_name: Initiator's SNC name to access the SAP server where the table is located.
     Type: string (or Expression with resultType string).
    :vartype snc_my_name: JSON
    :ivar snc_partner_name: Communication partner's SNC name to access the SAP server where the
     table is located. Type: string (or Expression with resultType string).
    :vartype snc_partner_name: JSON
    :ivar snc_library_path: External security product's library to access the SAP server where the
     table is located. Type: string (or Expression with resultType string).
    :vartype snc_library_path: JSON
    :ivar snc_qop: SNC Quality of Protection. Allowed value include: 1, 2, 3, 8, 9. Type: string
     (or Expression with resultType string).
    :vartype snc_qop: JSON
    :ivar x509_certificate_path: SNC X509 certificate file path. Type: string (or Expression with
     resultType string).
    :vartype x509_certificate_path: JSON
    :ivar logon_group: The Logon Group for the SAP System. Type: string (or Expression with
     resultType string).
    :vartype logon_group: JSON
    :ivar subscriber_name: The subscriber name. Type: string (or Expression with resultType
     string).
    :vartype subscriber_name: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "system_number": {"key": "typeProperties.systemNumber", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "language": {"key": "typeProperties.language", "type": "object"},
        "system_id": {"key": "typeProperties.systemId", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "message_server": {"key": "typeProperties.messageServer", "type": "object"},
        "message_server_service": {"key": "typeProperties.messageServerService", "type": "object"},
        "snc_mode": {"key": "typeProperties.sncMode", "type": "object"},
        "snc_my_name": {"key": "typeProperties.sncMyName", "type": "object"},
        "snc_partner_name": {"key": "typeProperties.sncPartnerName", "type": "object"},
        "snc_library_path": {"key": "typeProperties.sncLibraryPath", "type": "object"},
        "snc_qop": {"key": "typeProperties.sncQop", "type": "object"},
        "x509_certificate_path": {"key": "typeProperties.x509CertificatePath", "type": "object"},
        "logon_group": {"key": "typeProperties.logonGroup", "type": "object"},
        "subscriber_name": {"key": "typeProperties.subscriberName", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        system_number: Optional[JSON] = None,
        client_id: Optional[JSON] = None,
        language: Optional[JSON] = None,
        system_id: Optional[JSON] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        message_server: Optional[JSON] = None,
        message_server_service: Optional[JSON] = None,
        snc_mode: Optional[JSON] = None,
        snc_my_name: Optional[JSON] = None,
        snc_partner_name: Optional[JSON] = None,
        snc_library_path: Optional[JSON] = None,
        snc_qop: Optional[JSON] = None,
        x509_certificate_path: Optional[JSON] = None,
        logon_group: Optional[JSON] = None,
        subscriber_name: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Host name of the SAP instance where the table is located. Type: string (or
         Expression with resultType string).
        :paramtype server: JSON
        :keyword system_number: System number of the SAP system where the table is located. (Usually a
         two-digit decimal number represented as a string.) Type: string (or Expression with resultType
         string).
        :paramtype system_number: JSON
        :keyword client_id: Client ID of the client on the SAP system where the table is located.
         (Usually a three-digit decimal number represented as a string) Type: string (or Expression with
         resultType string).
        :paramtype client_id: JSON
        :keyword language: Language of the SAP system where the table is located. The default value is
         EN. Type: string (or Expression with resultType string).
        :paramtype language: JSON
        :keyword system_id: SystemID of the SAP system where the table is located. Type: string (or
         Expression with resultType string).
        :paramtype system_id: JSON
        :keyword user_name: Username to access the SAP server where the table is located. Type: string
         (or Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to access the SAP server where the table is located.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword message_server: The hostname of the SAP Message Server. Type: string (or Expression
         with resultType string).
        :paramtype message_server: JSON
        :keyword message_server_service: The service name or port number of the Message Server. Type:
         string (or Expression with resultType string).
        :paramtype message_server_service: JSON
        :keyword snc_mode: SNC activation flag (Boolean) to access the SAP server where the table is
         located. Type: boolean (or Expression with resultType boolean).
        :paramtype snc_mode: JSON
        :keyword snc_my_name: Initiator's SNC name to access the SAP server where the table is located.
         Type: string (or Expression with resultType string).
        :paramtype snc_my_name: JSON
        :keyword snc_partner_name: Communication partner's SNC name to access the SAP server where the
         table is located. Type: string (or Expression with resultType string).
        :paramtype snc_partner_name: JSON
        :keyword snc_library_path: External security product's library to access the SAP server where
         the table is located. Type: string (or Expression with resultType string).
        :paramtype snc_library_path: JSON
        :keyword snc_qop: SNC Quality of Protection. Allowed value include: 1, 2, 3, 8, 9. Type: string
         (or Expression with resultType string).
        :paramtype snc_qop: JSON
        :keyword x509_certificate_path: SNC X509 certificate file path. Type: string (or Expression
         with resultType string).
        :paramtype x509_certificate_path: JSON
        :keyword logon_group: The Logon Group for the SAP System. Type: string (or Expression with
         resultType string).
        :paramtype logon_group: JSON
        :keyword subscriber_name: The subscriber name. Type: string (or Expression with resultType
         string).
        :paramtype subscriber_name: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapOdp"
        self.server = server
        self.system_number = system_number
        self.client_id = client_id
        self.language = language
        self.system_id = system_id
        self.user_name = user_name
        self.password = password
        self.message_server = message_server
        self.message_server_service = message_server_service
        self.snc_mode = snc_mode
        self.snc_my_name = snc_my_name
        self.snc_partner_name = snc_partner_name
        self.snc_library_path = snc_library_path
        self.snc_qop = snc_qop
        self.x509_certificate_path = x509_certificate_path
        self.logon_group = logon_group
        self.subscriber_name = subscriber_name
        self.encrypted_credential = encrypted_credential


class SapOdpResourceDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """SAP ODP Resource properties.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar context: The context of the SAP ODP Object. Type: string (or Expression with resultType
     string). Required.
    :vartype context: JSON
    :ivar object_name: The name of the SAP ODP Object. Type: string (or Expression with resultType
     string). Required.
    :vartype object_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "context": {"required": True},
        "object_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "context": {"key": "typeProperties.context", "type": "object"},
        "object_name": {"key": "typeProperties.objectName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        context: JSON,
        object_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword context: The context of the SAP ODP Object. Type: string (or Expression with
         resultType string). Required.
        :paramtype context: JSON
        :keyword object_name: The name of the SAP ODP Object. Type: string (or Expression with
         resultType string). Required.
        :paramtype object_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapOdpResource"
        self.context = context
        self.object_name = object_name


class SapOdpSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity source for SAP ODP source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar extraction_mode: The extraction mode. Allowed value include: Full, Delta and Recovery.
     The default value is Full. Type: string (or Expression with resultType string).
    :vartype extraction_mode: JSON
    :ivar subscriber_process: The subscriber process to manage the delta process. Type: string (or
     Expression with resultType string).
    :vartype subscriber_process: JSON
    :ivar selection: Specifies the selection conditions from source data. Type: array of
     objects(selection) (or Expression with resultType array of objects).
    :vartype selection: JSON
    :ivar projection: Specifies the columns to be selected from source data. Type: array of
     objects(projection) (or Expression with resultType array of objects).
    :vartype projection: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "extraction_mode": {"key": "extractionMode", "type": "object"},
        "subscriber_process": {"key": "subscriberProcess", "type": "object"},
        "selection": {"key": "selection", "type": "object"},
        "projection": {"key": "projection", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        extraction_mode: Optional[JSON] = None,
        subscriber_process: Optional[JSON] = None,
        selection: Optional[JSON] = None,
        projection: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword extraction_mode: The extraction mode. Allowed value include: Full, Delta and Recovery.
         The default value is Full. Type: string (or Expression with resultType string).
        :paramtype extraction_mode: JSON
        :keyword subscriber_process: The subscriber process to manage the delta process. Type: string
         (or Expression with resultType string).
        :paramtype subscriber_process: JSON
        :keyword selection: Specifies the selection conditions from source data. Type: array of
         objects(selection) (or Expression with resultType array of objects).
        :paramtype selection: JSON
        :keyword projection: Specifies the columns to be selected from source data. Type: array of
         objects(projection) (or Expression with resultType array of objects).
        :paramtype projection: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapOdpSource"
        self.extraction_mode = extraction_mode
        self.subscriber_process = subscriber_process
        self.selection = selection
        self.projection = projection


class SapOpenHubLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SAP Business Warehouse Open Hub Destination Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Host name of the SAP BW instance where the open hub destination is located. Type:
     string (or Expression with resultType string). Required.
    :vartype server: JSON
    :ivar system_number: System number of the BW system where the open hub destination is located.
     (Usually a two-digit decimal number represented as a string.) Type: string (or Expression with
     resultType string). Required.
    :vartype system_number: JSON
    :ivar client_id: Client ID of the client on the BW system where the open hub destination is
     located. (Usually a three-digit decimal number represented as a string) Type: string (or
     Expression with resultType string). Required.
    :vartype client_id: JSON
    :ivar language: Language of the BW system where the open hub destination is located. The
     default value is EN. Type: string (or Expression with resultType string).
    :vartype language: JSON
    :ivar system_id: SystemID of the SAP system where the table is located. Type: string (or
     Expression with resultType string).
    :vartype system_id: JSON
    :ivar user_name: Username to access the SAP BW server where the open hub destination is
     located. Type: string (or Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: Password to access the SAP BW server where the open hub destination is located.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar message_server: The hostname of the SAP Message Server. Type: string (or Expression with
     resultType string).
    :vartype message_server: JSON
    :ivar message_server_service: The service name or port number of the Message Server. Type:
     string (or Expression with resultType string).
    :vartype message_server_service: JSON
    :ivar logon_group: The Logon Group for the SAP System. Type: string (or Expression with
     resultType string).
    :vartype logon_group: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "system_number": {"required": True},
        "client_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "system_number": {"key": "typeProperties.systemNumber", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "language": {"key": "typeProperties.language", "type": "object"},
        "system_id": {"key": "typeProperties.systemId", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "message_server": {"key": "typeProperties.messageServer", "type": "object"},
        "message_server_service": {"key": "typeProperties.messageServerService", "type": "object"},
        "logon_group": {"key": "typeProperties.logonGroup", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        system_number: JSON,
        client_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        language: Optional[JSON] = None,
        system_id: Optional[JSON] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        message_server: Optional[JSON] = None,
        message_server_service: Optional[JSON] = None,
        logon_group: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Host name of the SAP BW instance where the open hub destination is located.
         Type: string (or Expression with resultType string). Required.
        :paramtype server: JSON
        :keyword system_number: System number of the BW system where the open hub destination is
         located. (Usually a two-digit decimal number represented as a string.) Type: string (or
         Expression with resultType string). Required.
        :paramtype system_number: JSON
        :keyword client_id: Client ID of the client on the BW system where the open hub destination is
         located. (Usually a three-digit decimal number represented as a string) Type: string (or
         Expression with resultType string). Required.
        :paramtype client_id: JSON
        :keyword language: Language of the BW system where the open hub destination is located. The
         default value is EN. Type: string (or Expression with resultType string).
        :paramtype language: JSON
        :keyword system_id: SystemID of the SAP system where the table is located. Type: string (or
         Expression with resultType string).
        :paramtype system_id: JSON
        :keyword user_name: Username to access the SAP BW server where the open hub destination is
         located. Type: string (or Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to access the SAP BW server where the open hub destination is
         located.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword message_server: The hostname of the SAP Message Server. Type: string (or Expression
         with resultType string).
        :paramtype message_server: JSON
        :keyword message_server_service: The service name or port number of the Message Server. Type:
         string (or Expression with resultType string).
        :paramtype message_server_service: JSON
        :keyword logon_group: The Logon Group for the SAP System. Type: string (or Expression with
         resultType string).
        :paramtype logon_group: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapOpenHub"
        self.server = server
        self.system_number = system_number
        self.client_id = client_id
        self.language = language
        self.system_id = system_id
        self.user_name = user_name
        self.password = password
        self.message_server = message_server
        self.message_server_service = message_server_service
        self.logon_group = logon_group
        self.encrypted_credential = encrypted_credential


class SapOpenHubSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity source for SAP Business Warehouse Open Hub Destination source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar exclude_last_request: Whether to exclude the records of the last request. The default
     value is true. Type: boolean (or Expression with resultType boolean).
    :vartype exclude_last_request: JSON
    :ivar base_request_id: The ID of request for delta loading. Once it is set, only data with
     requestId larger than the value of this property will be retrieved. The default value is 0.
     Type: integer (or Expression with resultType integer ).
    :vartype base_request_id: JSON
    :ivar custom_rfc_read_table_function_module: Specifies the custom RFC function module that will
     be used to read data from SAP Table. Type: string (or Expression with resultType string).
    :vartype custom_rfc_read_table_function_module: JSON
    :ivar sap_data_column_delimiter: The single character that will be used as delimiter passed to
     SAP RFC as well as splitting the output data retrieved. Type: string (or Expression with
     resultType string).
    :vartype sap_data_column_delimiter: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "exclude_last_request": {"key": "excludeLastRequest", "type": "object"},
        "base_request_id": {"key": "baseRequestId", "type": "object"},
        "custom_rfc_read_table_function_module": {"key": "customRfcReadTableFunctionModule", "type": "object"},
        "sap_data_column_delimiter": {"key": "sapDataColumnDelimiter", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        exclude_last_request: Optional[JSON] = None,
        base_request_id: Optional[JSON] = None,
        custom_rfc_read_table_function_module: Optional[JSON] = None,
        sap_data_column_delimiter: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword exclude_last_request: Whether to exclude the records of the last request. The default
         value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype exclude_last_request: JSON
        :keyword base_request_id: The ID of request for delta loading. Once it is set, only data with
         requestId larger than the value of this property will be retrieved. The default value is 0.
         Type: integer (or Expression with resultType integer ).
        :paramtype base_request_id: JSON
        :keyword custom_rfc_read_table_function_module: Specifies the custom RFC function module that
         will be used to read data from SAP Table. Type: string (or Expression with resultType string).
        :paramtype custom_rfc_read_table_function_module: JSON
        :keyword sap_data_column_delimiter: The single character that will be used as delimiter passed
         to SAP RFC as well as splitting the output data retrieved. Type: string (or Expression with
         resultType string).
        :paramtype sap_data_column_delimiter: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapOpenHubSource"
        self.exclude_last_request = exclude_last_request
        self.base_request_id = base_request_id
        self.custom_rfc_read_table_function_module = custom_rfc_read_table_function_module
        self.sap_data_column_delimiter = sap_data_column_delimiter


class SapOpenHubTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Sap Business Warehouse Open Hub Destination Table properties.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar open_hub_destination_name: The name of the Open Hub Destination with destination type as
     Database Table. Type: string (or Expression with resultType string). Required.
    :vartype open_hub_destination_name: JSON
    :ivar exclude_last_request: Whether to exclude the records of the last request. The default
     value is true. Type: boolean (or Expression with resultType boolean).
    :vartype exclude_last_request: JSON
    :ivar base_request_id: The ID of request for delta loading. Once it is set, only data with
     requestId larger than the value of this property will be retrieved. The default value is 0.
     Type: integer (or Expression with resultType integer ).
    :vartype base_request_id: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "open_hub_destination_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "open_hub_destination_name": {"key": "typeProperties.openHubDestinationName", "type": "object"},
        "exclude_last_request": {"key": "typeProperties.excludeLastRequest", "type": "object"},
        "base_request_id": {"key": "typeProperties.baseRequestId", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        open_hub_destination_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        exclude_last_request: Optional[JSON] = None,
        base_request_id: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword open_hub_destination_name: The name of the Open Hub Destination with destination type
         as Database Table. Type: string (or Expression with resultType string). Required.
        :paramtype open_hub_destination_name: JSON
        :keyword exclude_last_request: Whether to exclude the records of the last request. The default
         value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype exclude_last_request: JSON
        :keyword base_request_id: The ID of request for delta loading. Once it is set, only data with
         requestId larger than the value of this property will be retrieved. The default value is 0.
         Type: integer (or Expression with resultType integer ).
        :paramtype base_request_id: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapOpenHubTable"
        self.open_hub_destination_name = open_hub_destination_name
        self.exclude_last_request = exclude_last_request
        self.base_request_id = base_request_id


class SapTableLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SAP Table Linked Service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Host name of the SAP instance where the table is located. Type: string (or
     Expression with resultType string).
    :vartype server: JSON
    :ivar system_number: System number of the SAP system where the table is located. (Usually a
     two-digit decimal number represented as a string.) Type: string (or Expression with resultType
     string).
    :vartype system_number: JSON
    :ivar client_id: Client ID of the client on the SAP system where the table is located. (Usually
     a three-digit decimal number represented as a string) Type: string (or Expression with
     resultType string).
    :vartype client_id: JSON
    :ivar language: Language of the SAP system where the table is located. The default value is EN.
     Type: string (or Expression with resultType string).
    :vartype language: JSON
    :ivar system_id: SystemID of the SAP system where the table is located. Type: string (or
     Expression with resultType string).
    :vartype system_id: JSON
    :ivar user_name: Username to access the SAP server where the table is located. Type: string (or
     Expression with resultType string).
    :vartype user_name: JSON
    :ivar password: Password to access the SAP server where the table is located.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar message_server: The hostname of the SAP Message Server. Type: string (or Expression with
     resultType string).
    :vartype message_server: JSON
    :ivar message_server_service: The service name or port number of the Message Server. Type:
     string (or Expression with resultType string).
    :vartype message_server_service: JSON
    :ivar snc_mode: SNC activation flag (Boolean) to access the SAP server where the table is
     located. Type: boolean (or Expression with resultType boolean).
    :vartype snc_mode: JSON
    :ivar snc_my_name: Initiator's SNC name to access the SAP server where the table is located.
     Type: string (or Expression with resultType string).
    :vartype snc_my_name: JSON
    :ivar snc_partner_name: Communication partner's SNC name to access the SAP server where the
     table is located. Type: string (or Expression with resultType string).
    :vartype snc_partner_name: JSON
    :ivar snc_library_path: External security product's library to access the SAP server where the
     table is located. Type: string (or Expression with resultType string).
    :vartype snc_library_path: JSON
    :ivar snc_qop: SNC Quality of Protection. Allowed value include: 1, 2, 3, 8, 9. Type: string
     (or Expression with resultType string).
    :vartype snc_qop: JSON
    :ivar logon_group: The Logon Group for the SAP System. Type: string (or Expression with
     resultType string).
    :vartype logon_group: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "system_number": {"key": "typeProperties.systemNumber", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "language": {"key": "typeProperties.language", "type": "object"},
        "system_id": {"key": "typeProperties.systemId", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "message_server": {"key": "typeProperties.messageServer", "type": "object"},
        "message_server_service": {"key": "typeProperties.messageServerService", "type": "object"},
        "snc_mode": {"key": "typeProperties.sncMode", "type": "object"},
        "snc_my_name": {"key": "typeProperties.sncMyName", "type": "object"},
        "snc_partner_name": {"key": "typeProperties.sncPartnerName", "type": "object"},
        "snc_library_path": {"key": "typeProperties.sncLibraryPath", "type": "object"},
        "snc_qop": {"key": "typeProperties.sncQop", "type": "object"},
        "logon_group": {"key": "typeProperties.logonGroup", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        system_number: Optional[JSON] = None,
        client_id: Optional[JSON] = None,
        language: Optional[JSON] = None,
        system_id: Optional[JSON] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        message_server: Optional[JSON] = None,
        message_server_service: Optional[JSON] = None,
        snc_mode: Optional[JSON] = None,
        snc_my_name: Optional[JSON] = None,
        snc_partner_name: Optional[JSON] = None,
        snc_library_path: Optional[JSON] = None,
        snc_qop: Optional[JSON] = None,
        logon_group: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Host name of the SAP instance where the table is located. Type: string (or
         Expression with resultType string).
        :paramtype server: JSON
        :keyword system_number: System number of the SAP system where the table is located. (Usually a
         two-digit decimal number represented as a string.) Type: string (or Expression with resultType
         string).
        :paramtype system_number: JSON
        :keyword client_id: Client ID of the client on the SAP system where the table is located.
         (Usually a three-digit decimal number represented as a string) Type: string (or Expression with
         resultType string).
        :paramtype client_id: JSON
        :keyword language: Language of the SAP system where the table is located. The default value is
         EN. Type: string (or Expression with resultType string).
        :paramtype language: JSON
        :keyword system_id: SystemID of the SAP system where the table is located. Type: string (or
         Expression with resultType string).
        :paramtype system_id: JSON
        :keyword user_name: Username to access the SAP server where the table is located. Type: string
         (or Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to access the SAP server where the table is located.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword message_server: The hostname of the SAP Message Server. Type: string (or Expression
         with resultType string).
        :paramtype message_server: JSON
        :keyword message_server_service: The service name or port number of the Message Server. Type:
         string (or Expression with resultType string).
        :paramtype message_server_service: JSON
        :keyword snc_mode: SNC activation flag (Boolean) to access the SAP server where the table is
         located. Type: boolean (or Expression with resultType boolean).
        :paramtype snc_mode: JSON
        :keyword snc_my_name: Initiator's SNC name to access the SAP server where the table is located.
         Type: string (or Expression with resultType string).
        :paramtype snc_my_name: JSON
        :keyword snc_partner_name: Communication partner's SNC name to access the SAP server where the
         table is located. Type: string (or Expression with resultType string).
        :paramtype snc_partner_name: JSON
        :keyword snc_library_path: External security product's library to access the SAP server where
         the table is located. Type: string (or Expression with resultType string).
        :paramtype snc_library_path: JSON
        :keyword snc_qop: SNC Quality of Protection. Allowed value include: 1, 2, 3, 8, 9. Type: string
         (or Expression with resultType string).
        :paramtype snc_qop: JSON
        :keyword logon_group: The Logon Group for the SAP System. Type: string (or Expression with
         resultType string).
        :paramtype logon_group: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SapTable"
        self.server = server
        self.system_number = system_number
        self.client_id = client_id
        self.language = language
        self.system_id = system_id
        self.user_name = user_name
        self.password = password
        self.message_server = message_server
        self.message_server_service = message_server_service
        self.snc_mode = snc_mode
        self.snc_my_name = snc_my_name
        self.snc_partner_name = snc_partner_name
        self.snc_library_path = snc_library_path
        self.snc_qop = snc_qop
        self.logon_group = logon_group
        self.encrypted_credential = encrypted_credential


class SapTablePartitionSettings(_serialization.Model):
    """The settings that will be leveraged for SAP table source partitioning.

    :ivar partition_column_name: The name of the column that will be used for proceeding range
     partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_lower_bound: JSON
    :ivar max_partitions_number: The maximum value of partitions the table will be split into.
     Type: integer (or Expression with resultType string).
    :vartype max_partitions_number: JSON
    """

    _attribute_map = {
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
        "max_partitions_number": {"key": "maxPartitionsNumber", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        max_partitions_number: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_column_name: The name of the column that will be used for proceeding range
         partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_lower_bound: JSON
        :keyword max_partitions_number: The maximum value of partitions the table will be split into.
         Type: integer (or Expression with resultType string).
        :paramtype max_partitions_number: JSON
        """
        super().__init__(**kwargs)
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound
        self.max_partitions_number = max_partitions_number


class SapTableResourceDataset(Dataset):
    """SAP Table Resource properties.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The name of the SAP Table. Type: string (or Expression with resultType
     string). Required.
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "table_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        table_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The name of the SAP Table. Type: string (or Expression with resultType
         string). Required.
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SapTableResource"
        self.table_name = table_name


class SapTableSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity source for SAP Table source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar row_count: The number of rows to be retrieved. Type: integer(or Expression with
     resultType integer).
    :vartype row_count: JSON
    :ivar row_skips: The number of rows that will be skipped. Type: integer (or Expression with
     resultType integer).
    :vartype row_skips: JSON
    :ivar rfc_table_fields: The fields of the SAP table that will be retrieved. For example,
     column0, column1. Type: string (or Expression with resultType string).
    :vartype rfc_table_fields: JSON
    :ivar rfc_table_options: The options for the filtering of the SAP Table. For example, COLUMN0
     EQ SOME VALUE. Type: string (or Expression with resultType string).
    :vartype rfc_table_options: JSON
    :ivar batch_size: Specifies the maximum number of rows that will be retrieved at a time when
     retrieving data from SAP Table. Type: integer (or Expression with resultType integer).
    :vartype batch_size: JSON
    :ivar custom_rfc_read_table_function_module: Specifies the custom RFC function module that will
     be used to read data from SAP Table. Type: string (or Expression with resultType string).
    :vartype custom_rfc_read_table_function_module: JSON
    :ivar sap_data_column_delimiter: The single character that will be used as delimiter passed to
     SAP RFC as well as splitting the output data retrieved. Type: string (or Expression with
     resultType string).
    :vartype sap_data_column_delimiter: JSON
    :ivar partition_option: The partition mechanism that will be used for SAP table read in
     parallel. Possible values include: "None", "PartitionOnInt", "PartitionOnCalendarYear",
     "PartitionOnCalendarMonth", "PartitionOnCalendarDate", "PartitionOnTime".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for SAP table source
     partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SapTablePartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "row_count": {"key": "rowCount", "type": "object"},
        "row_skips": {"key": "rowSkips", "type": "object"},
        "rfc_table_fields": {"key": "rfcTableFields", "type": "object"},
        "rfc_table_options": {"key": "rfcTableOptions", "type": "object"},
        "batch_size": {"key": "batchSize", "type": "object"},
        "custom_rfc_read_table_function_module": {"key": "customRfcReadTableFunctionModule", "type": "object"},
        "sap_data_column_delimiter": {"key": "sapDataColumnDelimiter", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SapTablePartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        row_count: Optional[JSON] = None,
        row_skips: Optional[JSON] = None,
        rfc_table_fields: Optional[JSON] = None,
        rfc_table_options: Optional[JSON] = None,
        batch_size: Optional[JSON] = None,
        custom_rfc_read_table_function_module: Optional[JSON] = None,
        sap_data_column_delimiter: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SapTablePartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword row_count: The number of rows to be retrieved. Type: integer(or Expression with
         resultType integer).
        :paramtype row_count: JSON
        :keyword row_skips: The number of rows that will be skipped. Type: integer (or Expression with
         resultType integer).
        :paramtype row_skips: JSON
        :keyword rfc_table_fields: The fields of the SAP table that will be retrieved. For example,
         column0, column1. Type: string (or Expression with resultType string).
        :paramtype rfc_table_fields: JSON
        :keyword rfc_table_options: The options for the filtering of the SAP Table. For example,
         COLUMN0 EQ SOME VALUE. Type: string (or Expression with resultType string).
        :paramtype rfc_table_options: JSON
        :keyword batch_size: Specifies the maximum number of rows that will be retrieved at a time when
         retrieving data from SAP Table. Type: integer (or Expression with resultType integer).
        :paramtype batch_size: JSON
        :keyword custom_rfc_read_table_function_module: Specifies the custom RFC function module that
         will be used to read data from SAP Table. Type: string (or Expression with resultType string).
        :paramtype custom_rfc_read_table_function_module: JSON
        :keyword sap_data_column_delimiter: The single character that will be used as delimiter passed
         to SAP RFC as well as splitting the output data retrieved. Type: string (or Expression with
         resultType string).
        :paramtype sap_data_column_delimiter: JSON
        :keyword partition_option: The partition mechanism that will be used for SAP table read in
         parallel. Possible values include: "None", "PartitionOnInt", "PartitionOnCalendarYear",
         "PartitionOnCalendarMonth", "PartitionOnCalendarDate", "PartitionOnTime".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for SAP table source
         partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SapTablePartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SapTableSource"
        self.row_count = row_count
        self.row_skips = row_skips
        self.rfc_table_fields = rfc_table_fields
        self.rfc_table_options = rfc_table_options
        self.batch_size = batch_size
        self.custom_rfc_read_table_function_module = custom_rfc_read_table_function_module
        self.sap_data_column_delimiter = sap_data_column_delimiter
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class ScheduleTrigger(MultiplePipelineTrigger):
    """Trigger that creates pipeline runs periodically, on schedule.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipelines: Pipelines that need to be started.
    :vartype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
    :ivar recurrence: Recurrence schedule configuration. Required.
    :vartype recurrence: ~azure.synapse.artifacts.models.ScheduleTriggerRecurrence
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "recurrence": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipelines": {"key": "pipelines", "type": "[TriggerPipelineReference]"},
        "recurrence": {"key": "typeProperties.recurrence", "type": "ScheduleTriggerRecurrence"},
    }

    def __init__(
        self,
        *,
        recurrence: "_models.ScheduleTriggerRecurrence",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        pipelines: Optional[List["_models.TriggerPipelineReference"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipelines: Pipelines that need to be started.
        :paramtype pipelines: list[~azure.synapse.artifacts.models.TriggerPipelineReference]
        :keyword recurrence: Recurrence schedule configuration. Required.
        :paramtype recurrence: ~azure.synapse.artifacts.models.ScheduleTriggerRecurrence
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            annotations=annotations,
            pipelines=pipelines,
            **kwargs
        )
        self.type: str = "ScheduleTrigger"
        self.recurrence = recurrence


class ScheduleTriggerRecurrence(_serialization.Model):
    """The workflow trigger recurrence.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar frequency: The frequency. Known values are: "NotSpecified", "Minute", "Hour", "Day",
     "Week", "Month", and "Year".
    :vartype frequency: str or ~azure.synapse.artifacts.models.RecurrenceFrequency
    :ivar interval: The interval.
    :vartype interval: int
    :ivar start_time: The start time.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time.
    :vartype end_time: ~datetime.datetime
    :ivar time_zone: The time zone.
    :vartype time_zone: str
    :ivar schedule: The recurrence schedule.
    :vartype schedule: ~azure.synapse.artifacts.models.RecurrenceSchedule
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "frequency": {"key": "frequency", "type": "str"},
        "interval": {"key": "interval", "type": "int"},
        "start_time": {"key": "startTime", "type": "iso-8601"},
        "end_time": {"key": "endTime", "type": "iso-8601"},
        "time_zone": {"key": "timeZone", "type": "str"},
        "schedule": {"key": "schedule", "type": "RecurrenceSchedule"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        frequency: Optional[Union[str, "_models.RecurrenceFrequency"]] = None,
        interval: Optional[int] = None,
        start_time: Optional[datetime.datetime] = None,
        end_time: Optional[datetime.datetime] = None,
        time_zone: Optional[str] = None,
        schedule: Optional["_models.RecurrenceSchedule"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword frequency: The frequency. Known values are: "NotSpecified", "Minute", "Hour", "Day",
         "Week", "Month", and "Year".
        :paramtype frequency: str or ~azure.synapse.artifacts.models.RecurrenceFrequency
        :keyword interval: The interval.
        :paramtype interval: int
        :keyword start_time: The start time.
        :paramtype start_time: ~datetime.datetime
        :keyword end_time: The end time.
        :paramtype end_time: ~datetime.datetime
        :keyword time_zone: The time zone.
        :paramtype time_zone: str
        :keyword schedule: The recurrence schedule.
        :paramtype schedule: ~azure.synapse.artifacts.models.RecurrenceSchedule
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.frequency = frequency
        self.interval = interval
        self.start_time = start_time
        self.end_time = end_time
        self.time_zone = time_zone
        self.schedule = schedule


class ScriptAction(_serialization.Model):
    """Custom script action to run on HDI ondemand cluster once it's up.

    All required parameters must be populated in order to send to Azure.

    :ivar name: The user provided name of the script action. Required.
    :vartype name: str
    :ivar uri: The URI for the script action. Required.
    :vartype uri: str
    :ivar roles: The node types on which the script action should be executed. Required.
    :vartype roles: JSON
    :ivar parameters: The parameters for the script action.
    :vartype parameters: str
    """

    _validation = {
        "name": {"required": True},
        "uri": {"required": True},
        "roles": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "uri": {"key": "uri", "type": "str"},
        "roles": {"key": "roles", "type": "object"},
        "parameters": {"key": "parameters", "type": "str"},
    }

    def __init__(self, *, name: str, uri: str, roles: JSON, parameters: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The user provided name of the script action. Required.
        :paramtype name: str
        :keyword uri: The URI for the script action. Required.
        :paramtype uri: str
        :keyword roles: The node types on which the script action should be executed. Required.
        :paramtype roles: JSON
        :keyword parameters: The parameters for the script action.
        :paramtype parameters: str
        """
        super().__init__(**kwargs)
        self.name = name
        self.uri = uri
        self.roles = roles
        self.parameters = parameters


class ScriptActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Script activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar script_block_execution_timeout: ScriptBlock execution timeout. Type: string (or
     Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype script_block_execution_timeout: JSON
    :ivar scripts: Array of script blocks. Type: array.
    :vartype scripts: list[~azure.synapse.artifacts.models.ScriptActivityScriptBlock]
    :ivar log_settings: Log settings of script activity.
    :vartype log_settings: ~azure.synapse.artifacts.models.ScriptActivityTypePropertiesLogSettings
    :ivar return_multistatement_result: Enable to retrieve result sets from multiple SQL statements
     and the number of rows affected by the DML statement. Supported connector: SnowflakeV2. Type:
     boolean (or Expression with resultType boolean).
    :vartype return_multistatement_result: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "script_block_execution_timeout": {"key": "typeProperties.scriptBlockExecutionTimeout", "type": "object"},
        "scripts": {"key": "typeProperties.scripts", "type": "[ScriptActivityScriptBlock]"},
        "log_settings": {"key": "typeProperties.logSettings", "type": "ScriptActivityTypePropertiesLogSettings"},
        "return_multistatement_result": {"key": "typeProperties.returnMultistatementResult", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        script_block_execution_timeout: Optional[JSON] = None,
        scripts: Optional[List["_models.ScriptActivityScriptBlock"]] = None,
        log_settings: Optional["_models.ScriptActivityTypePropertiesLogSettings"] = None,
        return_multistatement_result: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword script_block_execution_timeout: ScriptBlock execution timeout. Type: string (or
         Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype script_block_execution_timeout: JSON
        :keyword scripts: Array of script blocks. Type: array.
        :paramtype scripts: list[~azure.synapse.artifacts.models.ScriptActivityScriptBlock]
        :keyword log_settings: Log settings of script activity.
        :paramtype log_settings:
         ~azure.synapse.artifacts.models.ScriptActivityTypePropertiesLogSettings
        :keyword return_multistatement_result: Enable to retrieve result sets from multiple SQL
         statements and the number of rows affected by the DML statement. Supported connector:
         SnowflakeV2. Type: boolean (or Expression with resultType boolean).
        :paramtype return_multistatement_result: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "Script"
        self.script_block_execution_timeout = script_block_execution_timeout
        self.scripts = scripts
        self.log_settings = log_settings
        self.return_multistatement_result = return_multistatement_result


class ScriptActivityParameter(_serialization.Model):
    """Parameters of a script block.

    :ivar name: The name of the parameter. Type: string (or Expression with resultType string).
    :vartype name: JSON
    :ivar type: The type of the parameter. Known values are: "Boolean", "DateTime",
     "DateTimeOffset", "Decimal", "Double", "Guid", "Int16", "Int32", "Int64", "Single", "String",
     and "Timespan".
    :vartype type: str or ~azure.synapse.artifacts.models.ScriptActivityParameterType
    :ivar value: The value of the parameter.
    :vartype value: JSON
    :ivar direction: The direction of the parameter. Known values are: "Input", "Output", and
     "InputOutput".
    :vartype direction: str or ~azure.synapse.artifacts.models.ScriptActivityParameterDirection
    :ivar size: The size of the output direction parameter.
    :vartype size: int
    """

    _attribute_map = {
        "name": {"key": "name", "type": "object"},
        "type": {"key": "type", "type": "str"},
        "value": {"key": "value", "type": "object"},
        "direction": {"key": "direction", "type": "str"},
        "size": {"key": "size", "type": "int"},
    }

    def __init__(
        self,
        *,
        name: Optional[JSON] = None,
        type: Optional[Union[str, "_models.ScriptActivityParameterType"]] = None,
        value: Optional[JSON] = None,
        direction: Optional[Union[str, "_models.ScriptActivityParameterDirection"]] = None,
        size: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name: The name of the parameter. Type: string (or Expression with resultType string).
        :paramtype name: JSON
        :keyword type: The type of the parameter. Known values are: "Boolean", "DateTime",
         "DateTimeOffset", "Decimal", "Double", "Guid", "Int16", "Int32", "Int64", "Single", "String",
         and "Timespan".
        :paramtype type: str or ~azure.synapse.artifacts.models.ScriptActivityParameterType
        :keyword value: The value of the parameter.
        :paramtype value: JSON
        :keyword direction: The direction of the parameter. Known values are: "Input", "Output", and
         "InputOutput".
        :paramtype direction: str or ~azure.synapse.artifacts.models.ScriptActivityParameterDirection
        :keyword size: The size of the output direction parameter.
        :paramtype size: int
        """
        super().__init__(**kwargs)
        self.name = name
        self.type = type
        self.value = value
        self.direction = direction
        self.size = size


class ScriptActivityScriptBlock(_serialization.Model):
    """Script block of scripts.

    All required parameters must be populated in order to send to Azure.

    :ivar text: The query text. Type: string (or Expression with resultType string). Required.
    :vartype text: JSON
    :ivar type: The type of the query. Please refer to the ScriptType for valid options. Type:
     string (or Expression with resultType string). Required.
    :vartype type: JSON
    :ivar parameters: Array of script parameters. Type: array.
    :vartype parameters: list[~azure.synapse.artifacts.models.ScriptActivityParameter]
    """

    _validation = {
        "text": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "text": {"key": "text", "type": "object"},
        "type": {"key": "type", "type": "object"},
        "parameters": {"key": "parameters", "type": "[ScriptActivityParameter]"},
    }

    def __init__(
        self,
        *,
        text: JSON,
        type: JSON,
        parameters: Optional[List["_models.ScriptActivityParameter"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword text: The query text. Type: string (or Expression with resultType string). Required.
        :paramtype text: JSON
        :keyword type: The type of the query. Please refer to the ScriptType for valid options. Type:
         string (or Expression with resultType string). Required.
        :paramtype type: JSON
        :keyword parameters: Array of script parameters. Type: array.
        :paramtype parameters: list[~azure.synapse.artifacts.models.ScriptActivityParameter]
        """
        super().__init__(**kwargs)
        self.text = text
        self.type = type
        self.parameters = parameters


class ScriptActivityTypePropertiesLogSettings(_serialization.Model):
    """Log settings of script activity.

    All required parameters must be populated in order to send to Azure.

    :ivar log_destination: The destination of logs. Type: string. Required. Known values are:
     "ActivityOutput" and "ExternalStore".
    :vartype log_destination: str or ~azure.synapse.artifacts.models.ScriptActivityLogDestination
    :ivar log_location_settings: Log location settings customer needs to provide when enabling log.
    :vartype log_location_settings: ~azure.synapse.artifacts.models.LogLocationSettings
    """

    _validation = {
        "log_destination": {"required": True},
    }

    _attribute_map = {
        "log_destination": {"key": "logDestination", "type": "str"},
        "log_location_settings": {"key": "logLocationSettings", "type": "LogLocationSettings"},
    }

    def __init__(
        self,
        *,
        log_destination: Union[str, "_models.ScriptActivityLogDestination"],
        log_location_settings: Optional["_models.LogLocationSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword log_destination: The destination of logs. Type: string. Required. Known values are:
         "ActivityOutput" and "ExternalStore".
        :paramtype log_destination: str or ~azure.synapse.artifacts.models.ScriptActivityLogDestination
        :keyword log_location_settings: Log location settings customer needs to provide when enabling
         log.
        :paramtype log_location_settings: ~azure.synapse.artifacts.models.LogLocationSettings
        """
        super().__init__(**kwargs)
        self.log_destination = log_destination
        self.log_location_settings = log_location_settings


class SecureInputOutputPolicy(_serialization.Model):
    """Execution policy for an activity that supports secure input and output.

    :ivar secure_input: When set to true, Input from activity is considered as secure and will not
     be logged to monitoring.
    :vartype secure_input: bool
    :ivar secure_output: When set to true, Output from activity is considered as secure and will
     not be logged to monitoring.
    :vartype secure_output: bool
    """

    _attribute_map = {
        "secure_input": {"key": "secureInput", "type": "bool"},
        "secure_output": {"key": "secureOutput", "type": "bool"},
    }

    def __init__(
        self, *, secure_input: Optional[bool] = None, secure_output: Optional[bool] = None, **kwargs: Any
    ) -> None:
        """
        :keyword secure_input: When set to true, Input from activity is considered as secure and will
         not be logged to monitoring.
        :paramtype secure_input: bool
        :keyword secure_output: When set to true, Output from activity is considered as secure and will
         not be logged to monitoring.
        :paramtype secure_output: bool
        """
        super().__init__(**kwargs)
        self.secure_input = secure_input
        self.secure_output = secure_output


class SecureString(SecretBase):
    """Azure Synapse secure string definition. The string value will be masked with asterisks '*'
    during Get or List API calls.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Type of the secret. Required.
    :vartype type: str
    :ivar value: Value of secure string. Required.
    :vartype value: str
    """

    _validation = {
        "type": {"required": True},
        "value": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "value": {"key": "value", "type": "str"},
    }

    def __init__(self, *, value: str, **kwargs: Any) -> None:
        """
        :keyword value: Value of secure string. Required.
        :paramtype value: str
        """
        super().__init__(**kwargs)
        self.type: str = "SecureString"
        self.value = value


class SelfDependencyTumblingWindowTriggerReference(DependencyReference):
    """Self referenced tumbling window trigger dependency.

    All required parameters must be populated in order to send to Azure.

    :ivar type: The type of dependency reference. Required.
    :vartype type: str
    :ivar offset: Timespan applied to the start time of a tumbling window when evaluating
     dependency. Required.
    :vartype offset: str
    :ivar size: The size of the window when evaluating the dependency. If undefined the frequency
     of the tumbling window will be used.
    :vartype size: str
    """

    _validation = {
        "type": {"required": True},
        "offset": {
            "required": True,
            "max_length": 15,
            "min_length": 8,
            "pattern": r"-((\d+)\.)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))",
        },
        "size": {"max_length": 15, "min_length": 8, "pattern": r"((\d+)\.)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))"},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "offset": {"key": "offset", "type": "str"},
        "size": {"key": "size", "type": "str"},
    }

    def __init__(self, *, offset: str, size: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword offset: Timespan applied to the start time of a tumbling window when evaluating
         dependency. Required.
        :paramtype offset: str
        :keyword size: The size of the window when evaluating the dependency. If undefined the
         frequency of the tumbling window will be used.
        :paramtype size: str
        """
        super().__init__(**kwargs)
        self.type: str = "SelfDependencyTumblingWindowTriggerReference"
        self.offset = offset
        self.size = size


class SelfHostedIntegrationRuntime(IntegrationRuntime):
    """Self-hosted integration runtime.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of integration runtime. Required. Known values are: "Managed" and
     "SelfHosted".
    :vartype type: str or ~azure.synapse.artifacts.models.IntegrationRuntimeType
    :ivar description: Integration runtime description.
    :vartype description: str
    :ivar linked_info: Linked integration runtime type from data factory.
    :vartype linked_info: ~azure.synapse.artifacts.models.LinkedIntegrationRuntimeType
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "linked_info": {"key": "typeProperties.linkedInfo", "type": "LinkedIntegrationRuntimeType"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        linked_info: Optional["_models.LinkedIntegrationRuntimeType"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Integration runtime description.
        :paramtype description: str
        :keyword linked_info: Linked integration runtime type from data factory.
        :paramtype linked_info: ~azure.synapse.artifacts.models.LinkedIntegrationRuntimeType
        """
        super().__init__(additional_properties=additional_properties, description=description, **kwargs)
        self.type: str = "SelfHosted"
        self.linked_info = linked_info


class ServiceNowLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """ServiceNow server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the ServiceNow server. (i.e.
     :code:`<instance>`.service-now.com). Required.
    :vartype endpoint: JSON
    :ivar authentication_type: The authentication type to use. Required. Known values are: "Basic"
     and "OAuth2".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.ServiceNowAuthenticationType
    :ivar username: The user name used to connect to the ServiceNow server for Basic and OAuth2
     authentication.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name for Basic and OAuth2
     authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar client_id: The client id for OAuth2 authentication.
    :vartype client_id: JSON
    :ivar client_secret: The client secret for OAuth2 authentication.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        authentication_type: Union[str, "_models.ServiceNowAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the ServiceNow server. (i.e.
         :code:`<instance>`.service-now.com). Required.
        :paramtype endpoint: JSON
        :keyword authentication_type: The authentication type to use. Required. Known values are:
         "Basic" and "OAuth2".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.ServiceNowAuthenticationType
        :keyword username: The user name used to connect to the ServiceNow server for Basic and OAuth2
         authentication.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name for Basic and OAuth2
         authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword client_id: The client id for OAuth2 authentication.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret for OAuth2 authentication.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "ServiceNow"
        self.endpoint = endpoint
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.client_id = client_id
        self.client_secret = client_secret
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class ServiceNowObjectDataset(Dataset):
    """ServiceNow server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ServiceNowObject"
        self.table_name = table_name


class ServiceNowSource(TabularSource):
    """A copy activity ServiceNow server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ServiceNowSource"
        self.query = query


class ServiceNowV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """ServiceNowV2 server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar endpoint: The endpoint of the ServiceNowV2 server. (i.e.
     :code:`<instance>`.service-now.com). Required.
    :vartype endpoint: JSON
    :ivar authentication_type: The authentication type to use. Required. Known values are: "Basic"
     and "OAuth2".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.ServiceNowV2AuthenticationType
    :ivar username: The user name used to connect to the ServiceNowV2 server for Basic and OAuth2
     authentication.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name for Basic and OAuth2
     authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar client_id: The client id for OAuth2 authentication.
    :vartype client_id: JSON
    :ivar client_secret: The client secret for OAuth2 authentication.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar grant_type: GrantType for OAuth2 authentication. Default value is password.
    :vartype grant_type: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "grant_type": {"key": "typeProperties.grantType", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        authentication_type: Union[str, "_models.ServiceNowV2AuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        grant_type: Optional[JSON] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword endpoint: The endpoint of the ServiceNowV2 server. (i.e.
         :code:`<instance>`.service-now.com). Required.
        :paramtype endpoint: JSON
        :keyword authentication_type: The authentication type to use. Required. Known values are:
         "Basic" and "OAuth2".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.ServiceNowV2AuthenticationType
        :keyword username: The user name used to connect to the ServiceNowV2 server for Basic and
         OAuth2 authentication.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name for Basic and OAuth2
         authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword client_id: The client id for OAuth2 authentication.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret for OAuth2 authentication.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword grant_type: GrantType for OAuth2 authentication. Default value is password.
        :paramtype grant_type: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "ServiceNowV2"
        self.endpoint = endpoint
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.client_id = client_id
        self.client_secret = client_secret
        self.grant_type = grant_type
        self.encrypted_credential = encrypted_credential


class ServiceNowV2ObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """ServiceNowV2 server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    :ivar value_type: Type of value copied from source. Known values are: "actual" and "display".
    :vartype value_type: str or ~azure.synapse.artifacts.models.ValueType
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "value_type": {"key": "typeProperties.valueType", "type": "str"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        value_type: Optional[Union[str, "_models.ValueType"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        :keyword value_type: Type of value copied from source. Known values are: "actual" and
         "display".
        :paramtype value_type: str or ~azure.synapse.artifacts.models.ValueType
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ServiceNowV2Object"
        self.table_name = table_name
        self.value_type = value_type


class ServiceNowV2Source(TabularSource):
    """A copy activity ServiceNowV2 server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar expression: Expression to filter data from source.
    :vartype expression: ~azure.synapse.artifacts.models.ExpressionV2
    :ivar page_size: Page size of the result. Type: integer (or Expression with resultType
     integer).
    :vartype page_size: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "expression": {"key": "expression", "type": "ExpressionV2"},
        "page_size": {"key": "pageSize", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        expression: Optional["_models.ExpressionV2"] = None,
        page_size: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword expression: Expression to filter data from source.
        :paramtype expression: ~azure.synapse.artifacts.models.ExpressionV2
        :keyword page_size: Page size of the result. Type: integer (or Expression with resultType
         integer).
        :paramtype page_size: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ServiceNowV2Source"
        self.expression = expression
        self.page_size = page_size


class SetVariableActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """Set value for a Variable.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.SecureInputOutputPolicy
    :ivar variable_name: Name of the variable whose value needs to be set.
    :vartype variable_name: str
    :ivar value: Value to be set. Could be a static value or Expression.
    :vartype value: JSON
    :ivar set_system_variable: If set to true, it sets the pipeline run return value.
    :vartype set_system_variable: bool
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "policy": {"key": "policy", "type": "SecureInputOutputPolicy"},
        "variable_name": {"key": "typeProperties.variableName", "type": "str"},
        "value": {"key": "typeProperties.value", "type": "object"},
        "set_system_variable": {"key": "typeProperties.setSystemVariable", "type": "bool"},
    }

    def __init__(
        self,
        *,
        name: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        policy: Optional["_models.SecureInputOutputPolicy"] = None,
        variable_name: Optional[str] = None,
        value: Optional[JSON] = None,
        set_system_variable: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.SecureInputOutputPolicy
        :keyword variable_name: Name of the variable whose value needs to be set.
        :paramtype variable_name: str
        :keyword value: Value to be set. Could be a static value or Expression.
        :paramtype value: JSON
        :keyword set_system_variable: If set to true, it sets the pipeline run return value.
        :paramtype set_system_variable: bool
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "SetVariable"
        self.policy = policy
        self.variable_name = variable_name
        self.value = value
        self.set_system_variable = set_system_variable


class SftpLocation(DatasetLocation):
    """The location of SFTP dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage location. Required.
    :vartype type: str
    :ivar folder_path: Specify the folder path of dataset. Type: string (or Expression with
     resultType string).
    :vartype folder_path: JSON
    :ivar file_name: Specify the file name of dataset. Type: string (or Expression with resultType
     string).
    :vartype file_name: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "folder_path": {"key": "folderPath", "type": "object"},
        "file_name": {"key": "fileName", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        folder_path: Optional[JSON] = None,
        file_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword folder_path: Specify the folder path of dataset. Type: string (or Expression with
         resultType string).
        :paramtype folder_path: JSON
        :keyword file_name: Specify the file name of dataset. Type: string (or Expression with
         resultType string).
        :paramtype file_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties, folder_path=folder_path, file_name=file_name, **kwargs
        )
        self.type: str = "SftpLocation"


class SftpReadSettings(StoreReadSettings):  # pylint: disable=too-many-instance-attributes
    """Sftp read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar recursive: If true, files under the folder path will be read recursively. Default is
     true. Type: boolean (or Expression with resultType boolean).
    :vartype recursive: JSON
    :ivar wildcard_folder_path: Sftp wildcardFolderPath. Type: string (or Expression with
     resultType string).
    :vartype wildcard_folder_path: JSON
    :ivar wildcard_file_name: Sftp wildcardFileName. Type: string (or Expression with resultType
     string).
    :vartype wildcard_file_name: JSON
    :ivar enable_partition_discovery: Indicates whether to enable partition discovery. Type:
     boolean (or Expression with resultType boolean).
    :vartype enable_partition_discovery: JSON
    :ivar partition_root_path: Specify the root path where partition discovery starts from. Type:
     string (or Expression with resultType string).
    :vartype partition_root_path: JSON
    :ivar file_list_path: Point to a text file that lists each file (relative path to the path
     configured in the dataset) that you want to copy. Type: string (or Expression with resultType
     string).
    :vartype file_list_path: JSON
    :ivar delete_files_after_completion: Indicates whether the source files need to be deleted
     after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
    :vartype delete_files_after_completion: JSON
    :ivar modified_datetime_start: The start of file's modified datetime. Type: string (or
     Expression with resultType string).
    :vartype modified_datetime_start: JSON
    :ivar modified_datetime_end: The end of file's modified datetime. Type: string (or Expression
     with resultType string).
    :vartype modified_datetime_end: JSON
    :ivar disable_chunking: If true, disable parallel reading within each file. Default is false.
     Type: boolean (or Expression with resultType boolean).
    :vartype disable_chunking: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "recursive": {"key": "recursive", "type": "object"},
        "wildcard_folder_path": {"key": "wildcardFolderPath", "type": "object"},
        "wildcard_file_name": {"key": "wildcardFileName", "type": "object"},
        "enable_partition_discovery": {"key": "enablePartitionDiscovery", "type": "object"},
        "partition_root_path": {"key": "partitionRootPath", "type": "object"},
        "file_list_path": {"key": "fileListPath", "type": "object"},
        "delete_files_after_completion": {"key": "deleteFilesAfterCompletion", "type": "object"},
        "modified_datetime_start": {"key": "modifiedDatetimeStart", "type": "object"},
        "modified_datetime_end": {"key": "modifiedDatetimeEnd", "type": "object"},
        "disable_chunking": {"key": "disableChunking", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        recursive: Optional[JSON] = None,
        wildcard_folder_path: Optional[JSON] = None,
        wildcard_file_name: Optional[JSON] = None,
        enable_partition_discovery: Optional[JSON] = None,
        partition_root_path: Optional[JSON] = None,
        file_list_path: Optional[JSON] = None,
        delete_files_after_completion: Optional[JSON] = None,
        modified_datetime_start: Optional[JSON] = None,
        modified_datetime_end: Optional[JSON] = None,
        disable_chunking: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword recursive: If true, files under the folder path will be read recursively. Default is
         true. Type: boolean (or Expression with resultType boolean).
        :paramtype recursive: JSON
        :keyword wildcard_folder_path: Sftp wildcardFolderPath. Type: string (or Expression with
         resultType string).
        :paramtype wildcard_folder_path: JSON
        :keyword wildcard_file_name: Sftp wildcardFileName. Type: string (or Expression with resultType
         string).
        :paramtype wildcard_file_name: JSON
        :keyword enable_partition_discovery: Indicates whether to enable partition discovery. Type:
         boolean (or Expression with resultType boolean).
        :paramtype enable_partition_discovery: JSON
        :keyword partition_root_path: Specify the root path where partition discovery starts from.
         Type: string (or Expression with resultType string).
        :paramtype partition_root_path: JSON
        :keyword file_list_path: Point to a text file that lists each file (relative path to the path
         configured in the dataset) that you want to copy. Type: string (or Expression with resultType
         string).
        :paramtype file_list_path: JSON
        :keyword delete_files_after_completion: Indicates whether the source files need to be deleted
         after copy completion. Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype delete_files_after_completion: JSON
        :keyword modified_datetime_start: The start of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_start: JSON
        :keyword modified_datetime_end: The end of file's modified datetime. Type: string (or
         Expression with resultType string).
        :paramtype modified_datetime_end: JSON
        :keyword disable_chunking: If true, disable parallel reading within each file. Default is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype disable_chunking: JSON
        """
        super().__init__(
            additional_properties=additional_properties, max_concurrent_connections=max_concurrent_connections, **kwargs
        )
        self.type: str = "SftpReadSettings"
        self.recursive = recursive
        self.wildcard_folder_path = wildcard_folder_path
        self.wildcard_file_name = wildcard_file_name
        self.enable_partition_discovery = enable_partition_discovery
        self.partition_root_path = partition_root_path
        self.file_list_path = file_list_path
        self.delete_files_after_completion = delete_files_after_completion
        self.modified_datetime_start = modified_datetime_start
        self.modified_datetime_end = modified_datetime_end
        self.disable_chunking = disable_chunking


class SftpServerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """A linked service for an SSH File Transfer Protocol (SFTP) server.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The SFTP server host name. Type: string (or Expression with resultType string).
     Required.
    :vartype host: JSON
    :ivar port: The TCP port number that the SFTP server uses to listen for client connections.
     Default value is 22. Type: integer (or Expression with resultType integer), minimum: 0.
    :vartype port: JSON
    :ivar authentication_type: The authentication type to be used to connect to the FTP server.
     Known values are: "Basic" and "SshPublicKey".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.SftpAuthenticationType
    :ivar user_name: The username used to log on to the SFTP server. Type: string (or Expression
     with resultType string).
    :vartype user_name: JSON
    :ivar password: Password to logon the SFTP server for Basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar private_key_path: The SSH private key file path for SshPublicKey authentication. Only
     valid for on-premises copy. For on-premises copy with SshPublicKey authentication, either
     PrivateKeyPath or PrivateKeyContent should be specified. SSH private key should be OpenSSH
     format. Type: string (or Expression with resultType string).
    :vartype private_key_path: JSON
    :ivar private_key_content: Base64 encoded SSH private key content for SshPublicKey
     authentication. For on-premises copy with SshPublicKey authentication, either PrivateKeyPath or
     PrivateKeyContent should be specified. SSH private key should be OpenSSH format.
    :vartype private_key_content: ~azure.synapse.artifacts.models.SecretBase
    :ivar pass_phrase: The password to decrypt the SSH private key if the SSH private key is
     encrypted.
    :vartype pass_phrase: ~azure.synapse.artifacts.models.SecretBase
    :ivar skip_host_key_validation: If true, skip the SSH host key validation. Default value is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype skip_host_key_validation: JSON
    :ivar host_key_fingerprint: The host key finger-print of the SFTP server. When
     SkipHostKeyValidation is false, HostKeyFingerprint should be specified. Type: string (or
     Expression with resultType string).
    :vartype host_key_fingerprint: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "private_key_path": {"key": "typeProperties.privateKeyPath", "type": "object"},
        "private_key_content": {"key": "typeProperties.privateKeyContent", "type": "SecretBase"},
        "pass_phrase": {"key": "typeProperties.passPhrase", "type": "SecretBase"},
        "skip_host_key_validation": {"key": "typeProperties.skipHostKeyValidation", "type": "object"},
        "host_key_fingerprint": {"key": "typeProperties.hostKeyFingerprint", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        port: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.SftpAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        private_key_path: Optional[JSON] = None,
        private_key_content: Optional["_models.SecretBase"] = None,
        pass_phrase: Optional["_models.SecretBase"] = None,
        skip_host_key_validation: Optional[JSON] = None,
        host_key_fingerprint: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The SFTP server host name. Type: string (or Expression with resultType string).
         Required.
        :paramtype host: JSON
        :keyword port: The TCP port number that the SFTP server uses to listen for client connections.
         Default value is 22. Type: integer (or Expression with resultType integer), minimum: 0.
        :paramtype port: JSON
        :keyword authentication_type: The authentication type to be used to connect to the FTP server.
         Known values are: "Basic" and "SshPublicKey".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.SftpAuthenticationType
        :keyword user_name: The username used to log on to the SFTP server. Type: string (or Expression
         with resultType string).
        :paramtype user_name: JSON
        :keyword password: Password to logon the SFTP server for Basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword private_key_path: The SSH private key file path for SshPublicKey authentication. Only
         valid for on-premises copy. For on-premises copy with SshPublicKey authentication, either
         PrivateKeyPath or PrivateKeyContent should be specified. SSH private key should be OpenSSH
         format. Type: string (or Expression with resultType string).
        :paramtype private_key_path: JSON
        :keyword private_key_content: Base64 encoded SSH private key content for SshPublicKey
         authentication. For on-premises copy with SshPublicKey authentication, either PrivateKeyPath or
         PrivateKeyContent should be specified. SSH private key should be OpenSSH format.
        :paramtype private_key_content: ~azure.synapse.artifacts.models.SecretBase
        :keyword pass_phrase: The password to decrypt the SSH private key if the SSH private key is
         encrypted.
        :paramtype pass_phrase: ~azure.synapse.artifacts.models.SecretBase
        :keyword skip_host_key_validation: If true, skip the SSH host key validation. Default value is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype skip_host_key_validation: JSON
        :keyword host_key_fingerprint: The host key finger-print of the SFTP server. When
         SkipHostKeyValidation is false, HostKeyFingerprint should be specified. Type: string (or
         Expression with resultType string).
        :paramtype host_key_fingerprint: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Sftp"
        self.host = host
        self.port = port
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.private_key_path = private_key_path
        self.private_key_content = private_key_content
        self.pass_phrase = pass_phrase
        self.skip_host_key_validation = skip_host_key_validation
        self.host_key_fingerprint = host_key_fingerprint


class SftpWriteSettings(StoreWriteSettings):
    """Sftp write settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The write setting type. Required.
    :vartype type: str
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar copy_behavior: The type of copy behavior for copy sink.
    :vartype copy_behavior: JSON
    :ivar metadata: Specify the custom metadata to be added to sink data. Type: array of objects
     (or Expression with resultType array of objects).
    :vartype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
    :ivar operation_timeout: Specifies the timeout for writing each chunk to SFTP server. Default
     value: 01:00:00 (one hour). Type: string (or Expression with resultType string).
    :vartype operation_timeout: JSON
    :ivar use_temp_file_rename: Upload to temporary file(s) and rename. Disable this option if your
     SFTP server doesn't support rename operation. Type: boolean (or Expression with resultType
     boolean).
    :vartype use_temp_file_rename: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "copy_behavior": {"key": "copyBehavior", "type": "object"},
        "metadata": {"key": "metadata", "type": "[MetadataItem]"},
        "operation_timeout": {"key": "operationTimeout", "type": "object"},
        "use_temp_file_rename": {"key": "useTempFileRename", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        max_concurrent_connections: Optional[JSON] = None,
        copy_behavior: Optional[JSON] = None,
        metadata: Optional[List["_models.MetadataItem"]] = None,
        operation_timeout: Optional[JSON] = None,
        use_temp_file_rename: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword copy_behavior: The type of copy behavior for copy sink.
        :paramtype copy_behavior: JSON
        :keyword metadata: Specify the custom metadata to be added to sink data. Type: array of objects
         (or Expression with resultType array of objects).
        :paramtype metadata: list[~azure.synapse.artifacts.models.MetadataItem]
        :keyword operation_timeout: Specifies the timeout for writing each chunk to SFTP server.
         Default value: 01:00:00 (one hour). Type: string (or Expression with resultType string).
        :paramtype operation_timeout: JSON
        :keyword use_temp_file_rename: Upload to temporary file(s) and rename. Disable this option if
         your SFTP server doesn't support rename operation. Type: boolean (or Expression with resultType
         boolean).
        :paramtype use_temp_file_rename: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            max_concurrent_connections=max_concurrent_connections,
            copy_behavior=copy_behavior,
            metadata=metadata,
            **kwargs
        )
        self.type: str = "SftpWriteSettings"
        self.operation_timeout = operation_timeout
        self.use_temp_file_rename = use_temp_file_rename


class SharePointOnlineListLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SharePoint Online List linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar site_url: The URL of the SharePoint Online site. For example,
     https://contoso.sharepoint.com/sites/siteName. Type: string (or Expression with resultType
     string). Required.
    :vartype site_url: JSON
    :ivar tenant_id: The tenant ID under which your application resides. You can find it from Azure
     portal Active Directory overview page. Type: string (or Expression with resultType string).
     Required.
    :vartype tenant_id: JSON
    :ivar service_principal_id: The application (client) ID of your application registered in Azure
     Active Directory. Make sure to grant SharePoint site permission to this application. Type:
     string (or Expression with resultType string). Required.
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The client secret of your application registered in Azure Active
     Directory. Type: string (or Expression with resultType string).
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_embedded_cert: Specify the base64 encoded certificate of your
     application registered in Azure Active Directory. Type: string (or Expression with resultType
     string).
    :vartype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
    :ivar service_principal_embedded_cert_password: Specify the password of your certificate if
     your certificate has a password and you are using AadServicePrincipal authentication. Type:
     string (or Expression with resultType string).
    :vartype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "site_url": {"required": True},
        "tenant_id": {"required": True},
        "service_principal_id": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "site_url": {"key": "typeProperties.siteUrl", "type": "object"},
        "tenant_id": {"key": "typeProperties.tenantId", "type": "object"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_embedded_cert": {"key": "typeProperties.servicePrincipalEmbeddedCert", "type": "SecretBase"},
        "service_principal_embedded_cert_password": {
            "key": "typeProperties.servicePrincipalEmbeddedCertPassword",
            "type": "SecretBase",
        },
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        site_url: JSON,
        tenant_id: JSON,
        service_principal_id: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_embedded_cert: Optional["_models.SecretBase"] = None,
        service_principal_embedded_cert_password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword site_url: The URL of the SharePoint Online site. For example,
         https://contoso.sharepoint.com/sites/siteName. Type: string (or Expression with resultType
         string). Required.
        :paramtype site_url: JSON
        :keyword tenant_id: The tenant ID under which your application resides. You can find it from
         Azure portal Active Directory overview page. Type: string (or Expression with resultType
         string). Required.
        :paramtype tenant_id: JSON
        :keyword service_principal_id: The application (client) ID of your application registered in
         Azure Active Directory. Make sure to grant SharePoint site permission to this application.
         Type: string (or Expression with resultType string). Required.
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The client secret of your application registered in Azure
         Active Directory. Type: string (or Expression with resultType string).
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_embedded_cert: Specify the base64 encoded certificate of your
         application registered in Azure Active Directory. Type: string (or Expression with resultType
         string).
        :paramtype service_principal_embedded_cert: ~azure.synapse.artifacts.models.SecretBase
        :keyword service_principal_embedded_cert_password: Specify the password of your certificate if
         your certificate has a password and you are using AadServicePrincipal authentication. Type:
         string (or Expression with resultType string).
        :paramtype service_principal_embedded_cert_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SharePointOnlineList"
        self.site_url = site_url
        self.tenant_id = tenant_id
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_embedded_cert = service_principal_embedded_cert
        self.service_principal_embedded_cert_password = service_principal_embedded_cert_password
        self.encrypted_credential = encrypted_credential


class SharePointOnlineListResourceDataset(Dataset):
    """The sharepoint online list resource dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar list_name: The name of the SharePoint Online list. Type: string (or Expression with
     resultType string).
    :vartype list_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "list_name": {"key": "typeProperties.listName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        list_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword list_name: The name of the SharePoint Online list. Type: string (or Expression with
         resultType string).
        :paramtype list_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SharePointOnlineListResource"
        self.list_name = list_name


class SharePointOnlineListSource(CopySource):
    """A copy activity source for sharePoint online list source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: The OData query to filter the data in SharePoint Online list. For example,
     "$top=1". Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar http_request_timeout: The wait time to get a response from SharePoint Online. Default
     value is 5 minutes (00:05:00). Type: string (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype http_request_timeout: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "http_request_timeout": {"key": "httpRequestTimeout", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        http_request_timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: The OData query to filter the data in SharePoint Online list. For example,
         "$top=1". Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword http_request_timeout: The wait time to get a response from SharePoint Online. Default
         value is 5 minutes (00:05:00). Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype http_request_timeout: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SharePointOnlineListSource"
        self.query = query
        self.http_request_timeout = http_request_timeout


class ShopifyLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Shopify Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: The endpoint of the Shopify server. (i.e. mystore.myshopify.com). Required.
    :vartype host: JSON
    :ivar access_token: The API access token that can be used to access Shopify’s data. The token
     won't expire if it is offline mode.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        access_token: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: The endpoint of the Shopify server. (i.e. mystore.myshopify.com). Required.
        :paramtype host: JSON
        :keyword access_token: The API access token that can be used to access Shopify’s data. The
         token won't expire if it is offline mode.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Shopify"
        self.host = host
        self.access_token = access_token
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class ShopifyObjectDataset(Dataset):
    """Shopify Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ShopifyObject"
        self.table_name = table_name


class ShopifySource(TabularSource):
    """A copy activity Shopify Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ShopifySource"
        self.query = query


class SkipErrorFile(_serialization.Model):
    """Skip error file.

    :ivar file_missing: Skip if file is deleted by other client during copy. Default is true. Type:
     boolean (or Expression with resultType boolean).
    :vartype file_missing: JSON
    :ivar data_inconsistency: Skip if source/sink file changed by other concurrent write. Default
     is false. Type: boolean (or Expression with resultType boolean).
    :vartype data_inconsistency: JSON
    """

    _attribute_map = {
        "file_missing": {"key": "fileMissing", "type": "object"},
        "data_inconsistency": {"key": "dataInconsistency", "type": "object"},
    }

    def __init__(
        self, *, file_missing: Optional[JSON] = None, data_inconsistency: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword file_missing: Skip if file is deleted by other client during copy. Default is true.
         Type: boolean (or Expression with resultType boolean).
        :paramtype file_missing: JSON
        :keyword data_inconsistency: Skip if source/sink file changed by other concurrent write.
         Default is false. Type: boolean (or Expression with resultType boolean).
        :paramtype data_inconsistency: JSON
        """
        super().__init__(**kwargs)
        self.file_missing = file_missing
        self.data_inconsistency = data_inconsistency


class Sku(_serialization.Model):
    """SQL pool SKU.

    :ivar tier: The service tier.
    :vartype tier: str
    :ivar name: The SKU name.
    :vartype name: str
    :ivar capacity: If the SKU supports scale out/in then the capacity integer should be included.
     If scale out/in is not possible for the resource this may be omitted.
    :vartype capacity: int
    """

    _attribute_map = {
        "tier": {"key": "tier", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "capacity": {"key": "capacity", "type": "int"},
    }

    def __init__(
        self, *, tier: Optional[str] = None, name: Optional[str] = None, capacity: Optional[int] = None, **kwargs: Any
    ) -> None:
        """
        :keyword tier: The service tier.
        :paramtype tier: str
        :keyword name: The SKU name.
        :paramtype name: str
        :keyword capacity: If the SKU supports scale out/in then the capacity integer should be
         included. If scale out/in is not possible for the resource this may be omitted.
        :paramtype capacity: int
        """
        super().__init__(**kwargs)
        self.tier = tier
        self.name = name
        self.capacity = capacity


class SmartsheetLinkedService(LinkedService):
    """Linked service for Smartsheet.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar api_token: The api token for the Smartsheet source. Required.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "api_token": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        api_token: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword api_token: The api token for the Smartsheet source. Required.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Smartsheet"
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class SnowflakeDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The snowflake dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of the Snowflake database. Type: string
     (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Snowflake database. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of the Snowflake database. Type: string
         (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Snowflake database. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SnowflakeTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class SnowflakeExportCopyCommand(ExportSettings):
    """Snowflake export command settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The export setting type. Required.
    :vartype type: str
    :ivar additional_copy_options: Additional copy options directly passed to snowflake Copy
     Command. Type: key value pairs (value should be string type) (or Expression with resultType
     object). Example: "additionalCopyOptions": { "DATE_FORMAT": "MM/DD/YYYY", "TIME_FORMAT":
     "'HH24:MI:SS.FF'" }.
    :vartype additional_copy_options: dict[str, JSON]
    :ivar additional_format_options: Additional format options directly passed to snowflake Copy
     Command. Type: key value pairs (value should be string type) (or Expression with resultType
     object). Example: "additionalFormatOptions": { "OVERWRITE": "TRUE", "MAX_FILE_SIZE": "'FALSE'"
     }.
    :vartype additional_format_options: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "additional_copy_options": {"key": "additionalCopyOptions", "type": "{object}"},
        "additional_format_options": {"key": "additionalFormatOptions", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        additional_copy_options: Optional[Dict[str, JSON]] = None,
        additional_format_options: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword additional_copy_options: Additional copy options directly passed to snowflake Copy
         Command. Type: key value pairs (value should be string type) (or Expression with resultType
         object). Example: "additionalCopyOptions": { "DATE_FORMAT": "MM/DD/YYYY", "TIME_FORMAT":
         "'HH24:MI:SS.FF'" }.
        :paramtype additional_copy_options: dict[str, JSON]
        :keyword additional_format_options: Additional format options directly passed to snowflake Copy
         Command. Type: key value pairs (value should be string type) (or Expression with resultType
         object). Example: "additionalFormatOptions": { "OVERWRITE": "TRUE", "MAX_FILE_SIZE": "'FALSE'"
         }.
        :paramtype additional_format_options: dict[str, JSON]
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "SnowflakeExportCopyCommand"
        self.additional_copy_options = additional_copy_options
        self.additional_format_options = additional_format_options


class SnowflakeImportCopyCommand(ImportSettings):
    """Snowflake import command settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The import setting type. Required.
    :vartype type: str
    :ivar additional_copy_options: Additional copy options directly passed to snowflake Copy
     Command. Type: key value pairs (value should be string type) (or Expression with resultType
     object). Example: "additionalCopyOptions": { "DATE_FORMAT": "MM/DD/YYYY", "TIME_FORMAT":
     "'HH24:MI:SS.FF'" }.
    :vartype additional_copy_options: dict[str, JSON]
    :ivar additional_format_options: Additional format options directly passed to snowflake Copy
     Command. Type: key value pairs (value should be string type) (or Expression with resultType
     object). Example: "additionalFormatOptions": { "FORCE": "TRUE", "LOAD_UNCERTAIN_FILES":
     "'FALSE'" }.
    :vartype additional_format_options: dict[str, JSON]
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "additional_copy_options": {"key": "additionalCopyOptions", "type": "{object}"},
        "additional_format_options": {"key": "additionalFormatOptions", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        additional_copy_options: Optional[Dict[str, JSON]] = None,
        additional_format_options: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword additional_copy_options: Additional copy options directly passed to snowflake Copy
         Command. Type: key value pairs (value should be string type) (or Expression with resultType
         object). Example: "additionalCopyOptions": { "DATE_FORMAT": "MM/DD/YYYY", "TIME_FORMAT":
         "'HH24:MI:SS.FF'" }.
        :paramtype additional_copy_options: dict[str, JSON]
        :keyword additional_format_options: Additional format options directly passed to snowflake Copy
         Command. Type: key value pairs (value should be string type) (or Expression with resultType
         object). Example: "additionalFormatOptions": { "FORCE": "TRUE", "LOAD_UNCERTAIN_FILES":
         "'FALSE'" }.
        :paramtype additional_format_options: dict[str, JSON]
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "SnowflakeImportCopyCommand"
        self.additional_copy_options = additional_copy_options
        self.additional_format_options = additional_format_options


class SnowflakeLinkedService(LinkedService):
    """Snowflake linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: The connection string of snowflake. Type: string, SecureString.
     Required.
    :vartype connection_string: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "connection_string": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        connection_string: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        password: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: The connection string of snowflake. Type: string, SecureString.
         Required.
        :paramtype connection_string: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Snowflake"
        self.connection_string = connection_string
        self.password = password
        self.encrypted_credential = encrypted_credential


class SnowflakeSink(CopySink):
    """A copy activity snowflake sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar import_settings: Snowflake import settings.
    :vartype import_settings: ~azure.synapse.artifacts.models.SnowflakeImportCopyCommand
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "import_settings": {"key": "importSettings", "type": "SnowflakeImportCopyCommand"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        import_settings: Optional["_models.SnowflakeImportCopyCommand"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword import_settings: Snowflake import settings.
        :paramtype import_settings: ~azure.synapse.artifacts.models.SnowflakeImportCopyCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SnowflakeSink"
        self.pre_copy_script = pre_copy_script
        self.import_settings = import_settings


class SnowflakeSource(CopySource):
    """A copy activity snowflake source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Snowflake Sql query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar export_settings: Snowflake export settings. Required.
    :vartype export_settings: ~azure.synapse.artifacts.models.SnowflakeExportCopyCommand
    """

    _validation = {
        "type": {"required": True},
        "export_settings": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "export_settings": {"key": "exportSettings", "type": "SnowflakeExportCopyCommand"},
    }

    def __init__(
        self,
        *,
        export_settings: "_models.SnowflakeExportCopyCommand",
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Snowflake Sql query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword export_settings: Snowflake export settings. Required.
        :paramtype export_settings: ~azure.synapse.artifacts.models.SnowflakeExportCopyCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SnowflakeSource"
        self.query = query
        self.export_settings = export_settings


class SnowflakeV2Dataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The snowflake dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of the Snowflake database. Type: string
     (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Snowflake database. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of the Snowflake database. Type: string
         (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Snowflake database. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SnowflakeV2Table"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class SnowflakeV2LinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Snowflake linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar account_identifier: The account identifier of your Snowflake account, e.g.
     xy12345.east-us-2.azure. Required.
    :vartype account_identifier: JSON
    :ivar user: The name of the Snowflake user.
    :vartype user: JSON
    :ivar password: The Azure key vault secret reference of password in connection string.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar database: The name of the Snowflake database. Required.
    :vartype database: JSON
    :ivar warehouse: The name of the Snowflake warehouse. Required.
    :vartype warehouse: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "Basic", "KeyPair", and "AADServicePrincipal".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.SnowflakeAuthenticationType
    :ivar client_id: The client ID of the application registered in Azure Active Directory for
     AADServicePrincipal authentication.
    :vartype client_id: JSON
    :ivar client_secret: The Azure key vault secret reference of client secret for
     AADServicePrincipal authentication.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant_id: The tenant ID of the application registered in Azure Active Directory for
     AADServicePrincipal authentication.
    :vartype tenant_id: JSON
    :ivar scope: The scope of the application registered in Azure Active Directory for
     AADServicePrincipal authentication.
    :vartype scope: JSON
    :ivar role: The default access control role to use in the Snowflake session. Type: string (or
     Expression with resultType string).
    :vartype role: JSON
    :ivar host: The host name of the Snowflake account. Type: string (or Expression with resultType
     string).
    :vartype host: JSON
    :ivar schema: Schema name for connection. Type: string (or Expression with resultType string).
    :vartype schema: JSON
    :ivar private_key: The Azure key vault secret reference of privateKey for KeyPair auth.
    :vartype private_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar private_key_passphrase: The Azure key vault secret reference of private key password for
     KeyPair auth with encrypted private key.
    :vartype private_key_passphrase: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    """

    _validation = {
        "type": {"required": True},
        "account_identifier": {"required": True},
        "database": {"required": True},
        "warehouse": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "account_identifier": {"key": "typeProperties.accountIdentifier", "type": "object"},
        "user": {"key": "typeProperties.user", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "warehouse": {"key": "typeProperties.warehouse", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "tenant_id": {"key": "typeProperties.tenantId", "type": "object"},
        "scope": {"key": "typeProperties.scope", "type": "object"},
        "role": {"key": "typeProperties.role", "type": "object"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "schema": {"key": "typeProperties.schema", "type": "object"},
        "private_key": {"key": "typeProperties.privateKey", "type": "SecretBase"},
        "private_key_passphrase": {"key": "typeProperties.privateKeyPassphrase", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
    }

    def __init__(
        self,
        *,
        account_identifier: JSON,
        database: JSON,
        warehouse: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        authentication_type: Union[str, "_models.SnowflakeAuthenticationType"] = "Basic",
        client_id: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        tenant_id: Optional[JSON] = None,
        scope: Optional[JSON] = None,
        role: Optional[JSON] = None,
        host: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        private_key: Optional["_models.SecretBase"] = None,
        private_key_passphrase: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword account_identifier: The account identifier of your Snowflake account, e.g.
         xy12345.east-us-2.azure. Required.
        :paramtype account_identifier: JSON
        :keyword user: The name of the Snowflake user.
        :paramtype user: JSON
        :keyword password: The Azure key vault secret reference of password in connection string.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword database: The name of the Snowflake database. Required.
        :paramtype database: JSON
        :keyword warehouse: The name of the Snowflake warehouse. Required.
        :paramtype warehouse: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "Basic", "KeyPair", and "AADServicePrincipal".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.SnowflakeAuthenticationType
        :keyword client_id: The client ID of the application registered in Azure Active Directory for
         AADServicePrincipal authentication.
        :paramtype client_id: JSON
        :keyword client_secret: The Azure key vault secret reference of client secret for
         AADServicePrincipal authentication.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant_id: The tenant ID of the application registered in Azure Active Directory for
         AADServicePrincipal authentication.
        :paramtype tenant_id: JSON
        :keyword scope: The scope of the application registered in Azure Active Directory for
         AADServicePrincipal authentication.
        :paramtype scope: JSON
        :keyword role: The default access control role to use in the Snowflake session. Type: string
         (or Expression with resultType string).
        :paramtype role: JSON
        :keyword host: The host name of the Snowflake account. Type: string (or Expression with
         resultType string).
        :paramtype host: JSON
        :keyword schema: Schema name for connection. Type: string (or Expression with resultType
         string).
        :paramtype schema: JSON
        :keyword private_key: The Azure key vault secret reference of privateKey for KeyPair auth.
        :paramtype private_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword private_key_passphrase: The Azure key vault secret reference of private key password
         for KeyPair auth with encrypted private key.
        :paramtype private_key_passphrase: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SnowflakeV2"
        self.account_identifier = account_identifier
        self.user = user
        self.password = password
        self.database = database
        self.warehouse = warehouse
        self.authentication_type = authentication_type
        self.client_id = client_id
        self.client_secret = client_secret
        self.tenant_id = tenant_id
        self.scope = scope
        self.role = role
        self.host = host
        self.schema = schema
        self.private_key = private_key
        self.private_key_passphrase = private_key_passphrase
        self.encrypted_credential = encrypted_credential


class SnowflakeV2Sink(CopySink):
    """A copy activity snowflake sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar import_settings: Snowflake import settings.
    :vartype import_settings: ~azure.synapse.artifacts.models.SnowflakeImportCopyCommand
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "import_settings": {"key": "importSettings", "type": "SnowflakeImportCopyCommand"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        import_settings: Optional["_models.SnowflakeImportCopyCommand"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword import_settings: Snowflake import settings.
        :paramtype import_settings: ~azure.synapse.artifacts.models.SnowflakeImportCopyCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SnowflakeV2Sink"
        self.pre_copy_script = pre_copy_script
        self.import_settings = import_settings


class SnowflakeV2Source(CopySource):
    """A copy activity snowflake source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query: Snowflake Sql query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar export_settings: Snowflake export settings. Required.
    :vartype export_settings: ~azure.synapse.artifacts.models.SnowflakeExportCopyCommand
    """

    _validation = {
        "type": {"required": True},
        "export_settings": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "export_settings": {"key": "exportSettings", "type": "SnowflakeExportCopyCommand"},
    }

    def __init__(
        self,
        *,
        export_settings: "_models.SnowflakeExportCopyCommand",
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query: Snowflake Sql query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword export_settings: Snowflake export settings. Required.
        :paramtype export_settings: ~azure.synapse.artifacts.models.SnowflakeExportCopyCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SnowflakeV2Source"
        self.query = query
        self.export_settings = export_settings


class SparkBatchJob(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """SparkBatchJob.

    All required parameters must be populated in order to send to Azure.

    :ivar livy_info:
    :vartype livy_info: ~azure.synapse.artifacts.models.SparkBatchJobState
    :ivar name: The batch name.
    :vartype name: str
    :ivar workspace_name: The workspace name.
    :vartype workspace_name: str
    :ivar spark_pool_name: The Spark pool name.
    :vartype spark_pool_name: str
    :ivar submitter_name: The submitter name.
    :vartype submitter_name: str
    :ivar submitter_id: The submitter identifier.
    :vartype submitter_id: str
    :ivar artifact_id: The artifact identifier.
    :vartype artifact_id: str
    :ivar job_type: The job type. Known values are: "SparkBatch" and "SparkSession".
    :vartype job_type: str or ~azure.synapse.artifacts.models.SparkJobType
    :ivar result: The Spark batch job result. Known values are: "Uncertain", "Succeeded", "Failed",
     and "Cancelled".
    :vartype result: str or ~azure.synapse.artifacts.models.SparkBatchJobResultType
    :ivar scheduler: The scheduler information.
    :vartype scheduler: ~azure.synapse.artifacts.models.SparkScheduler
    :ivar plugin: The plugin information.
    :vartype plugin: ~azure.synapse.artifacts.models.SparkServicePlugin
    :ivar errors: The error information.
    :vartype errors: list[~azure.synapse.artifacts.models.SparkServiceError]
    :ivar tags: The tags.
    :vartype tags: dict[str, str]
    :ivar id: The session Id. Required.
    :vartype id: int
    :ivar app_id: The application id of this session.
    :vartype app_id: str
    :ivar app_info: The detailed application info.
    :vartype app_info: dict[str, str]
    :ivar state: The batch state. Known values are: "not_started", "starting", "idle", "busy",
     "shutting_down", "error", "dead", "killed", "success", "running", and "recovering".
    :vartype state: str or ~azure.synapse.artifacts.models.LivyStates
    :ivar log_lines: The log lines.
    :vartype log_lines: list[str]
    """

    _validation = {
        "id": {"required": True},
    }

    _attribute_map = {
        "livy_info": {"key": "livyInfo", "type": "SparkBatchJobState"},
        "name": {"key": "name", "type": "str"},
        "workspace_name": {"key": "workspaceName", "type": "str"},
        "spark_pool_name": {"key": "sparkPoolName", "type": "str"},
        "submitter_name": {"key": "submitterName", "type": "str"},
        "submitter_id": {"key": "submitterId", "type": "str"},
        "artifact_id": {"key": "artifactId", "type": "str"},
        "job_type": {"key": "jobType", "type": "str"},
        "result": {"key": "result", "type": "str"},
        "scheduler": {"key": "schedulerInfo", "type": "SparkScheduler"},
        "plugin": {"key": "pluginInfo", "type": "SparkServicePlugin"},
        "errors": {"key": "errorInfo", "type": "[SparkServiceError]"},
        "tags": {"key": "tags", "type": "{str}"},
        "id": {"key": "id", "type": "int"},
        "app_id": {"key": "appId", "type": "str"},
        "app_info": {"key": "appInfo", "type": "{str}"},
        "state": {"key": "state", "type": "str"},
        "log_lines": {"key": "log", "type": "[str]"},
    }

    def __init__(
        self,
        *,
        id: int,  # pylint: disable=redefined-builtin
        livy_info: Optional["_models.SparkBatchJobState"] = None,
        name: Optional[str] = None,
        workspace_name: Optional[str] = None,
        spark_pool_name: Optional[str] = None,
        submitter_name: Optional[str] = None,
        submitter_id: Optional[str] = None,
        artifact_id: Optional[str] = None,
        job_type: Optional[Union[str, "_models.SparkJobType"]] = None,
        result: Optional[Union[str, "_models.SparkBatchJobResultType"]] = None,
        scheduler: Optional["_models.SparkScheduler"] = None,
        plugin: Optional["_models.SparkServicePlugin"] = None,
        errors: Optional[List["_models.SparkServiceError"]] = None,
        tags: Optional[Dict[str, str]] = None,
        app_id: Optional[str] = None,
        app_info: Optional[Dict[str, str]] = None,
        state: Optional[Union[str, "_models.LivyStates"]] = None,
        log_lines: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword livy_info:
        :paramtype livy_info: ~azure.synapse.artifacts.models.SparkBatchJobState
        :keyword name: The batch name.
        :paramtype name: str
        :keyword workspace_name: The workspace name.
        :paramtype workspace_name: str
        :keyword spark_pool_name: The Spark pool name.
        :paramtype spark_pool_name: str
        :keyword submitter_name: The submitter name.
        :paramtype submitter_name: str
        :keyword submitter_id: The submitter identifier.
        :paramtype submitter_id: str
        :keyword artifact_id: The artifact identifier.
        :paramtype artifact_id: str
        :keyword job_type: The job type. Known values are: "SparkBatch" and "SparkSession".
        :paramtype job_type: str or ~azure.synapse.artifacts.models.SparkJobType
        :keyword result: The Spark batch job result. Known values are: "Uncertain", "Succeeded",
         "Failed", and "Cancelled".
        :paramtype result: str or ~azure.synapse.artifacts.models.SparkBatchJobResultType
        :keyword scheduler: The scheduler information.
        :paramtype scheduler: ~azure.synapse.artifacts.models.SparkScheduler
        :keyword plugin: The plugin information.
        :paramtype plugin: ~azure.synapse.artifacts.models.SparkServicePlugin
        :keyword errors: The error information.
        :paramtype errors: list[~azure.synapse.artifacts.models.SparkServiceError]
        :keyword tags: The tags.
        :paramtype tags: dict[str, str]
        :keyword id: The session Id. Required.
        :paramtype id: int
        :keyword app_id: The application id of this session.
        :paramtype app_id: str
        :keyword app_info: The detailed application info.
        :paramtype app_info: dict[str, str]
        :keyword state: The batch state. Known values are: "not_started", "starting", "idle", "busy",
         "shutting_down", "error", "dead", "killed", "success", "running", and "recovering".
        :paramtype state: str or ~azure.synapse.artifacts.models.LivyStates
        :keyword log_lines: The log lines.
        :paramtype log_lines: list[str]
        """
        super().__init__(**kwargs)
        self.livy_info = livy_info
        self.name = name
        self.workspace_name = workspace_name
        self.spark_pool_name = spark_pool_name
        self.submitter_name = submitter_name
        self.submitter_id = submitter_id
        self.artifact_id = artifact_id
        self.job_type = job_type
        self.result = result
        self.scheduler = scheduler
        self.plugin = plugin
        self.errors = errors
        self.tags = tags
        self.id = id
        self.app_id = app_id
        self.app_info = app_info
        self.state = state
        self.log_lines = log_lines


class SparkBatchJobState(_serialization.Model):
    """SparkBatchJobState.

    :ivar not_started_at: the time that at which "not_started" livy state was first seen.
    :vartype not_started_at: ~datetime.datetime
    :ivar starting_at: the time that at which "starting" livy state was first seen.
    :vartype starting_at: ~datetime.datetime
    :ivar running_at: the time that at which "running" livy state was first seen.
    :vartype running_at: ~datetime.datetime
    :ivar dead_at: time that at which "dead" livy state was first seen.
    :vartype dead_at: ~datetime.datetime
    :ivar success_at: the time that at which "success" livy state was first seen.
    :vartype success_at: ~datetime.datetime
    :ivar terminated_at: the time that at which "killed" livy state was first seen.
    :vartype terminated_at: ~datetime.datetime
    :ivar recovering_at: the time that at which "recovering" livy state was first seen.
    :vartype recovering_at: ~datetime.datetime
    :ivar current_state: the Spark job state.
    :vartype current_state: str
    :ivar job_creation_request:
    :vartype job_creation_request: ~azure.synapse.artifacts.models.SparkRequest
    """

    _attribute_map = {
        "not_started_at": {"key": "notStartedAt", "type": "iso-8601"},
        "starting_at": {"key": "startingAt", "type": "iso-8601"},
        "running_at": {"key": "runningAt", "type": "iso-8601"},
        "dead_at": {"key": "deadAt", "type": "iso-8601"},
        "success_at": {"key": "successAt", "type": "iso-8601"},
        "terminated_at": {"key": "killedAt", "type": "iso-8601"},
        "recovering_at": {"key": "recoveringAt", "type": "iso-8601"},
        "current_state": {"key": "currentState", "type": "str"},
        "job_creation_request": {"key": "jobCreationRequest", "type": "SparkRequest"},
    }

    def __init__(
        self,
        *,
        not_started_at: Optional[datetime.datetime] = None,
        starting_at: Optional[datetime.datetime] = None,
        running_at: Optional[datetime.datetime] = None,
        dead_at: Optional[datetime.datetime] = None,
        success_at: Optional[datetime.datetime] = None,
        terminated_at: Optional[datetime.datetime] = None,
        recovering_at: Optional[datetime.datetime] = None,
        current_state: Optional[str] = None,
        job_creation_request: Optional["_models.SparkRequest"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword not_started_at: the time that at which "not_started" livy state was first seen.
        :paramtype not_started_at: ~datetime.datetime
        :keyword starting_at: the time that at which "starting" livy state was first seen.
        :paramtype starting_at: ~datetime.datetime
        :keyword running_at: the time that at which "running" livy state was first seen.
        :paramtype running_at: ~datetime.datetime
        :keyword dead_at: time that at which "dead" livy state was first seen.
        :paramtype dead_at: ~datetime.datetime
        :keyword success_at: the time that at which "success" livy state was first seen.
        :paramtype success_at: ~datetime.datetime
        :keyword terminated_at: the time that at which "killed" livy state was first seen.
        :paramtype terminated_at: ~datetime.datetime
        :keyword recovering_at: the time that at which "recovering" livy state was first seen.
        :paramtype recovering_at: ~datetime.datetime
        :keyword current_state: the Spark job state.
        :paramtype current_state: str
        :keyword job_creation_request:
        :paramtype job_creation_request: ~azure.synapse.artifacts.models.SparkRequest
        """
        super().__init__(**kwargs)
        self.not_started_at = not_started_at
        self.starting_at = starting_at
        self.running_at = running_at
        self.dead_at = dead_at
        self.success_at = success_at
        self.terminated_at = terminated_at
        self.recovering_at = recovering_at
        self.current_state = current_state
        self.job_creation_request = job_creation_request


class SparkConfiguration(_serialization.Model):
    """SparkConfiguration Artifact information.

    All required parameters must be populated in order to send to Azure.

    :ivar description: Description about the SparkConfiguration.
    :vartype description: str
    :ivar configs: SparkConfiguration configs. Required.
    :vartype configs: dict[str, str]
    :ivar annotations: Annotations for SparkConfiguration.
    :vartype annotations: list[str]
    :ivar notes: additional Notes.
    :vartype notes: str
    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created: The timestamp of resource creation.
    :vartype created: ~datetime.datetime
    :ivar config_merge_rule: SparkConfiguration configMergeRule.
    :vartype config_merge_rule: dict[str, str]
    """

    _validation = {
        "configs": {"required": True},
    }

    _attribute_map = {
        "description": {"key": "description", "type": "str"},
        "configs": {"key": "configs", "type": "{str}"},
        "annotations": {"key": "annotations", "type": "[str]"},
        "notes": {"key": "notes", "type": "str"},
        "created_by": {"key": "createdBy", "type": "str"},
        "created": {"key": "created", "type": "iso-8601"},
        "config_merge_rule": {"key": "configMergeRule", "type": "{str}"},
    }

    def __init__(
        self,
        *,
        configs: Dict[str, str],
        description: Optional[str] = None,
        annotations: Optional[List[str]] = None,
        notes: Optional[str] = None,
        created_by: Optional[str] = None,
        created: Optional[datetime.datetime] = None,
        config_merge_rule: Optional[Dict[str, str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword description: Description about the SparkConfiguration.
        :paramtype description: str
        :keyword configs: SparkConfiguration configs. Required.
        :paramtype configs: dict[str, str]
        :keyword annotations: Annotations for SparkConfiguration.
        :paramtype annotations: list[str]
        :keyword notes: additional Notes.
        :paramtype notes: str
        :keyword created_by: The identity that created the resource.
        :paramtype created_by: str
        :keyword created: The timestamp of resource creation.
        :paramtype created: ~datetime.datetime
        :keyword config_merge_rule: SparkConfiguration configMergeRule.
        :paramtype config_merge_rule: dict[str, str]
        """
        super().__init__(**kwargs)
        self.description = description
        self.configs = configs
        self.annotations = annotations
        self.notes = notes
        self.created_by = created_by
        self.created = created
        self.config_merge_rule = config_merge_rule


class SparkConfigurationListResponse(_serialization.Model):
    """A list of sparkconfiguration resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of sparkconfigurations. Required.
    :vartype value: list[~azure.synapse.artifacts.models.SparkConfigurationResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[SparkConfigurationResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.SparkConfigurationResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of sparkconfigurations. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.SparkConfigurationResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class SparkConfigurationParametrizationReference(_serialization.Model):
    """Spark configuration reference.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Spark configuration reference type. Required. "SparkConfigurationReference"
    :vartype type: str or ~azure.synapse.artifacts.models.SparkConfigurationReferenceType
    :ivar reference_name: Reference spark configuration name. Type: string (or Expression with
     resultType string). Required.
    :vartype reference_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "object"},
    }

    def __init__(
        self, *, type: Union[str, "_models.SparkConfigurationReferenceType"], reference_name: JSON, **kwargs: Any
    ) -> None:
        """
        :keyword type: Spark configuration reference type. Required. "SparkConfigurationReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.SparkConfigurationReferenceType
        :keyword reference_name: Reference spark configuration name. Type: string (or Expression with
         resultType string). Required.
        :paramtype reference_name: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class SparkConfigurationReference(_serialization.Model):
    """Spark configuration reference.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Spark configuration reference type. Required. "SparkConfigurationReference"
    :vartype type: str or ~azure.synapse.artifacts.models.SparkConfigurationReferenceType
    :ivar reference_name: Reference spark configuration name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self, *, type: Union[str, "_models.SparkConfigurationReferenceType"], reference_name: str, **kwargs: Any
    ) -> None:
        """
        :keyword type: Spark configuration reference type. Required. "SparkConfigurationReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.SparkConfigurationReferenceType
        :keyword reference_name: Reference spark configuration name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class SparkConfigurationResource(SubResource):
    """Spark Configuration resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of Spark Configuration. Required.
    :vartype properties: ~azure.synapse.artifacts.models.SparkConfiguration
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "SparkConfiguration"},
    }

    def __init__(self, *, properties: "_models.SparkConfiguration", **kwargs: Any) -> None:
        """
        :keyword properties: Properties of Spark Configuration. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.SparkConfiguration
        """
        super().__init__(**kwargs)
        self.properties = properties


class SparkJobDefinition(_serialization.Model):
    """Spark job definition.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar description: The description of the Spark job definition.
    :vartype description: str
    :ivar target_big_data_pool: Big data pool reference. Required.
    :vartype target_big_data_pool: ~azure.synapse.artifacts.models.BigDataPoolReference
    :ivar target_spark_configuration: The spark configuration of the spark job.
    :vartype target_spark_configuration:
     ~azure.synapse.artifacts.models.SparkConfigurationReference
    :ivar required_spark_version: The required Spark version of the application.
    :vartype required_spark_version: str
    :ivar language: The language of the Spark application.
    :vartype language: str
    :ivar job_properties: The properties of the Spark job. Required.
    :vartype job_properties: ~azure.synapse.artifacts.models.SparkJobProperties
    :ivar folder: The folder that this Spark job definition is in. If not specified, this Spark job
     definition will appear at the root level.
    :vartype folder: ~azure.synapse.artifacts.models.SparkJobDefinitionFolder
    """

    _validation = {
        "target_big_data_pool": {"required": True},
        "job_properties": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "description": {"key": "description", "type": "str"},
        "target_big_data_pool": {"key": "targetBigDataPool", "type": "BigDataPoolReference"},
        "target_spark_configuration": {"key": "targetSparkConfiguration", "type": "SparkConfigurationReference"},
        "required_spark_version": {"key": "requiredSparkVersion", "type": "str"},
        "language": {"key": "language", "type": "str"},
        "job_properties": {"key": "jobProperties", "type": "SparkJobProperties"},
        "folder": {"key": "folder", "type": "SparkJobDefinitionFolder"},
    }

    def __init__(
        self,
        *,
        target_big_data_pool: "_models.BigDataPoolReference",
        job_properties: "_models.SparkJobProperties",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        target_spark_configuration: Optional["_models.SparkConfigurationReference"] = None,
        required_spark_version: Optional[str] = None,
        language: Optional[str] = None,
        folder: Optional["_models.SparkJobDefinitionFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: The description of the Spark job definition.
        :paramtype description: str
        :keyword target_big_data_pool: Big data pool reference. Required.
        :paramtype target_big_data_pool: ~azure.synapse.artifacts.models.BigDataPoolReference
        :keyword target_spark_configuration: The spark configuration of the spark job.
        :paramtype target_spark_configuration:
         ~azure.synapse.artifacts.models.SparkConfigurationReference
        :keyword required_spark_version: The required Spark version of the application.
        :paramtype required_spark_version: str
        :keyword language: The language of the Spark application.
        :paramtype language: str
        :keyword job_properties: The properties of the Spark job. Required.
        :paramtype job_properties: ~azure.synapse.artifacts.models.SparkJobProperties
        :keyword folder: The folder that this Spark job definition is in. If not specified, this Spark
         job definition will appear at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.SparkJobDefinitionFolder
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.description = description
        self.target_big_data_pool = target_big_data_pool
        self.target_spark_configuration = target_spark_configuration
        self.required_spark_version = required_spark_version
        self.language = language
        self.job_properties = job_properties
        self.folder = folder


class SparkJobDefinitionFolder(_serialization.Model):
    """The folder that this Spark job definition is in. If not specified, this Spark job definition
    will appear at the root level.

    :ivar name: The name of the folder that this Spark job definition is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this Spark job definition is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class SparkJobDefinitionResource(SubResource):
    """Spark job definition resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of spark job definition. Required.
    :vartype properties: ~azure.synapse.artifacts.models.SparkJobDefinition
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "SparkJobDefinition"},
    }

    def __init__(self, *, properties: "_models.SparkJobDefinition", **kwargs: Any) -> None:
        """
        :keyword properties: Properties of spark job definition. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.SparkJobDefinition
        """
        super().__init__(**kwargs)
        self.properties = properties


class SparkJobDefinitionsListResponse(_serialization.Model):
    """A list of spark job definitions resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of spark job definitions. Required.
    :vartype value: list[~azure.synapse.artifacts.models.SparkJobDefinitionResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[SparkJobDefinitionResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.SparkJobDefinitionResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of spark job definitions. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.SparkJobDefinitionResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class SparkJobProperties(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """The properties of the Spark job.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: The name of the job.
    :vartype name: str
    :ivar file: File containing the application to execute. Required.
    :vartype file: str
    :ivar class_name: Main class for Java/Scala application.
    :vartype class_name: str
    :ivar conf: Spark configuration properties.
    :vartype conf: JSON
    :ivar args: Command line arguments for the application.
    :vartype args: list[str]
    :ivar jars: Jars to be used in this job.
    :vartype jars: list[str]
    :ivar files: files to be used in this job.
    :vartype files: list[str]
    :ivar archives: Archives to be used in this job.
    :vartype archives: list[str]
    :ivar driver_memory: Amount of memory to use for the driver process. Required.
    :vartype driver_memory: str
    :ivar driver_cores: Number of cores to use for the driver. Required.
    :vartype driver_cores: int
    :ivar executor_memory: Amount of memory to use per executor process. Required.
    :vartype executor_memory: str
    :ivar executor_cores: Number of cores to use for each executor. Required.
    :vartype executor_cores: int
    :ivar num_executors: Number of executors to launch for this job. Required.
    :vartype num_executors: int
    """

    _validation = {
        "file": {"required": True},
        "driver_memory": {"required": True},
        "driver_cores": {"required": True},
        "executor_memory": {"required": True},
        "executor_cores": {"required": True},
        "num_executors": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "file": {"key": "file", "type": "str"},
        "class_name": {"key": "className", "type": "str"},
        "conf": {"key": "conf", "type": "object"},
        "args": {"key": "args", "type": "[str]"},
        "jars": {"key": "jars", "type": "[str]"},
        "files": {"key": "files", "type": "[str]"},
        "archives": {"key": "archives", "type": "[str]"},
        "driver_memory": {"key": "driverMemory", "type": "str"},
        "driver_cores": {"key": "driverCores", "type": "int"},
        "executor_memory": {"key": "executorMemory", "type": "str"},
        "executor_cores": {"key": "executorCores", "type": "int"},
        "num_executors": {"key": "numExecutors", "type": "int"},
    }

    def __init__(
        self,
        *,
        file: str,
        driver_memory: str,
        driver_cores: int,
        executor_memory: str,
        executor_cores: int,
        num_executors: int,
        additional_properties: Optional[Dict[str, JSON]] = None,
        name: Optional[str] = None,
        class_name: Optional[str] = None,
        conf: Optional[JSON] = None,
        args: Optional[List[str]] = None,
        jars: Optional[List[str]] = None,
        files: Optional[List[str]] = None,
        archives: Optional[List[str]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: The name of the job.
        :paramtype name: str
        :keyword file: File containing the application to execute. Required.
        :paramtype file: str
        :keyword class_name: Main class for Java/Scala application.
        :paramtype class_name: str
        :keyword conf: Spark configuration properties.
        :paramtype conf: JSON
        :keyword args: Command line arguments for the application.
        :paramtype args: list[str]
        :keyword jars: Jars to be used in this job.
        :paramtype jars: list[str]
        :keyword files: files to be used in this job.
        :paramtype files: list[str]
        :keyword archives: Archives to be used in this job.
        :paramtype archives: list[str]
        :keyword driver_memory: Amount of memory to use for the driver process. Required.
        :paramtype driver_memory: str
        :keyword driver_cores: Number of cores to use for the driver. Required.
        :paramtype driver_cores: int
        :keyword executor_memory: Amount of memory to use per executor process. Required.
        :paramtype executor_memory: str
        :keyword executor_cores: Number of cores to use for each executor. Required.
        :paramtype executor_cores: int
        :keyword num_executors: Number of executors to launch for this job. Required.
        :paramtype num_executors: int
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.name = name
        self.file = file
        self.class_name = class_name
        self.conf = conf
        self.args = args
        self.jars = jars
        self.files = files
        self.archives = archives
        self.driver_memory = driver_memory
        self.driver_cores = driver_cores
        self.executor_memory = executor_memory
        self.executor_cores = executor_cores
        self.num_executors = num_executors


class SparkLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Spark Server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar host: IP address or host name of the Spark server. Required.
    :vartype host: JSON
    :ivar port: The TCP port that the Spark server uses to listen for client connections. Required.
    :vartype port: JSON
    :ivar server_type: The type of Spark server. Known values are: "SharkServer", "SharkServer2",
     and "SparkThriftServer".
    :vartype server_type: str or ~azure.synapse.artifacts.models.SparkServerType
    :ivar thrift_transport_protocol: The transport protocol to use in the Thrift layer. Known
     values are: "Binary", "SASL", and "HTTP ".
    :vartype thrift_transport_protocol: str or
     ~azure.synapse.artifacts.models.SparkThriftTransportProtocol
    :ivar authentication_type: The authentication method used to access the Spark server. Required.
     Known values are: "Anonymous", "Username", "UsernameAndPassword", and
     "WindowsAzureHDInsightService".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.SparkAuthenticationType
    :ivar username: The user name that you use to access Spark Server.
    :vartype username: JSON
    :ivar password: The password corresponding to the user name that you provided in the Username
     field.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar http_path: The partial URL corresponding to the Spark server.
    :vartype http_path: JSON
    :ivar enable_ssl: Specifies whether the connections to the server are encrypted using SSL. The
     default value is false.
    :vartype enable_ssl: JSON
    :ivar enable_server_certificate_validation: Specifies whether the connections to the server
     will validate server certificate, the default value is True. Only used for Version 2.0.
    :vartype enable_server_certificate_validation: JSON
    :ivar trusted_cert_path: The full path of the .pem file containing trusted CA certificates for
     verifying the server when connecting over SSL. This property can only be set when using SSL on
     self-hosted IR. The default value is the cacerts.pem file installed with the IR.
    :vartype trusted_cert_path: JSON
    :ivar use_system_trust_store: Specifies whether to use a CA certificate from the system trust
     store or from a specified PEM file. The default value is false.
    :vartype use_system_trust_store: JSON
    :ivar allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
     name to match the host name of the server when connecting over SSL. The default value is false.
    :vartype allow_host_name_cn_mismatch: JSON
    :ivar allow_self_signed_server_cert: Specifies whether to allow self-signed certificates from
     the server. The default value is false.
    :vartype allow_self_signed_server_cert: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "port": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "server_type": {"key": "typeProperties.serverType", "type": "str"},
        "thrift_transport_protocol": {"key": "typeProperties.thriftTransportProtocol", "type": "str"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "http_path": {"key": "typeProperties.httpPath", "type": "object"},
        "enable_ssl": {"key": "typeProperties.enableSsl", "type": "object"},
        "enable_server_certificate_validation": {
            "key": "typeProperties.enableServerCertificateValidation",
            "type": "object",
        },
        "trusted_cert_path": {"key": "typeProperties.trustedCertPath", "type": "object"},
        "use_system_trust_store": {"key": "typeProperties.useSystemTrustStore", "type": "object"},
        "allow_host_name_cn_mismatch": {"key": "typeProperties.allowHostNameCNMismatch", "type": "object"},
        "allow_self_signed_server_cert": {"key": "typeProperties.allowSelfSignedServerCert", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        port: JSON,
        authentication_type: Union[str, "_models.SparkAuthenticationType"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server_type: Optional[Union[str, "_models.SparkServerType"]] = None,
        thrift_transport_protocol: Optional[Union[str, "_models.SparkThriftTransportProtocol"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        http_path: Optional[JSON] = None,
        enable_ssl: Optional[JSON] = None,
        enable_server_certificate_validation: Optional[JSON] = None,
        trusted_cert_path: Optional[JSON] = None,
        use_system_trust_store: Optional[JSON] = None,
        allow_host_name_cn_mismatch: Optional[JSON] = None,
        allow_self_signed_server_cert: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword host: IP address or host name of the Spark server. Required.
        :paramtype host: JSON
        :keyword port: The TCP port that the Spark server uses to listen for client connections.
         Required.
        :paramtype port: JSON
        :keyword server_type: The type of Spark server. Known values are: "SharkServer",
         "SharkServer2", and "SparkThriftServer".
        :paramtype server_type: str or ~azure.synapse.artifacts.models.SparkServerType
        :keyword thrift_transport_protocol: The transport protocol to use in the Thrift layer. Known
         values are: "Binary", "SASL", and "HTTP ".
        :paramtype thrift_transport_protocol: str or
         ~azure.synapse.artifacts.models.SparkThriftTransportProtocol
        :keyword authentication_type: The authentication method used to access the Spark server.
         Required. Known values are: "Anonymous", "Username", "UsernameAndPassword", and
         "WindowsAzureHDInsightService".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.SparkAuthenticationType
        :keyword username: The user name that you use to access Spark Server.
        :paramtype username: JSON
        :keyword password: The password corresponding to the user name that you provided in the
         Username field.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword http_path: The partial URL corresponding to the Spark server.
        :paramtype http_path: JSON
        :keyword enable_ssl: Specifies whether the connections to the server are encrypted using SSL.
         The default value is false.
        :paramtype enable_ssl: JSON
        :keyword enable_server_certificate_validation: Specifies whether the connections to the server
         will validate server certificate, the default value is True. Only used for Version 2.0.
        :paramtype enable_server_certificate_validation: JSON
        :keyword trusted_cert_path: The full path of the .pem file containing trusted CA certificates
         for verifying the server when connecting over SSL. This property can only be set when using SSL
         on self-hosted IR. The default value is the cacerts.pem file installed with the IR.
        :paramtype trusted_cert_path: JSON
        :keyword use_system_trust_store: Specifies whether to use a CA certificate from the system
         trust store or from a specified PEM file. The default value is false.
        :paramtype use_system_trust_store: JSON
        :keyword allow_host_name_cn_mismatch: Specifies whether to require a CA-issued SSL certificate
         name to match the host name of the server when connecting over SSL. The default value is false.
        :paramtype allow_host_name_cn_mismatch: JSON
        :keyword allow_self_signed_server_cert: Specifies whether to allow self-signed certificates
         from the server. The default value is false.
        :paramtype allow_self_signed_server_cert: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Spark"
        self.host = host
        self.port = port
        self.server_type = server_type
        self.thrift_transport_protocol = thrift_transport_protocol
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.http_path = http_path
        self.enable_ssl = enable_ssl
        self.enable_server_certificate_validation = enable_server_certificate_validation
        self.trusted_cert_path = trusted_cert_path
        self.use_system_trust_store = use_system_trust_store
        self.allow_host_name_cn_mismatch = allow_host_name_cn_mismatch
        self.allow_self_signed_server_cert = allow_self_signed_server_cert
        self.encrypted_credential = encrypted_credential


class SparkObjectDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Spark Server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Spark. Type: string (or Expression with resultType string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Spark. Type: string (or Expression
     with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Spark. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Spark. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SparkObject"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class SparkRequest(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """SparkRequest.

    :ivar name:
    :vartype name: str
    :ivar file:
    :vartype file: str
    :ivar class_name:
    :vartype class_name: str
    :ivar arguments:
    :vartype arguments: list[str]
    :ivar jars:
    :vartype jars: list[str]
    :ivar python_files:
    :vartype python_files: list[str]
    :ivar files:
    :vartype files: list[str]
    :ivar archives:
    :vartype archives: list[str]
    :ivar configuration: Dictionary of :code:`<string>`.
    :vartype configuration: dict[str, str]
    :ivar driver_memory:
    :vartype driver_memory: str
    :ivar driver_cores:
    :vartype driver_cores: int
    :ivar executor_memory:
    :vartype executor_memory: str
    :ivar executor_cores:
    :vartype executor_cores: int
    :ivar executor_count:
    :vartype executor_count: int
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "file": {"key": "file", "type": "str"},
        "class_name": {"key": "className", "type": "str"},
        "arguments": {"key": "args", "type": "[str]"},
        "jars": {"key": "jars", "type": "[str]"},
        "python_files": {"key": "pyFiles", "type": "[str]"},
        "files": {"key": "files", "type": "[str]"},
        "archives": {"key": "archives", "type": "[str]"},
        "configuration": {"key": "conf", "type": "{str}"},
        "driver_memory": {"key": "driverMemory", "type": "str"},
        "driver_cores": {"key": "driverCores", "type": "int"},
        "executor_memory": {"key": "executorMemory", "type": "str"},
        "executor_cores": {"key": "executorCores", "type": "int"},
        "executor_count": {"key": "numExecutors", "type": "int"},
    }

    def __init__(
        self,
        *,
        name: Optional[str] = None,
        file: Optional[str] = None,
        class_name: Optional[str] = None,
        arguments: Optional[List[str]] = None,
        jars: Optional[List[str]] = None,
        python_files: Optional[List[str]] = None,
        files: Optional[List[str]] = None,
        archives: Optional[List[str]] = None,
        configuration: Optional[Dict[str, str]] = None,
        driver_memory: Optional[str] = None,
        driver_cores: Optional[int] = None,
        executor_memory: Optional[str] = None,
        executor_cores: Optional[int] = None,
        executor_count: Optional[int] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword name:
        :paramtype name: str
        :keyword file:
        :paramtype file: str
        :keyword class_name:
        :paramtype class_name: str
        :keyword arguments:
        :paramtype arguments: list[str]
        :keyword jars:
        :paramtype jars: list[str]
        :keyword python_files:
        :paramtype python_files: list[str]
        :keyword files:
        :paramtype files: list[str]
        :keyword archives:
        :paramtype archives: list[str]
        :keyword configuration: Dictionary of :code:`<string>`.
        :paramtype configuration: dict[str, str]
        :keyword driver_memory:
        :paramtype driver_memory: str
        :keyword driver_cores:
        :paramtype driver_cores: int
        :keyword executor_memory:
        :paramtype executor_memory: str
        :keyword executor_cores:
        :paramtype executor_cores: int
        :keyword executor_count:
        :paramtype executor_count: int
        """
        super().__init__(**kwargs)
        self.name = name
        self.file = file
        self.class_name = class_name
        self.arguments = arguments
        self.jars = jars
        self.python_files = python_files
        self.files = files
        self.archives = archives
        self.configuration = configuration
        self.driver_memory = driver_memory
        self.driver_cores = driver_cores
        self.executor_memory = executor_memory
        self.executor_cores = executor_cores
        self.executor_count = executor_count


class SparkScheduler(_serialization.Model):
    """SparkScheduler.

    :ivar submitted_at:
    :vartype submitted_at: ~datetime.datetime
    :ivar scheduled_at:
    :vartype scheduled_at: ~datetime.datetime
    :ivar ended_at:
    :vartype ended_at: ~datetime.datetime
    :ivar cancellation_requested_at:
    :vartype cancellation_requested_at: ~datetime.datetime
    :ivar current_state: Known values are: "Queued", "Scheduled", and "Ended".
    :vartype current_state: str or ~azure.synapse.artifacts.models.SchedulerCurrentState
    """

    _attribute_map = {
        "submitted_at": {"key": "submittedAt", "type": "iso-8601"},
        "scheduled_at": {"key": "scheduledAt", "type": "iso-8601"},
        "ended_at": {"key": "endedAt", "type": "iso-8601"},
        "cancellation_requested_at": {"key": "cancellationRequestedAt", "type": "iso-8601"},
        "current_state": {"key": "currentState", "type": "str"},
    }

    def __init__(
        self,
        *,
        submitted_at: Optional[datetime.datetime] = None,
        scheduled_at: Optional[datetime.datetime] = None,
        ended_at: Optional[datetime.datetime] = None,
        cancellation_requested_at: Optional[datetime.datetime] = None,
        current_state: Optional[Union[str, "_models.SchedulerCurrentState"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword submitted_at:
        :paramtype submitted_at: ~datetime.datetime
        :keyword scheduled_at:
        :paramtype scheduled_at: ~datetime.datetime
        :keyword ended_at:
        :paramtype ended_at: ~datetime.datetime
        :keyword cancellation_requested_at:
        :paramtype cancellation_requested_at: ~datetime.datetime
        :keyword current_state: Known values are: "Queued", "Scheduled", and "Ended".
        :paramtype current_state: str or ~azure.synapse.artifacts.models.SchedulerCurrentState
        """
        super().__init__(**kwargs)
        self.submitted_at = submitted_at
        self.scheduled_at = scheduled_at
        self.ended_at = ended_at
        self.cancellation_requested_at = cancellation_requested_at
        self.current_state = current_state


class SparkServiceError(_serialization.Model):
    """SparkServiceError.

    :ivar message:
    :vartype message: str
    :ivar error_code:
    :vartype error_code: str
    :ivar source: Known values are: "System", "User", "Unknown", and "Dependency".
    :vartype source: str or ~azure.synapse.artifacts.models.SparkErrorSource
    """

    _attribute_map = {
        "message": {"key": "message", "type": "str"},
        "error_code": {"key": "errorCode", "type": "str"},
        "source": {"key": "source", "type": "str"},
    }

    def __init__(
        self,
        *,
        message: Optional[str] = None,
        error_code: Optional[str] = None,
        source: Optional[Union[str, "_models.SparkErrorSource"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword message:
        :paramtype message: str
        :keyword error_code:
        :paramtype error_code: str
        :keyword source: Known values are: "System", "User", "Unknown", and "Dependency".
        :paramtype source: str or ~azure.synapse.artifacts.models.SparkErrorSource
        """
        super().__init__(**kwargs)
        self.message = message
        self.error_code = error_code
        self.source = source


class SparkServicePlugin(_serialization.Model):
    """SparkServicePlugin.

    :ivar preparation_started_at:
    :vartype preparation_started_at: ~datetime.datetime
    :ivar resource_acquisition_started_at:
    :vartype resource_acquisition_started_at: ~datetime.datetime
    :ivar submission_started_at:
    :vartype submission_started_at: ~datetime.datetime
    :ivar monitoring_started_at:
    :vartype monitoring_started_at: ~datetime.datetime
    :ivar cleanup_started_at:
    :vartype cleanup_started_at: ~datetime.datetime
    :ivar current_state: Known values are: "Preparation", "ResourceAcquisition", "Queued",
     "Submission", "Monitoring", "Cleanup", and "Ended".
    :vartype current_state: str or ~azure.synapse.artifacts.models.PluginCurrentState
    """

    _attribute_map = {
        "preparation_started_at": {"key": "preparationStartedAt", "type": "iso-8601"},
        "resource_acquisition_started_at": {"key": "resourceAcquisitionStartedAt", "type": "iso-8601"},
        "submission_started_at": {"key": "submissionStartedAt", "type": "iso-8601"},
        "monitoring_started_at": {"key": "monitoringStartedAt", "type": "iso-8601"},
        "cleanup_started_at": {"key": "cleanupStartedAt", "type": "iso-8601"},
        "current_state": {"key": "currentState", "type": "str"},
    }

    def __init__(
        self,
        *,
        preparation_started_at: Optional[datetime.datetime] = None,
        resource_acquisition_started_at: Optional[datetime.datetime] = None,
        submission_started_at: Optional[datetime.datetime] = None,
        monitoring_started_at: Optional[datetime.datetime] = None,
        cleanup_started_at: Optional[datetime.datetime] = None,
        current_state: Optional[Union[str, "_models.PluginCurrentState"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword preparation_started_at:
        :paramtype preparation_started_at: ~datetime.datetime
        :keyword resource_acquisition_started_at:
        :paramtype resource_acquisition_started_at: ~datetime.datetime
        :keyword submission_started_at:
        :paramtype submission_started_at: ~datetime.datetime
        :keyword monitoring_started_at:
        :paramtype monitoring_started_at: ~datetime.datetime
        :keyword cleanup_started_at:
        :paramtype cleanup_started_at: ~datetime.datetime
        :keyword current_state: Known values are: "Preparation", "ResourceAcquisition", "Queued",
         "Submission", "Monitoring", "Cleanup", and "Ended".
        :paramtype current_state: str or ~azure.synapse.artifacts.models.PluginCurrentState
        """
        super().__init__(**kwargs)
        self.preparation_started_at = preparation_started_at
        self.resource_acquisition_started_at = resource_acquisition_started_at
        self.submission_started_at = submission_started_at
        self.monitoring_started_at = monitoring_started_at
        self.cleanup_started_at = cleanup_started_at
        self.current_state = current_state


class SparkSource(TabularSource):
    """A copy activity Spark Server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SparkSource"
        self.query = query


class SqlAlwaysEncryptedProperties(_serialization.Model):
    """Sql always encrypted properties.

    All required parameters must be populated in order to send to Azure.

    :ivar always_encrypted_akv_auth_type: Sql always encrypted AKV authentication type. Type:
     string. Required. Known values are: "ServicePrincipal", "ManagedIdentity", and
     "UserAssignedManagedIdentity".
    :vartype always_encrypted_akv_auth_type: str or
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedAkvAuthType
    :ivar service_principal_id: The client ID of the application in Azure Active Directory used for
     Azure Key Vault authentication. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The key of the service principal used to authenticate against
     Azure Key Vault.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "always_encrypted_akv_auth_type": {"required": True},
    }

    _attribute_map = {
        "always_encrypted_akv_auth_type": {"key": "alwaysEncryptedAkvAuthType", "type": "str"},
        "service_principal_id": {"key": "servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "servicePrincipalKey", "type": "SecretBase"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        always_encrypted_akv_auth_type: Union[str, "_models.SqlAlwaysEncryptedAkvAuthType"],
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword always_encrypted_akv_auth_type: Sql always encrypted AKV authentication type. Type:
         string. Required. Known values are: "ServicePrincipal", "ManagedIdentity", and
         "UserAssignedManagedIdentity".
        :paramtype always_encrypted_akv_auth_type: str or
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedAkvAuthType
        :keyword service_principal_id: The client ID of the application in Azure Active Directory used
         for Azure Key Vault authentication. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The key of the service principal used to authenticate against
         Azure Key Vault.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(**kwargs)
        self.always_encrypted_akv_auth_type = always_encrypted_akv_auth_type
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.credential = credential


class SqlConnection(_serialization.Model):
    """The connection used to execute the SQL script.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The type of the connection. Known values are: "SqlOnDemand" and "SqlPool".
    :vartype type: str or ~azure.synapse.artifacts.models.SqlConnectionType
    :ivar name: The identifier of the connection.
    :vartype name: str
    :ivar pool_name: The associated SQL pool name (supported by SQL pool v3).
    :vartype pool_name: str
    :ivar database_name: The associated database name (supported by SQL pool v3).
    :vartype database_name: str
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "pool_name": {"key": "poolName", "type": "str"},
        "database_name": {"key": "databaseName", "type": "str"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        type: Optional[Union[str, "_models.SqlConnectionType"]] = None,
        name: Optional[str] = None,
        pool_name: Optional[str] = None,
        database_name: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword type: The type of the connection. Known values are: "SqlOnDemand" and "SqlPool".
        :paramtype type: str or ~azure.synapse.artifacts.models.SqlConnectionType
        :keyword name: The identifier of the connection.
        :paramtype name: str
        :keyword pool_name: The associated SQL pool name (supported by SQL pool v3).
        :paramtype pool_name: str
        :keyword database_name: The associated database name (supported by SQL pool v3).
        :paramtype database_name: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.type = type
        self.name = name
        self.pool_name = pool_name
        self.database_name = database_name


class SqlDWSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL Data Warehouse sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar allow_poly_base: Indicates to use PolyBase to copy data into SQL Data Warehouse when
     applicable. Type: boolean (or Expression with resultType boolean).
    :vartype allow_poly_base: JSON
    :ivar poly_base_settings: Specifies PolyBase-related settings when allowPolyBase is true.
    :vartype poly_base_settings: ~azure.synapse.artifacts.models.PolybaseSettings
    :ivar allow_copy_command: Indicates to use Copy Command to copy data into SQL Data Warehouse.
     Type: boolean (or Expression with resultType boolean).
    :vartype allow_copy_command: JSON
    :ivar copy_command_settings: Specifies Copy Command related settings when allowCopyCommand is
     true.
    :vartype copy_command_settings: ~azure.synapse.artifacts.models.DWCopyCommandSettings
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "allow_poly_base": {"key": "allowPolyBase", "type": "object"},
        "poly_base_settings": {"key": "polyBaseSettings", "type": "PolybaseSettings"},
        "allow_copy_command": {"key": "allowCopyCommand", "type": "object"},
        "copy_command_settings": {"key": "copyCommandSettings", "type": "DWCopyCommandSettings"},
        "table_option": {"key": "tableOption", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        allow_poly_base: Optional[JSON] = None,
        poly_base_settings: Optional["_models.PolybaseSettings"] = None,
        allow_copy_command: Optional[JSON] = None,
        copy_command_settings: Optional["_models.DWCopyCommandSettings"] = None,
        table_option: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword allow_poly_base: Indicates to use PolyBase to copy data into SQL Data Warehouse when
         applicable. Type: boolean (or Expression with resultType boolean).
        :paramtype allow_poly_base: JSON
        :keyword poly_base_settings: Specifies PolyBase-related settings when allowPolyBase is true.
        :paramtype poly_base_settings: ~azure.synapse.artifacts.models.PolybaseSettings
        :keyword allow_copy_command: Indicates to use Copy Command to copy data into SQL Data
         Warehouse. Type: boolean (or Expression with resultType boolean).
        :paramtype allow_copy_command: JSON
        :keyword copy_command_settings: Specifies Copy Command related settings when allowCopyCommand
         is true.
        :paramtype copy_command_settings: ~azure.synapse.artifacts.models.DWCopyCommandSettings
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SqlDWSink"
        self.pre_copy_script = pre_copy_script
        self.allow_poly_base = allow_poly_base
        self.poly_base_settings = poly_base_settings
        self.allow_copy_command = allow_copy_command
        self.copy_command_settings = copy_command_settings
        self.table_option = table_option


class SqlDWSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL Data Warehouse source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL Data Warehouse reader query. Type: string (or Expression with
     resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Data Warehouse
     source. This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression
     with resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}". Type: object (or Expression with resultType
     object), itemType: StoredProcedureParameter.
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL Data Warehouse reader query. Type: string (or Expression with
         resultType string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Data
         Warehouse source. This cannot be used at the same time as SqlReaderQuery. Type: string (or
         Expression with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}". Type: object (or Expression with resultType
         object), itemType: StoredProcedureParameter.
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SqlDWSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class SqlMISink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure SQL Managed Instance sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
     Expression with resultType string).
    :vartype sql_writer_stored_procedure_name: JSON
    :ivar sql_writer_table_type: SQL writer table type. Type: string (or Expression with resultType
     string).
    :vartype sql_writer_table_type: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar stored_procedure_parameters: SQL stored procedure parameters.
    :vartype stored_procedure_parameters: JSON
    :ivar stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
     table type. Type: string (or Expression with resultType string).
    :vartype stored_procedure_table_type_parameter_name: JSON
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "sql_writer_stored_procedure_name": {"key": "sqlWriterStoredProcedureName", "type": "object"},
        "sql_writer_table_type": {"key": "sqlWriterTableType", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "stored_procedure_table_type_parameter_name": {
            "key": "storedProcedureTableTypeParameterName",
            "type": "object",
        },
        "table_option": {"key": "tableOption", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        sql_writer_stored_procedure_name: Optional[JSON] = None,
        sql_writer_table_type: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        stored_procedure_table_type_parameter_name: Optional[JSON] = None,
        table_option: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
         Expression with resultType string).
        :paramtype sql_writer_stored_procedure_name: JSON
        :keyword sql_writer_table_type: SQL writer table type. Type: string (or Expression with
         resultType string).
        :paramtype sql_writer_table_type: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword stored_procedure_parameters: SQL stored procedure parameters.
        :paramtype stored_procedure_parameters: JSON
        :keyword stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
         table type. Type: string (or Expression with resultType string).
        :paramtype stored_procedure_table_type_parameter_name: JSON
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SqlMISink"
        self.sql_writer_stored_procedure_name = sql_writer_stored_procedure_name
        self.sql_writer_table_type = sql_writer_table_type
        self.pre_copy_script = pre_copy_script
        self.stored_procedure_parameters = stored_procedure_parameters
        self.stored_procedure_table_type_parameter_name = stored_procedure_table_type_parameter_name
        self.table_option = table_option


class SqlMISource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Azure SQL Managed Instance source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL reader query. Type: string (or Expression with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a Azure SQL Managed
     Instance source. This cannot be used at the same time as SqlReaderQuery. Type: string (or
     Expression with resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar produce_additional_types: Which additional types to produce.
    :vartype produce_additional_types: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "produce_additional_types": {"key": "produceAdditionalTypes", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        produce_additional_types: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL reader query. Type: string (or Expression with resultType
         string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a Azure SQL Managed
         Instance source. This cannot be used at the same time as SqlReaderQuery. Type: string (or
         Expression with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword produce_additional_types: Which additional types to produce.
        :paramtype produce_additional_types: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SqlMISource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.produce_additional_types = produce_additional_types
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class SqlPartitionSettings(_serialization.Model):
    """The settings that will be leveraged for Sql source partitioning.

    :ivar partition_column_name: The name of the column in integer or datetime type that will be
     used for proceeding partitioning. If not specified, the primary key of the table is
     auto-detected and used as the partition column. Type: string (or Expression with resultType
     string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of the partition column for partition range
     splitting. This value is used to decide the partition stride, not for filtering the rows in
     table. All rows in the table or query result will be partitioned and copied. Type: string (or
     Expression with resultType string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of the partition column for partition range
     splitting. This value is used to decide the partition stride, not for filtering the rows in
     table. All rows in the table or query result will be partitioned and copied. Type: string (or
     Expression with resultType string).
    :vartype partition_lower_bound: JSON
    """

    _attribute_map = {
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_column_name: The name of the column in integer or datetime type that will be
         used for proceeding partitioning. If not specified, the primary key of the table is
         auto-detected and used as the partition column. Type: string (or Expression with resultType
         string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of the partition column for partition range
         splitting. This value is used to decide the partition stride, not for filtering the rows in
         table. All rows in the table or query result will be partitioned and copied. Type: string (or
         Expression with resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of the partition column for partition range
         splitting. This value is used to decide the partition stride, not for filtering the rows in
         table. All rows in the table or query result will be partitioned and copied. Type: string (or
         Expression with resultType string).
        :paramtype partition_lower_bound: JSON
        """
        super().__init__(**kwargs)
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound


class SqlPool(TrackedResource):  # pylint: disable=too-many-instance-attributes
    """A SQL Analytics pool.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar sku: SQL pool SKU.
    :vartype sku: ~azure.synapse.artifacts.models.Sku
    :ivar max_size_bytes: Maximum size in bytes.
    :vartype max_size_bytes: int
    :ivar collation: Collation mode.
    :vartype collation: str
    :ivar source_database_id: Source database to create from.
    :vartype source_database_id: str
    :ivar recoverable_database_id: Backup database to restore from.
    :vartype recoverable_database_id: str
    :ivar provisioning_state: Resource state.
    :vartype provisioning_state: str
    :ivar status: Resource status.
    :vartype status: str
    :ivar restore_point_in_time: Snapshot time to restore.
    :vartype restore_point_in_time: str
    :ivar create_mode: Specifies the mode of sql pool creation.

     Default: regular sql pool creation.

     PointInTimeRestore: Creates a sql pool by restoring a point in time backup of an existing sql
     pool. sourceDatabaseId must be specified as the resource ID of the existing sql pool, and
     restorePointInTime must be specified.

     Recovery: Creates a sql pool by a geo-replicated backup. sourceDatabaseId  must be specified
     as the recoverableDatabaseId to restore.

     Restore: Creates a sql pool by restoring a backup of a deleted sql  pool. SourceDatabaseId
     should be the sql pool's original resource ID. SourceDatabaseId and sourceDatabaseDeletionDate
     must be specified. Known values are: "Default", "PointInTimeRestore", "Recovery", and
     "Restore".
    :vartype create_mode: str or ~azure.synapse.artifacts.models.CreateMode
    :ivar creation_date: Date the SQL pool was created.
    :vartype creation_date: ~datetime.datetime
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "location": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "tags": {"key": "tags", "type": "{str}"},
        "location": {"key": "location", "type": "str"},
        "sku": {"key": "sku", "type": "Sku"},
        "max_size_bytes": {"key": "properties.maxSizeBytes", "type": "int"},
        "collation": {"key": "properties.collation", "type": "str"},
        "source_database_id": {"key": "properties.sourceDatabaseId", "type": "str"},
        "recoverable_database_id": {"key": "properties.recoverableDatabaseId", "type": "str"},
        "provisioning_state": {"key": "properties.provisioningState", "type": "str"},
        "status": {"key": "properties.status", "type": "str"},
        "restore_point_in_time": {"key": "properties.restorePointInTime", "type": "str"},
        "create_mode": {"key": "properties.createMode", "type": "str"},
        "creation_date": {"key": "properties.creationDate", "type": "iso-8601"},
    }

    def __init__(
        self,
        *,
        location: str,
        tags: Optional[Dict[str, str]] = None,
        sku: Optional["_models.Sku"] = None,
        max_size_bytes: Optional[int] = None,
        collation: Optional[str] = None,
        source_database_id: Optional[str] = None,
        recoverable_database_id: Optional[str] = None,
        provisioning_state: Optional[str] = None,
        status: Optional[str] = None,
        restore_point_in_time: Optional[str] = None,
        create_mode: Optional[Union[str, "_models.CreateMode"]] = None,
        creation_date: Optional[datetime.datetime] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword tags: Resource tags.
        :paramtype tags: dict[str, str]
        :keyword location: The geo-location where the resource lives. Required.
        :paramtype location: str
        :keyword sku: SQL pool SKU.
        :paramtype sku: ~azure.synapse.artifacts.models.Sku
        :keyword max_size_bytes: Maximum size in bytes.
        :paramtype max_size_bytes: int
        :keyword collation: Collation mode.
        :paramtype collation: str
        :keyword source_database_id: Source database to create from.
        :paramtype source_database_id: str
        :keyword recoverable_database_id: Backup database to restore from.
        :paramtype recoverable_database_id: str
        :keyword provisioning_state: Resource state.
        :paramtype provisioning_state: str
        :keyword status: Resource status.
        :paramtype status: str
        :keyword restore_point_in_time: Snapshot time to restore.
        :paramtype restore_point_in_time: str
        :keyword create_mode: Specifies the mode of sql pool creation.

         Default: regular sql pool creation.

         PointInTimeRestore: Creates a sql pool by restoring a point in time backup of an existing sql
         pool. sourceDatabaseId must be specified as the resource ID of the existing sql pool, and
         restorePointInTime must be specified.

         Recovery: Creates a sql pool by a geo-replicated backup. sourceDatabaseId  must be specified
         as the recoverableDatabaseId to restore.

         Restore: Creates a sql pool by restoring a backup of a deleted sql  pool. SourceDatabaseId
         should be the sql pool's original resource ID. SourceDatabaseId and sourceDatabaseDeletionDate
         must be specified. Known values are: "Default", "PointInTimeRestore", "Recovery", and
         "Restore".
        :paramtype create_mode: str or ~azure.synapse.artifacts.models.CreateMode
        :keyword creation_date: Date the SQL pool was created.
        :paramtype creation_date: ~datetime.datetime
        """
        super().__init__(tags=tags, location=location, **kwargs)
        self.sku = sku
        self.max_size_bytes = max_size_bytes
        self.collation = collation
        self.source_database_id = source_database_id
        self.recoverable_database_id = recoverable_database_id
        self.provisioning_state = provisioning_state
        self.status = status
        self.restore_point_in_time = restore_point_in_time
        self.create_mode = create_mode
        self.creation_date = creation_date


class SqlPoolInfoListResult(_serialization.Model):
    """List of SQL pools.

    :ivar next_link: Link to the next page of results.
    :vartype next_link: str
    :ivar value: List of SQL pools.
    :vartype value: list[~azure.synapse.artifacts.models.SqlPool]
    """

    _attribute_map = {
        "next_link": {"key": "nextLink", "type": "str"},
        "value": {"key": "value", "type": "[SqlPool]"},
    }

    def __init__(
        self, *, next_link: Optional[str] = None, value: Optional[List["_models.SqlPool"]] = None, **kwargs: Any
    ) -> None:
        """
        :keyword next_link: Link to the next page of results.
        :paramtype next_link: str
        :keyword value: List of SQL pools.
        :paramtype value: list[~azure.synapse.artifacts.models.SqlPool]
        """
        super().__init__(**kwargs)
        self.next_link = next_link
        self.value = value


class SqlPoolReference(_serialization.Model):
    """SQL pool reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: SQL pool reference type. Required. "SqlPoolReference"
    :vartype type: str or ~azure.synapse.artifacts.models.SqlPoolReferenceType
    :ivar reference_name: Reference SQL pool name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(self, *, type: Union[str, "_models.SqlPoolReferenceType"], reference_name: str, **kwargs: Any) -> None:
        """
        :keyword type: SQL pool reference type. Required. "SqlPoolReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.SqlPoolReferenceType
        :keyword reference_name: Reference SQL pool name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class SqlPoolStoredProcedureActivity(Activity):  # pylint: disable=too-many-instance-attributes
    """Execute SQL pool stored procedure activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar sql_pool: SQL pool stored procedure reference. Required.
    :vartype sql_pool: ~azure.synapse.artifacts.models.SqlPoolReference
    :ivar stored_procedure_name: Stored procedure name. Type: string (or Expression with resultType
     string). Required.
    :vartype stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "sql_pool": {"required": True},
        "stored_procedure_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "sql_pool": {"key": "sqlPool", "type": "SqlPoolReference"},
        "stored_procedure_name": {"key": "typeProperties.storedProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "typeProperties.storedProcedureParameters", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        sql_pool: "_models.SqlPoolReference",
        stored_procedure_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword sql_pool: SQL pool stored procedure reference. Required.
        :paramtype sql_pool: ~azure.synapse.artifacts.models.SqlPoolReference
        :keyword stored_procedure_name: Stored procedure name. Type: string (or Expression with
         resultType string). Required.
        :paramtype stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "SqlPoolStoredProcedure"
        self.sql_pool = sql_pool
        self.stored_procedure_name = stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters


class SqlScript(_serialization.Model):
    """SQL script.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar description: The description of the SQL script.
    :vartype description: str
    :ivar type: The type of the SQL script. "SqlQuery"
    :vartype type: str or ~azure.synapse.artifacts.models.SqlScriptType
    :ivar content: The content of the SQL script. Required.
    :vartype content: ~azure.synapse.artifacts.models.SqlScriptContent
    :ivar folder: The folder that this SQL script is in. If not specified, this SQL script will
     appear at the root level.
    :vartype folder: ~azure.synapse.artifacts.models.SqlScriptFolder
    """

    _validation = {
        "content": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "description": {"key": "description", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "content": {"key": "content", "type": "SqlScriptContent"},
        "folder": {"key": "folder", "type": "SqlScriptFolder"},
    }

    def __init__(
        self,
        *,
        content: "_models.SqlScriptContent",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        type: Optional[Union[str, "_models.SqlScriptType"]] = None,
        folder: Optional["_models.SqlScriptFolder"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: The description of the SQL script.
        :paramtype description: str
        :keyword type: The type of the SQL script. "SqlQuery"
        :paramtype type: str or ~azure.synapse.artifacts.models.SqlScriptType
        :keyword content: The content of the SQL script. Required.
        :paramtype content: ~azure.synapse.artifacts.models.SqlScriptContent
        :keyword folder: The folder that this SQL script is in. If not specified, this SQL script will
         appear at the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.SqlScriptFolder
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.description = description
        self.type = type
        self.content = content
        self.folder = folder


class SqlScriptContent(_serialization.Model):
    """The content of the SQL script.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar query: SQL query to execute. Required.
    :vartype query: str
    :ivar current_connection: The connection used to execute the SQL script.
    :vartype current_connection: ~azure.synapse.artifacts.models.SqlConnection
    :ivar result_limit: Limit of results, '-1' for no limit.
    :vartype result_limit: int
    :ivar metadata: The metadata of the SQL script.
    :vartype metadata: ~azure.synapse.artifacts.models.SqlScriptMetadata
    """

    _validation = {
        "query": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "query": {"key": "query", "type": "str"},
        "current_connection": {"key": "currentConnection", "type": "SqlConnection"},
        "result_limit": {"key": "resultLimit", "type": "int"},
        "metadata": {"key": "metadata", "type": "SqlScriptMetadata"},
    }

    def __init__(
        self,
        *,
        query: str,
        additional_properties: Optional[Dict[str, JSON]] = None,
        current_connection: Optional["_models.SqlConnection"] = None,
        result_limit: Optional[int] = None,
        metadata: Optional["_models.SqlScriptMetadata"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword query: SQL query to execute. Required.
        :paramtype query: str
        :keyword current_connection: The connection used to execute the SQL script.
        :paramtype current_connection: ~azure.synapse.artifacts.models.SqlConnection
        :keyword result_limit: Limit of results, '-1' for no limit.
        :paramtype result_limit: int
        :keyword metadata: The metadata of the SQL script.
        :paramtype metadata: ~azure.synapse.artifacts.models.SqlScriptMetadata
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.query = query
        self.current_connection = current_connection
        self.result_limit = result_limit
        self.metadata = metadata


class SqlScriptFolder(_serialization.Model):
    """The folder that this SQL script is in. If not specified, this SQL script will appear at the
    root level.

    :ivar name: The name of the folder that this SQL script is in.
    :vartype name: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: The name of the folder that this SQL script is in.
        :paramtype name: str
        """
        super().__init__(**kwargs)
        self.name = name


class SqlScriptMetadata(_serialization.Model):
    """The metadata of the SQL script.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar language: The language of the SQL script.
    :vartype language: str
    """

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "language": {"key": "language", "type": "str"},
    }

    def __init__(
        self, *, additional_properties: Optional[Dict[str, JSON]] = None, language: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword language: The language of the SQL script.
        :paramtype language: str
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.language = language


class SqlScriptResource(_serialization.Model):
    """Sql Script resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource Id for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource. Required.
    :vartype name: str
    :ivar type: The type of the resource. Ex- Microsoft.Compute/virtualMachines or
     Microsoft.Storage/storageAccounts.
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of sql script. Required.
    :vartype properties: ~azure.synapse.artifacts.models.SqlScript
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"required": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "SqlScript"},
    }

    def __init__(self, *, name: str, properties: "_models.SqlScript", **kwargs: Any) -> None:
        """
        :keyword name: The name of the resource. Required.
        :paramtype name: str
        :keyword properties: Properties of sql script. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.SqlScript
        """
        super().__init__(**kwargs)
        self.id = None
        self.name = name
        self.type = None
        self.etag = None
        self.properties = properties


class SqlScriptsListResponse(_serialization.Model):
    """A list of sql scripts resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of sql scripts. Required.
    :vartype value: list[~azure.synapse.artifacts.models.SqlScriptResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[SqlScriptResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.SqlScriptResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of sql scripts. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.SqlScriptResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class SqlServerLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """SQL Server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "Windows", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.SqlServerAuthenticationType
    :ivar user_name: The on-premises Windows authentication user name. Type: string (or Expression
     with resultType string).
    :vartype user_name: JSON
    :ivar password: The on-premises Windows authentication password.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "encrypt": {"key": "typeProperties.encrypt", "type": "object"},
        "trust_server_certificate": {"key": "typeProperties.trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "typeProperties.hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "typeProperties.applicationIntent", "type": "object"},
        "connect_timeout": {"key": "typeProperties.connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "typeProperties.connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "typeProperties.connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "typeProperties.loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "typeProperties.commandTimeout", "type": "object"},
        "integrated_security": {"key": "typeProperties.integratedSecurity", "type": "object"},
        "failover_partner": {"key": "typeProperties.failoverPartner", "type": "object"},
        "max_pool_size": {"key": "typeProperties.maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "typeProperties.minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "typeProperties.multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "typeProperties.multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "typeProperties.packetSize", "type": "object"},
        "pooling": {"key": "typeProperties.pooling", "type": "object"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
        "always_encrypted_settings": {
            "key": "typeProperties.alwaysEncryptedSettings",
            "type": "SqlAlwaysEncryptedProperties",
        },
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.SqlServerAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "Windows", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.SqlServerAuthenticationType
        :keyword user_name: The on-premises Windows authentication user name. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The on-premises Windows authentication password.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "SqlServer"
        self.server = server
        self.database = database
        self.encrypt = encrypt
        self.trust_server_certificate = trust_server_certificate
        self.host_name_in_certificate = host_name_in_certificate
        self.application_intent = application_intent
        self.connect_timeout = connect_timeout
        self.connect_retry_count = connect_retry_count
        self.connect_retry_interval = connect_retry_interval
        self.load_balance_timeout = load_balance_timeout
        self.command_timeout = command_timeout
        self.integrated_security = integrated_security
        self.failover_partner = failover_partner
        self.max_pool_size = max_pool_size
        self.min_pool_size = min_pool_size
        self.multiple_active_result_sets = multiple_active_result_sets
        self.multi_subnet_failover = multi_subnet_failover
        self.packet_size = packet_size
        self.pooling = pooling
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.always_encrypted_settings = always_encrypted_settings
        self.credential = credential


class SqlServerLinkedServiceTypeProperties(
    SqlServerBaseLinkedServiceTypeProperties
):  # pylint: disable=too-many-instance-attributes
    """SQL Server linked service properties.

    :ivar server: The name or network address of the instance of SQL Server to which to connect,
     used by recommended version. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar database: The name of the database, used by recommended version. Type: string (or
     Expression with resultType string).
    :vartype database: JSON
    :ivar encrypt: Indicate whether TLS encryption is required for all data sent between the client
     and server, used by recommended version. Possible values are true/yes/mandatory,
     false/no/optional and strict. Type: string (or Expression with resultType string).
    :vartype encrypt: JSON
    :ivar trust_server_certificate: Indicate whether the channel will be encrypted while bypassing
     walking the certificate chain to validate trust, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype trust_server_certificate: JSON
    :ivar host_name_in_certificate: The host name to use when validating the server certificate for
     the connection. When not specified, the server name from the Data Source is used for
     certificate validation, used by recommended version. Type: string (or Expression with
     resultType string).
    :vartype host_name_in_certificate: JSON
    :ivar application_intent: The application workload type when connecting to a server, used by
     recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
     with resultType string).
    :vartype application_intent: JSON
    :ivar connect_timeout: The length of time (in seconds) to wait for a connection to the server
     before terminating the attempt and generating an error, used by recommended version. Type:
     integer (or Expression with resultType integer).
    :vartype connect_timeout: JSON
    :ivar connect_retry_count: The number of re-connections attempted after identifying that there
     was an idle connection failure, used by recommended version. This must be an integer between 0
     and 255. Type: integer (or Expression with resultType integer).
    :vartype connect_retry_count: JSON
    :ivar connect_retry_interval: The amount of time (in seconds) between each re-connection
     attempt after identifying that there was an idle connection failure, used by recommended
     version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
     integer).
    :vartype connect_retry_interval: JSON
    :ivar load_balance_timeout: The minimum time, in seconds, for the connection to live in the
     connection pool before being destroyed, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype load_balance_timeout: JSON
    :ivar command_timeout: The default wait time (in seconds) before terminating the attempt to
     execute a command and generating an error, used by recommended version. Type: integer (or
     Expression with resultType integer).
    :vartype command_timeout: JSON
    :ivar integrated_security: Indicate whether User ID and Password are specified in the
     connection (when false) or whether the current Windows account credentials are used for
     authentication (when true), used by recommended version. Type: Boolean (or Expression with
     resultType boolean).
    :vartype integrated_security: JSON
    :ivar failover_partner: The name or address of the partner server to connect to if the primary
     server is down, used by recommended version. Type: string (or Expression with resultType
     string).
    :vartype failover_partner: JSON
    :ivar max_pool_size: The maximum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype max_pool_size: JSON
    :ivar min_pool_size: The minimum number of connections allowed in the connection pool for this
     specific connection string, used by recommended version. Type: integer (or Expression with
     resultType integer).
    :vartype min_pool_size: JSON
    :ivar multiple_active_result_sets: When true, an application can maintain multiple active
     result sets (MARS). When false, an application must process or cancel all result sets from one
     batch before it can execute any other batch on that connection. Type: Boolean (or Expression
     with resultType boolean).
    :vartype multiple_active_result_sets: JSON
    :ivar multi_subnet_failover: If your application is connecting to an AlwaysOn availability
     group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
     and connection to the (currently) active server, used by recommended version. Type: Boolean (or
     Expression with resultType boolean).
    :vartype multi_subnet_failover: JSON
    :ivar packet_size: The size in bytes of the network packets used to communicate with an
     instance of server, used by recommended version. Type: integer (or Expression with resultType
     integer).
    :vartype packet_size: JSON
    :ivar pooling: Indicate whether the connection will be pooled or explicitly opened every time
     that the connection is requested, used by recommended version. Type: Boolean (or Expression
     with resultType boolean).
    :vartype pooling: JSON
    :ivar connection_string: The connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar authentication_type: The type used for authentication. Type: string. Known values are:
     "SQL", "Windows", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.SqlServerAuthenticationType
    :ivar user_name: The on-premises Windows authentication user name. Type: string (or Expression
     with resultType string).
    :vartype user_name: JSON
    :ivar password: The on-premises Windows authentication password.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    :ivar always_encrypted_settings: Sql always encrypted properties.
    :vartype always_encrypted_settings:
     ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _attribute_map = {
        "server": {"key": "server", "type": "object"},
        "database": {"key": "database", "type": "object"},
        "encrypt": {"key": "encrypt", "type": "object"},
        "trust_server_certificate": {"key": "trustServerCertificate", "type": "object"},
        "host_name_in_certificate": {"key": "hostNameInCertificate", "type": "object"},
        "application_intent": {"key": "applicationIntent", "type": "object"},
        "connect_timeout": {"key": "connectTimeout", "type": "object"},
        "connect_retry_count": {"key": "connectRetryCount", "type": "object"},
        "connect_retry_interval": {"key": "connectRetryInterval", "type": "object"},
        "load_balance_timeout": {"key": "loadBalanceTimeout", "type": "object"},
        "command_timeout": {"key": "commandTimeout", "type": "object"},
        "integrated_security": {"key": "integratedSecurity", "type": "object"},
        "failover_partner": {"key": "failoverPartner", "type": "object"},
        "max_pool_size": {"key": "maxPoolSize", "type": "object"},
        "min_pool_size": {"key": "minPoolSize", "type": "object"},
        "multiple_active_result_sets": {"key": "multipleActiveResultSets", "type": "object"},
        "multi_subnet_failover": {"key": "multiSubnetFailover", "type": "object"},
        "packet_size": {"key": "packetSize", "type": "object"},
        "pooling": {"key": "pooling", "type": "object"},
        "connection_string": {"key": "connectionString", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "SecretBase"},
        "encrypted_credential": {"key": "encryptedCredential", "type": "object"},
        "always_encrypted_settings": {"key": "alwaysEncryptedSettings", "type": "SqlAlwaysEncryptedProperties"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        server: Optional[JSON] = None,
        database: Optional[JSON] = None,
        encrypt: Optional[JSON] = None,
        trust_server_certificate: Optional[JSON] = None,
        host_name_in_certificate: Optional[JSON] = None,
        application_intent: Optional[JSON] = None,
        connect_timeout: Optional[JSON] = None,
        connect_retry_count: Optional[JSON] = None,
        connect_retry_interval: Optional[JSON] = None,
        load_balance_timeout: Optional[JSON] = None,
        command_timeout: Optional[JSON] = None,
        integrated_security: Optional[JSON] = None,
        failover_partner: Optional[JSON] = None,
        max_pool_size: Optional[JSON] = None,
        min_pool_size: Optional[JSON] = None,
        multiple_active_result_sets: Optional[JSON] = None,
        multi_subnet_failover: Optional[JSON] = None,
        packet_size: Optional[JSON] = None,
        pooling: Optional[JSON] = None,
        connection_string: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.SqlServerAuthenticationType"]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        always_encrypted_settings: Optional["_models.SqlAlwaysEncryptedProperties"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword server: The name or network address of the instance of SQL Server to which to connect,
         used by recommended version. Type: string (or Expression with resultType string).
        :paramtype server: JSON
        :keyword database: The name of the database, used by recommended version. Type: string (or
         Expression with resultType string).
        :paramtype database: JSON
        :keyword encrypt: Indicate whether TLS encryption is required for all data sent between the
         client and server, used by recommended version. Possible values are true/yes/mandatory,
         false/no/optional and strict. Type: string (or Expression with resultType string).
        :paramtype encrypt: JSON
        :keyword trust_server_certificate: Indicate whether the channel will be encrypted while
         bypassing walking the certificate chain to validate trust, used by recommended version. Type:
         Boolean (or Expression with resultType boolean).
        :paramtype trust_server_certificate: JSON
        :keyword host_name_in_certificate: The host name to use when validating the server certificate
         for the connection. When not specified, the server name from the Data Source is used for
         certificate validation, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype host_name_in_certificate: JSON
        :keyword application_intent: The application workload type when connecting to a server, used by
         recommended version. Possible values are ReadOnly and ReadWrite. Type: string (or Expression
         with resultType string).
        :paramtype application_intent: JSON
        :keyword connect_timeout: The length of time (in seconds) to wait for a connection to the
         server before terminating the attempt and generating an error, used by recommended version.
         Type: integer (or Expression with resultType integer).
        :paramtype connect_timeout: JSON
        :keyword connect_retry_count: The number of re-connections attempted after identifying that
         there was an idle connection failure, used by recommended version. This must be an integer
         between 0 and 255. Type: integer (or Expression with resultType integer).
        :paramtype connect_retry_count: JSON
        :keyword connect_retry_interval: The amount of time (in seconds) between each re-connection
         attempt after identifying that there was an idle connection failure, used by recommended
         version. This must be an integer between 1 and 60. Type: integer (or Expression with resultType
         integer).
        :paramtype connect_retry_interval: JSON
        :keyword load_balance_timeout: The minimum time, in seconds, for the connection to live in the
         connection pool before being destroyed, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype load_balance_timeout: JSON
        :keyword command_timeout: The default wait time (in seconds) before terminating the attempt to
         execute a command and generating an error, used by recommended version. Type: integer (or
         Expression with resultType integer).
        :paramtype command_timeout: JSON
        :keyword integrated_security: Indicate whether User ID and Password are specified in the
         connection (when false) or whether the current Windows account credentials are used for
         authentication (when true), used by recommended version. Type: Boolean (or Expression with
         resultType boolean).
        :paramtype integrated_security: JSON
        :keyword failover_partner: The name or address of the partner server to connect to if the
         primary server is down, used by recommended version. Type: string (or Expression with
         resultType string).
        :paramtype failover_partner: JSON
        :keyword max_pool_size: The maximum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype max_pool_size: JSON
        :keyword min_pool_size: The minimum number of connections allowed in the connection pool for
         this specific connection string, used by recommended version. Type: integer (or Expression with
         resultType integer).
        :paramtype min_pool_size: JSON
        :keyword multiple_active_result_sets: When true, an application can maintain multiple active
         result sets (MARS). When false, an application must process or cancel all result sets from one
         batch before it can execute any other batch on that connection. Type: Boolean (or Expression
         with resultType boolean).
        :paramtype multiple_active_result_sets: JSON
        :keyword multi_subnet_failover: If your application is connecting to an AlwaysOn availability
         group (AG) on different subnets, setting MultiSubnetFailover=true provides faster detection of
         and connection to the (currently) active server, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype multi_subnet_failover: JSON
        :keyword packet_size: The size in bytes of the network packets used to communicate with an
         instance of server, used by recommended version. Type: integer (or Expression with resultType
         integer).
        :paramtype packet_size: JSON
        :keyword pooling: Indicate whether the connection will be pooled or explicitly opened every
         time that the connection is requested, used by recommended version. Type: Boolean (or
         Expression with resultType boolean).
        :paramtype pooling: JSON
        :keyword connection_string: The connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword authentication_type: The type used for authentication. Type: string. Known values are:
         "SQL", "Windows", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.SqlServerAuthenticationType
        :keyword user_name: The on-premises Windows authentication user name. Type: string (or
         Expression with resultType string).
        :paramtype user_name: JSON
        :keyword password: The on-premises Windows authentication password.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        :keyword always_encrypted_settings: Sql always encrypted properties.
        :paramtype always_encrypted_settings:
         ~azure.synapse.artifacts.models.SqlAlwaysEncryptedProperties
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            server=server,
            database=database,
            encrypt=encrypt,
            trust_server_certificate=trust_server_certificate,
            host_name_in_certificate=host_name_in_certificate,
            application_intent=application_intent,
            connect_timeout=connect_timeout,
            connect_retry_count=connect_retry_count,
            connect_retry_interval=connect_retry_interval,
            load_balance_timeout=load_balance_timeout,
            command_timeout=command_timeout,
            integrated_security=integrated_security,
            failover_partner=failover_partner,
            max_pool_size=max_pool_size,
            min_pool_size=min_pool_size,
            multiple_active_result_sets=multiple_active_result_sets,
            multi_subnet_failover=multi_subnet_failover,
            packet_size=packet_size,
            pooling=pooling,
            **kwargs
        )
        self.connection_string = connection_string
        self.authentication_type = authentication_type
        self.user_name = user_name
        self.password = password
        self.encrypted_credential = encrypted_credential
        self.always_encrypted_settings = always_encrypted_settings
        self.credential = credential


class SqlServerSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL server sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
     Expression with resultType string).
    :vartype sql_writer_stored_procedure_name: JSON
    :ivar sql_writer_table_type: SQL writer table type. Type: string (or Expression with resultType
     string).
    :vartype sql_writer_table_type: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar stored_procedure_parameters: SQL stored procedure parameters.
    :vartype stored_procedure_parameters: JSON
    :ivar stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
     table type. Type: string (or Expression with resultType string).
    :vartype stored_procedure_table_type_parameter_name: JSON
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "sql_writer_stored_procedure_name": {"key": "sqlWriterStoredProcedureName", "type": "object"},
        "sql_writer_table_type": {"key": "sqlWriterTableType", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "stored_procedure_table_type_parameter_name": {
            "key": "storedProcedureTableTypeParameterName",
            "type": "object",
        },
        "table_option": {"key": "tableOption", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        sql_writer_stored_procedure_name: Optional[JSON] = None,
        sql_writer_table_type: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        stored_procedure_table_type_parameter_name: Optional[JSON] = None,
        table_option: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
         Expression with resultType string).
        :paramtype sql_writer_stored_procedure_name: JSON
        :keyword sql_writer_table_type: SQL writer table type. Type: string (or Expression with
         resultType string).
        :paramtype sql_writer_table_type: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword stored_procedure_parameters: SQL stored procedure parameters.
        :paramtype stored_procedure_parameters: JSON
        :keyword stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
         table type. Type: string (or Expression with resultType string).
        :paramtype stored_procedure_table_type_parameter_name: JSON
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SqlServerSink"
        self.sql_writer_stored_procedure_name = sql_writer_stored_procedure_name
        self.sql_writer_table_type = sql_writer_table_type
        self.pre_copy_script = pre_copy_script
        self.stored_procedure_parameters = stored_procedure_parameters
        self.stored_procedure_table_type_parameter_name = stored_procedure_table_type_parameter_name
        self.table_option = table_option


class SqlServerSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL reader query. Type: string (or Expression with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database source.
     This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression with
     resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar produce_additional_types: Which additional types to produce.
    :vartype produce_additional_types: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "produce_additional_types": {"key": "produceAdditionalTypes", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        produce_additional_types: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL reader query. Type: string (or Expression with resultType
         string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database
         source. This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression
         with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword produce_additional_types: Which additional types to produce.
        :paramtype produce_additional_types: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SqlServerSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.produce_additional_types = produce_additional_types
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class SqlServerStoredProcedureActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """SQL stored procedure activity type.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar stored_procedure_name: Stored procedure name. Type: string (or Expression with resultType
     string). Required.
    :vartype stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "stored_procedure_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "stored_procedure_name": {"key": "typeProperties.storedProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "typeProperties.storedProcedureParameters", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        stored_procedure_name: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword stored_procedure_name: Stored procedure name. Type: string (or Expression with
         resultType string). Required.
        :paramtype stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "SqlServerStoredProcedure"
        self.stored_procedure_name = stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters


class SqlServerTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The on-premises SQL Server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar schema_type_properties_schema: The schema name of the SQL Server dataset. Type: string
     (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the SQL Server dataset. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword schema_type_properties_schema: The schema name of the SQL Server dataset. Type: string
         (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the SQL Server dataset. Type: string (or Expression with
         resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SqlServerTable"
        self.table_name = table_name
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class SqlSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
     Expression with resultType string).
    :vartype sql_writer_stored_procedure_name: JSON
    :ivar sql_writer_table_type: SQL writer table type. Type: string (or Expression with resultType
     string).
    :vartype sql_writer_table_type: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar stored_procedure_parameters: SQL stored procedure parameters.
    :vartype stored_procedure_parameters: JSON
    :ivar stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
     table type. Type: string (or Expression with resultType string).
    :vartype stored_procedure_table_type_parameter_name: JSON
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "sql_writer_stored_procedure_name": {"key": "sqlWriterStoredProcedureName", "type": "object"},
        "sql_writer_table_type": {"key": "sqlWriterTableType", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "stored_procedure_table_type_parameter_name": {
            "key": "storedProcedureTableTypeParameterName",
            "type": "object",
        },
        "table_option": {"key": "tableOption", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        sql_writer_stored_procedure_name: Optional[JSON] = None,
        sql_writer_table_type: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        stored_procedure_table_type_parameter_name: Optional[JSON] = None,
        table_option: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword sql_writer_stored_procedure_name: SQL writer stored procedure name. Type: string (or
         Expression with resultType string).
        :paramtype sql_writer_stored_procedure_name: JSON
        :keyword sql_writer_table_type: SQL writer table type. Type: string (or Expression with
         resultType string).
        :paramtype sql_writer_table_type: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword stored_procedure_parameters: SQL stored procedure parameters.
        :paramtype stored_procedure_parameters: JSON
        :keyword stored_procedure_table_type_parameter_name: The stored procedure parameter name of the
         table type. Type: string (or Expression with resultType string).
        :paramtype stored_procedure_table_type_parameter_name: JSON
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "SqlSink"
        self.sql_writer_stored_procedure_name = sql_writer_stored_procedure_name
        self.sql_writer_table_type = sql_writer_table_type
        self.pre_copy_script = pre_copy_script
        self.stored_procedure_parameters = stored_procedure_parameters
        self.stored_procedure_table_type_parameter_name = stored_procedure_table_type_parameter_name
        self.table_option = table_option


class SqlSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity SQL source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: SQL reader query. Type: string (or Expression with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database source.
     This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression with
     resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}".
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the SQL source. Allowed
     values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value
     is ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: SQL reader query. Type: string (or Expression with resultType
         string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a SQL Database
         source. This cannot be used at the same time as SqlReaderQuery. Type: string (or Expression
         with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}".
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the SQL source.
         Allowed values: ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default
         value is ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SqlSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class SquareLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Square Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to Square. It is mutually exclusive
     with any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar host: The URL of the Square instance. (i.e. mystore.mysquare.com). Required.
    :vartype host: JSON
    :ivar client_id: The client ID associated with your Square application. Required.
    :vartype client_id: JSON
    :ivar client_secret: The client secret associated with your Square application.
    :vartype client_secret: ~azure.synapse.artifacts.models.SecretBase
    :ivar redirect_uri: The redirect URL assigned in the Square application dashboard. (i.e.
     http://localhost:2500). Required.
    :vartype redirect_uri: JSON
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
        "client_id": {"required": True},
        "redirect_uri": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "client_id": {"key": "typeProperties.clientId", "type": "object"},
        "client_secret": {"key": "typeProperties.clientSecret", "type": "SecretBase"},
        "redirect_uri": {"key": "typeProperties.redirectUri", "type": "object"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        client_id: JSON,
        redirect_uri: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        client_secret: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to Square. It is mutually exclusive
         with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword host: The URL of the Square instance. (i.e. mystore.mysquare.com). Required.
        :paramtype host: JSON
        :keyword client_id: The client ID associated with your Square application. Required.
        :paramtype client_id: JSON
        :keyword client_secret: The client secret associated with your Square application.
        :paramtype client_secret: ~azure.synapse.artifacts.models.SecretBase
        :keyword redirect_uri: The redirect URL assigned in the Square application dashboard. (i.e.
         http://localhost:2500). Required.
        :paramtype redirect_uri: JSON
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Square"
        self.connection_properties = connection_properties
        self.host = host
        self.client_id = client_id
        self.client_secret = client_secret
        self.redirect_uri = redirect_uri
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class SquareObjectDataset(Dataset):
    """Square Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SquareObject"
        self.table_name = table_name


class SquareSource(TabularSource):
    """A copy activity Square Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SquareSource"
        self.query = query


class SSISAccessCredential(_serialization.Model):
    """SSIS access credential.

    All required parameters must be populated in order to send to Azure.

    :ivar domain: Domain for windows authentication. Required.
    :vartype domain: JSON
    :ivar user_name: UseName for windows authentication. Required.
    :vartype user_name: JSON
    :ivar password: Password for windows authentication. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "domain": {"required": True},
        "user_name": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "domain": {"key": "domain", "type": "object"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "SecretBase"},
    }

    def __init__(self, *, domain: JSON, user_name: JSON, password: "_models.SecretBase", **kwargs: Any) -> None:
        """
        :keyword domain: Domain for windows authentication. Required.
        :paramtype domain: JSON
        :keyword user_name: UseName for windows authentication. Required.
        :paramtype user_name: JSON
        :keyword password: Password for windows authentication. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(**kwargs)
        self.domain = domain
        self.user_name = user_name
        self.password = password


class SSISChildPackage(_serialization.Model):
    """SSIS embedded child package.

    All required parameters must be populated in order to send to Azure.

    :ivar package_path: Path for embedded child package. Type: string (or Expression with
     resultType string). Required.
    :vartype package_path: JSON
    :ivar package_name: Name for embedded child package.
    :vartype package_name: str
    :ivar package_content: Content for embedded child package. Type: string (or Expression with
     resultType string). Required.
    :vartype package_content: JSON
    :ivar package_last_modified_date: Last modified date for embedded child package.
    :vartype package_last_modified_date: str
    """

    _validation = {
        "package_path": {"required": True},
        "package_content": {"required": True},
    }

    _attribute_map = {
        "package_path": {"key": "packagePath", "type": "object"},
        "package_name": {"key": "packageName", "type": "str"},
        "package_content": {"key": "packageContent", "type": "object"},
        "package_last_modified_date": {"key": "packageLastModifiedDate", "type": "str"},
    }

    def __init__(
        self,
        *,
        package_path: JSON,
        package_content: JSON,
        package_name: Optional[str] = None,
        package_last_modified_date: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword package_path: Path for embedded child package. Type: string (or Expression with
         resultType string). Required.
        :paramtype package_path: JSON
        :keyword package_name: Name for embedded child package.
        :paramtype package_name: str
        :keyword package_content: Content for embedded child package. Type: string (or Expression with
         resultType string). Required.
        :paramtype package_content: JSON
        :keyword package_last_modified_date: Last modified date for embedded child package.
        :paramtype package_last_modified_date: str
        """
        super().__init__(**kwargs)
        self.package_path = package_path
        self.package_name = package_name
        self.package_content = package_content
        self.package_last_modified_date = package_last_modified_date


class SSISExecutionCredential(_serialization.Model):
    """SSIS package execution credential.

    All required parameters must be populated in order to send to Azure.

    :ivar domain: Domain for windows authentication. Required.
    :vartype domain: JSON
    :ivar user_name: UseName for windows authentication. Required.
    :vartype user_name: JSON
    :ivar password: Password for windows authentication. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecureString
    """

    _validation = {
        "domain": {"required": True},
        "user_name": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "domain": {"key": "domain", "type": "object"},
        "user_name": {"key": "userName", "type": "object"},
        "password": {"key": "password", "type": "SecureString"},
    }

    def __init__(self, *, domain: JSON, user_name: JSON, password: "_models.SecureString", **kwargs: Any) -> None:
        """
        :keyword domain: Domain for windows authentication. Required.
        :paramtype domain: JSON
        :keyword user_name: UseName for windows authentication. Required.
        :paramtype user_name: JSON
        :keyword password: Password for windows authentication. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecureString
        """
        super().__init__(**kwargs)
        self.domain = domain
        self.user_name = user_name
        self.password = password


class SSISExecutionParameter(_serialization.Model):
    """SSIS execution parameter.

    All required parameters must be populated in order to send to Azure.

    :ivar value: SSIS package execution parameter value. Type: string (or Expression with
     resultType string). Required.
    :vartype value: JSON
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "object"},
    }

    def __init__(self, *, value: JSON, **kwargs: Any) -> None:
        """
        :keyword value: SSIS package execution parameter value. Type: string (or Expression with
         resultType string). Required.
        :paramtype value: JSON
        """
        super().__init__(**kwargs)
        self.value = value


class SSISLogLocation(_serialization.Model):
    """SSIS package execution log location.

    All required parameters must be populated in order to send to Azure.

    :ivar log_path: The SSIS package execution log path. Type: string (or Expression with
     resultType string). Required.
    :vartype log_path: JSON
    :ivar type: The type of SSIS log location. Required. "File"
    :vartype type: str or ~azure.synapse.artifacts.models.SsisLogLocationType
    :ivar access_credential: The package execution log access credential.
    :vartype access_credential: ~azure.synapse.artifacts.models.SSISAccessCredential
    :ivar log_refresh_interval: Specifies the interval to refresh log. The default interval is 5
     minutes. Type: string (or Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype log_refresh_interval: JSON
    """

    _validation = {
        "log_path": {"required": True},
        "type": {"required": True},
    }

    _attribute_map = {
        "log_path": {"key": "logPath", "type": "object"},
        "type": {"key": "type", "type": "str"},
        "access_credential": {"key": "typeProperties.accessCredential", "type": "SSISAccessCredential"},
        "log_refresh_interval": {"key": "typeProperties.logRefreshInterval", "type": "object"},
    }

    def __init__(
        self,
        *,
        log_path: JSON,
        type: Union[str, "_models.SsisLogLocationType"],
        access_credential: Optional["_models.SSISAccessCredential"] = None,
        log_refresh_interval: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword log_path: The SSIS package execution log path. Type: string (or Expression with
         resultType string). Required.
        :paramtype log_path: JSON
        :keyword type: The type of SSIS log location. Required. "File"
        :paramtype type: str or ~azure.synapse.artifacts.models.SsisLogLocationType
        :keyword access_credential: The package execution log access credential.
        :paramtype access_credential: ~azure.synapse.artifacts.models.SSISAccessCredential
        :keyword log_refresh_interval: Specifies the interval to refresh log. The default interval is 5
         minutes. Type: string (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype log_refresh_interval: JSON
        """
        super().__init__(**kwargs)
        self.log_path = log_path
        self.type = type
        self.access_credential = access_credential
        self.log_refresh_interval = log_refresh_interval


class SsisObjectMetadataStatusResponse(_serialization.Model):
    """The status of the operation.

    :ivar status: The status of the operation.
    :vartype status: str
    :ivar name: The operation name.
    :vartype name: str
    :ivar properties: The operation properties.
    :vartype properties: str
    :ivar error: The operation error message.
    :vartype error: str
    """

    _attribute_map = {
        "status": {"key": "status", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "properties": {"key": "properties", "type": "str"},
        "error": {"key": "error", "type": "str"},
    }

    def __init__(
        self,
        *,
        status: Optional[str] = None,
        name: Optional[str] = None,
        properties: Optional[str] = None,
        error: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword status: The status of the operation.
        :paramtype status: str
        :keyword name: The operation name.
        :paramtype name: str
        :keyword properties: The operation properties.
        :paramtype properties: str
        :keyword error: The operation error message.
        :paramtype error: str
        """
        super().__init__(**kwargs)
        self.status = status
        self.name = name
        self.properties = properties
        self.error = error


class SSISPackageLocation(_serialization.Model):
    """SSIS package location.

    :ivar package_path: The SSIS package path. Type: string (or Expression with resultType string).
    :vartype package_path: JSON
    :ivar type: The type of SSIS package location. Known values are: "SSISDB", "File",
     "InlinePackage", and "PackageStore".
    :vartype type: str or ~azure.synapse.artifacts.models.SsisPackageLocationType
    :ivar package_password: Password of the package.
    :vartype package_password: ~azure.synapse.artifacts.models.SecretBase
    :ivar access_credential: The package access credential.
    :vartype access_credential: ~azure.synapse.artifacts.models.SSISAccessCredential
    :ivar configuration_path: The configuration file of the package execution. Type: string (or
     Expression with resultType string).
    :vartype configuration_path: JSON
    :ivar configuration_access_credential: The configuration file access credential.
    :vartype configuration_access_credential: ~azure.synapse.artifacts.models.SSISAccessCredential
    :ivar package_name: The package name.
    :vartype package_name: str
    :ivar package_content: The embedded package content. Type: string (or Expression with
     resultType string).
    :vartype package_content: JSON
    :ivar package_last_modified_date: The embedded package last modified date.
    :vartype package_last_modified_date: str
    :ivar child_packages: The embedded child package list.
    :vartype child_packages: list[~azure.synapse.artifacts.models.SSISChildPackage]
    """

    _attribute_map = {
        "package_path": {"key": "packagePath", "type": "object"},
        "type": {"key": "type", "type": "str"},
        "package_password": {"key": "typeProperties.packagePassword", "type": "SecretBase"},
        "access_credential": {"key": "typeProperties.accessCredential", "type": "SSISAccessCredential"},
        "configuration_path": {"key": "typeProperties.configurationPath", "type": "object"},
        "configuration_access_credential": {
            "key": "typeProperties.configurationAccessCredential",
            "type": "SSISAccessCredential",
        },
        "package_name": {"key": "typeProperties.packageName", "type": "str"},
        "package_content": {"key": "typeProperties.packageContent", "type": "object"},
        "package_last_modified_date": {"key": "typeProperties.packageLastModifiedDate", "type": "str"},
        "child_packages": {"key": "typeProperties.childPackages", "type": "[SSISChildPackage]"},
    }

    def __init__(
        self,
        *,
        package_path: Optional[JSON] = None,
        type: Optional[Union[str, "_models.SsisPackageLocationType"]] = None,
        package_password: Optional["_models.SecretBase"] = None,
        access_credential: Optional["_models.SSISAccessCredential"] = None,
        configuration_path: Optional[JSON] = None,
        configuration_access_credential: Optional["_models.SSISAccessCredential"] = None,
        package_name: Optional[str] = None,
        package_content: Optional[JSON] = None,
        package_last_modified_date: Optional[str] = None,
        child_packages: Optional[List["_models.SSISChildPackage"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword package_path: The SSIS package path. Type: string (or Expression with resultType
         string).
        :paramtype package_path: JSON
        :keyword type: The type of SSIS package location. Known values are: "SSISDB", "File",
         "InlinePackage", and "PackageStore".
        :paramtype type: str or ~azure.synapse.artifacts.models.SsisPackageLocationType
        :keyword package_password: Password of the package.
        :paramtype package_password: ~azure.synapse.artifacts.models.SecretBase
        :keyword access_credential: The package access credential.
        :paramtype access_credential: ~azure.synapse.artifacts.models.SSISAccessCredential
        :keyword configuration_path: The configuration file of the package execution. Type: string (or
         Expression with resultType string).
        :paramtype configuration_path: JSON
        :keyword configuration_access_credential: The configuration file access credential.
        :paramtype configuration_access_credential:
         ~azure.synapse.artifacts.models.SSISAccessCredential
        :keyword package_name: The package name.
        :paramtype package_name: str
        :keyword package_content: The embedded package content. Type: string (or Expression with
         resultType string).
        :paramtype package_content: JSON
        :keyword package_last_modified_date: The embedded package last modified date.
        :paramtype package_last_modified_date: str
        :keyword child_packages: The embedded child package list.
        :paramtype child_packages: list[~azure.synapse.artifacts.models.SSISChildPackage]
        """
        super().__init__(**kwargs)
        self.package_path = package_path
        self.type = type
        self.package_password = package_password
        self.access_credential = access_credential
        self.configuration_path = configuration_path
        self.configuration_access_credential = configuration_access_credential
        self.package_name = package_name
        self.package_content = package_content
        self.package_last_modified_date = package_last_modified_date
        self.child_packages = child_packages


class SSISPropertyOverride(_serialization.Model):
    """SSIS property override.

    All required parameters must be populated in order to send to Azure.

    :ivar value: SSIS package property override value. Type: string (or Expression with resultType
     string). Required.
    :vartype value: JSON
    :ivar is_sensitive: Whether SSIS package property override value is sensitive data. Value will
     be encrypted in SSISDB if it is true.
    :vartype is_sensitive: bool
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "object"},
        "is_sensitive": {"key": "isSensitive", "type": "bool"},
    }

    def __init__(self, *, value: JSON, is_sensitive: Optional[bool] = None, **kwargs: Any) -> None:
        """
        :keyword value: SSIS package property override value. Type: string (or Expression with
         resultType string). Required.
        :paramtype value: JSON
        :keyword is_sensitive: Whether SSIS package property override value is sensitive data. Value
         will be encrypted in SSISDB if it is true.
        :paramtype is_sensitive: bool
        """
        super().__init__(**kwargs)
        self.value = value
        self.is_sensitive = is_sensitive


class StagingSettings(_serialization.Model):
    """Staging settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar linked_service_name: Staging linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar path: The path to storage for storing the interim data. Type: string (or Expression with
     resultType string).
    :vartype path: JSON
    :ivar enable_compression: Specifies whether to use compression when copying data via an interim
     staging. Default value is false. Type: boolean (or Expression with resultType boolean).
    :vartype enable_compression: JSON
    """

    _validation = {
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "path": {"key": "path", "type": "object"},
        "enable_compression": {"key": "enableCompression", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        path: Optional[JSON] = None,
        enable_compression: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword linked_service_name: Staging linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword path: The path to storage for storing the interim data. Type: string (or Expression
         with resultType string).
        :paramtype path: JSON
        :keyword enable_compression: Specifies whether to use compression when copying data via an
         interim staging. Default value is false. Type: boolean (or Expression with resultType boolean).
        :paramtype enable_compression: JSON
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.linked_service_name = linked_service_name
        self.path = path
        self.enable_compression = enable_compression


class StartDataFlowDebugSessionRequest(_serialization.Model):
    """Request body structure for starting data flow debug session.

    :ivar session_id: The ID of data flow debug session.
    :vartype session_id: str
    :ivar data_flow: Data flow instance.
    :vartype data_flow: ~azure.synapse.artifacts.models.DataFlowResource
    :ivar data_flows: List of Data flows.
    :vartype data_flows: list[~azure.synapse.artifacts.models.DataFlowResource]
    :ivar datasets: List of datasets.
    :vartype datasets: list[~azure.synapse.artifacts.models.DatasetResource]
    :ivar linked_services: List of linked services.
    :vartype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceResource]
    :ivar staging: Staging info for debug session.
    :vartype staging: JSON
    :ivar debug_settings: Data flow debug settings.
    :vartype debug_settings: JSON
    :ivar incremental_debug: The type of new Databricks cluster.
    :vartype incremental_debug: bool
    """

    _attribute_map = {
        "session_id": {"key": "sessionId", "type": "str"},
        "data_flow": {"key": "dataFlow", "type": "DataFlowResource"},
        "data_flows": {"key": "dataFlows", "type": "[DataFlowResource]"},
        "datasets": {"key": "datasets", "type": "[DatasetResource]"},
        "linked_services": {"key": "linkedServices", "type": "[LinkedServiceResource]"},
        "staging": {"key": "staging", "type": "object"},
        "debug_settings": {"key": "debugSettings", "type": "object"},
        "incremental_debug": {"key": "incrementalDebug", "type": "bool"},
    }

    def __init__(
        self,
        *,
        session_id: Optional[str] = None,
        data_flow: Optional["_models.DataFlowResource"] = None,
        data_flows: Optional[List["_models.DataFlowResource"]] = None,
        datasets: Optional[List["_models.DatasetResource"]] = None,
        linked_services: Optional[List["_models.LinkedServiceResource"]] = None,
        staging: Optional[JSON] = None,
        debug_settings: Optional[JSON] = None,
        incremental_debug: Optional[bool] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword session_id: The ID of data flow debug session.
        :paramtype session_id: str
        :keyword data_flow: Data flow instance.
        :paramtype data_flow: ~azure.synapse.artifacts.models.DataFlowResource
        :keyword data_flows: List of Data flows.
        :paramtype data_flows: list[~azure.synapse.artifacts.models.DataFlowResource]
        :keyword datasets: List of datasets.
        :paramtype datasets: list[~azure.synapse.artifacts.models.DatasetResource]
        :keyword linked_services: List of linked services.
        :paramtype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceResource]
        :keyword staging: Staging info for debug session.
        :paramtype staging: JSON
        :keyword debug_settings: Data flow debug settings.
        :paramtype debug_settings: JSON
        :keyword incremental_debug: The type of new Databricks cluster.
        :paramtype incremental_debug: bool
        """
        super().__init__(**kwargs)
        self.session_id = session_id
        self.data_flow = data_flow
        self.data_flows = data_flows
        self.datasets = datasets
        self.linked_services = linked_services
        self.staging = staging
        self.debug_settings = debug_settings
        self.incremental_debug = incremental_debug


class StartDataFlowDebugSessionResponse(_serialization.Model):
    """Response body structure for starting data flow debug session.

    :ivar job_version: The ID of data flow debug job version.
    :vartype job_version: str
    """

    _attribute_map = {
        "job_version": {"key": "jobVersion", "type": "str"},
    }

    def __init__(self, *, job_version: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword job_version: The ID of data flow debug job version.
        :paramtype job_version: str
        """
        super().__init__(**kwargs)
        self.job_version = job_version


class StoredProcedureParameter(_serialization.Model):
    """SQL stored procedure parameter.

    :ivar value: Stored procedure parameter value. Type: string (or Expression with resultType
     string).
    :vartype value: JSON
    :ivar type: Stored procedure parameter type. Known values are: "String", "Int", "Int64",
     "Decimal", "Guid", "Boolean", and "Date".
    :vartype type: str or ~azure.synapse.artifacts.models.StoredProcedureParameterType
    """

    _attribute_map = {
        "value": {"key": "value", "type": "object"},
        "type": {"key": "type", "type": "str"},
    }

    def __init__(
        self,
        *,
        value: Optional[JSON] = None,
        type: Optional[Union[str, "_models.StoredProcedureParameterType"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword value: Stored procedure parameter value. Type: string (or Expression with resultType
         string).
        :paramtype value: JSON
        :keyword type: Stored procedure parameter type. Known values are: "String", "Int", "Int64",
         "Decimal", "Guid", "Boolean", and "Date".
        :paramtype type: str or ~azure.synapse.artifacts.models.StoredProcedureParameterType
        """
        super().__init__(**kwargs)
        self.value = value
        self.type = type


class SwitchActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """This activity evaluates an expression and executes activities under the cases property that
    correspond to the expression evaluation expected in the equals property.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar on: An expression that would evaluate to a string or integer. This is used to determine
     the block of activities in cases that will be executed. Required.
    :vartype on: ~azure.synapse.artifacts.models.Expression
    :ivar cases: List of cases that correspond to expected values of the 'on' property. This is an
     optional property and if not provided, the activity will execute activities provided in
     defaultActivities.
    :vartype cases: list[~azure.synapse.artifacts.models.SwitchCase]
    :ivar default_activities: List of activities to execute if no case condition is satisfied. This
     is an optional property and if not provided, the activity will exit without any action.
    :vartype default_activities: list[~azure.synapse.artifacts.models.Activity]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "on": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "on": {"key": "typeProperties.on", "type": "Expression"},
        "cases": {"key": "typeProperties.cases", "type": "[SwitchCase]"},
        "default_activities": {"key": "typeProperties.defaultActivities", "type": "[Activity]"},
    }

    def __init__(
        self,
        *,
        name: str,
        on: "_models.Expression",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        cases: Optional[List["_models.SwitchCase"]] = None,
        default_activities: Optional[List["_models.Activity"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword on: An expression that would evaluate to a string or integer. This is used to
         determine the block of activities in cases that will be executed. Required.
        :paramtype on: ~azure.synapse.artifacts.models.Expression
        :keyword cases: List of cases that correspond to expected values of the 'on' property. This is
         an optional property and if not provided, the activity will execute activities provided in
         defaultActivities.
        :paramtype cases: list[~azure.synapse.artifacts.models.SwitchCase]
        :keyword default_activities: List of activities to execute if no case condition is satisfied.
         This is an optional property and if not provided, the activity will exit without any action.
        :paramtype default_activities: list[~azure.synapse.artifacts.models.Activity]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Switch"
        self.on = on
        self.cases = cases
        self.default_activities = default_activities


class SwitchCase(_serialization.Model):
    """Switch cases with have a value and corresponding activities.

    :ivar value: Expected value that satisfies the expression result of the 'on' property.
    :vartype value: str
    :ivar activities: List of activities to execute for satisfied case condition.
    :vartype activities: list[~azure.synapse.artifacts.models.Activity]
    """

    _attribute_map = {
        "value": {"key": "value", "type": "str"},
        "activities": {"key": "activities", "type": "[Activity]"},
    }

    def __init__(
        self, *, value: Optional[str] = None, activities: Optional[List["_models.Activity"]] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: Expected value that satisfies the expression result of the 'on' property.
        :paramtype value: str
        :keyword activities: List of activities to execute for satisfied case condition.
        :paramtype activities: list[~azure.synapse.artifacts.models.Activity]
        """
        super().__init__(**kwargs)
        self.value = value
        self.activities = activities


class SybaseLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Sybase data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar server: Server name for connection. Type: string (or Expression with resultType string).
     Required.
    :vartype server: JSON
    :ivar database: Database name for connection. Type: string (or Expression with resultType
     string). Required.
    :vartype database: JSON
    :ivar schema: Schema name for connection. Type: string (or Expression with resultType string).
    :vartype schema: JSON
    :ivar authentication_type: AuthenticationType to be used for connection. Known values are:
     "Basic" and "Windows".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.SybaseAuthenticationType
    :ivar username: Username for authentication. Type: string (or Expression with resultType
     string).
    :vartype username: JSON
    :ivar password: Password for authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "server": {"required": True},
        "database": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "schema": {"key": "typeProperties.schema", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        server: JSON,
        database: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        schema: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.SybaseAuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword server: Server name for connection. Type: string (or Expression with resultType
         string). Required.
        :paramtype server: JSON
        :keyword database: Database name for connection. Type: string (or Expression with resultType
         string). Required.
        :paramtype database: JSON
        :keyword schema: Schema name for connection. Type: string (or Expression with resultType
         string).
        :paramtype schema: JSON
        :keyword authentication_type: AuthenticationType to be used for connection. Known values are:
         "Basic" and "Windows".
        :paramtype authentication_type: str or ~azure.synapse.artifacts.models.SybaseAuthenticationType
        :keyword username: Username for authentication. Type: string (or Expression with resultType
         string).
        :paramtype username: JSON
        :keyword password: Password for authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Sybase"
        self.server = server
        self.database = database
        self.schema = schema
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.encrypted_credential = encrypted_credential


class SybaseSource(TabularSource):
    """A copy activity source for Sybase databases.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Database query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Database query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "SybaseSource"
        self.query = query


class SybaseTableDataset(Dataset):
    """The Sybase table dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The Sybase table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The Sybase table name. Type: string (or Expression with resultType
         string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "SybaseTable"
        self.table_name = table_name


class SynapseActivityAuthentication(_serialization.Model):
    """Synapse activity authentication properties.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Synapse activity authentication (MSI/UserAssignedManagedIdentity). Required.
    :vartype type: str
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(self, *, type: str, credential: Optional["_models.CredentialReference"] = None, **kwargs: Any) -> None:
        """
        :keyword type: Synapse activity authentication (MSI/UserAssignedManagedIdentity). Required.
        :paramtype type: str
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(**kwargs)
        self.type = type
        self.credential = credential


class SynapseNotebookActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Execute Synapse notebook activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar notebook: Synapse notebook reference. Required.
    :vartype notebook: ~azure.synapse.artifacts.models.SynapseNotebookReference
    :ivar spark_pool: The name of the big data pool which will be used to execute the notebook.
    :vartype spark_pool: ~azure.synapse.artifacts.models.BigDataPoolParametrizationReference
    :ivar parameters: Notebook parameters.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.NotebookParameter]
    :ivar executor_size: Number of core and memory to be used for executors allocated in the
     specified Spark pool for the session, which will be used for overriding 'executorCores' and
     'executorMemory' of the notebook you provide. Type: string (or Expression with resultType
     string).
    :vartype executor_size: JSON
    :ivar conf: Spark configuration properties, which will override the 'conf' of the notebook you
     provide.
    :vartype conf: JSON
    :ivar driver_size: Number of core and memory to be used for driver allocated in the specified
     Spark pool for the session, which will be used for overriding 'driverCores' and 'driverMemory'
     of the notebook you provide. Type: string (or Expression with resultType string).
    :vartype driver_size: JSON
    :ivar num_executors: Number of executors to launch for this session, which will override the
     'numExecutors' of the notebook you provide. Type: integer (or Expression with resultType
     integer).
    :vartype num_executors: JSON
    :ivar configuration_type: The type of the spark config. Known values are: "Default",
     "Customized", and "Artifact".
    :vartype configuration_type: str or ~azure.synapse.artifacts.models.ConfigurationType
    :ivar target_spark_configuration: The spark configuration of the spark job.
    :vartype target_spark_configuration:
     ~azure.synapse.artifacts.models.SparkConfigurationParametrizationReference
    :ivar spark_config: Spark configuration property.
    :vartype spark_config: dict[str, JSON]
    :ivar authentication: Authentication method used for executing the notebook.
    :vartype authentication: ~azure.synapse.artifacts.models.SynapseActivityAuthentication
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "notebook": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "notebook": {"key": "typeProperties.notebook", "type": "SynapseNotebookReference"},
        "spark_pool": {"key": "typeProperties.sparkPool", "type": "BigDataPoolParametrizationReference"},
        "parameters": {"key": "typeProperties.parameters", "type": "{NotebookParameter}"},
        "executor_size": {"key": "typeProperties.executorSize", "type": "object"},
        "conf": {"key": "typeProperties.conf", "type": "object"},
        "driver_size": {"key": "typeProperties.driverSize", "type": "object"},
        "num_executors": {"key": "typeProperties.numExecutors", "type": "object"},
        "configuration_type": {"key": "typeProperties.configurationType", "type": "str"},
        "target_spark_configuration": {
            "key": "typeProperties.targetSparkConfiguration",
            "type": "SparkConfigurationParametrizationReference",
        },
        "spark_config": {"key": "typeProperties.sparkConfig", "type": "{object}"},
        "authentication": {"key": "typeProperties.authentication", "type": "SynapseActivityAuthentication"},
    }

    def __init__(
        self,
        *,
        name: str,
        notebook: "_models.SynapseNotebookReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        spark_pool: Optional["_models.BigDataPoolParametrizationReference"] = None,
        parameters: Optional[Dict[str, "_models.NotebookParameter"]] = None,
        executor_size: Optional[JSON] = None,
        conf: Optional[JSON] = None,
        driver_size: Optional[JSON] = None,
        num_executors: Optional[JSON] = None,
        configuration_type: Optional[Union[str, "_models.ConfigurationType"]] = None,
        target_spark_configuration: Optional["_models.SparkConfigurationParametrizationReference"] = None,
        spark_config: Optional[Dict[str, JSON]] = None,
        authentication: Optional["_models.SynapseActivityAuthentication"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword notebook: Synapse notebook reference. Required.
        :paramtype notebook: ~azure.synapse.artifacts.models.SynapseNotebookReference
        :keyword spark_pool: The name of the big data pool which will be used to execute the notebook.
        :paramtype spark_pool: ~azure.synapse.artifacts.models.BigDataPoolParametrizationReference
        :keyword parameters: Notebook parameters.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.NotebookParameter]
        :keyword executor_size: Number of core and memory to be used for executors allocated in the
         specified Spark pool for the session, which will be used for overriding 'executorCores' and
         'executorMemory' of the notebook you provide. Type: string (or Expression with resultType
         string).
        :paramtype executor_size: JSON
        :keyword conf: Spark configuration properties, which will override the 'conf' of the notebook
         you provide.
        :paramtype conf: JSON
        :keyword driver_size: Number of core and memory to be used for driver allocated in the
         specified Spark pool for the session, which will be used for overriding 'driverCores' and
         'driverMemory' of the notebook you provide. Type: string (or Expression with resultType
         string).
        :paramtype driver_size: JSON
        :keyword num_executors: Number of executors to launch for this session, which will override the
         'numExecutors' of the notebook you provide. Type: integer (or Expression with resultType
         integer).
        :paramtype num_executors: JSON
        :keyword configuration_type: The type of the spark config. Known values are: "Default",
         "Customized", and "Artifact".
        :paramtype configuration_type: str or ~azure.synapse.artifacts.models.ConfigurationType
        :keyword target_spark_configuration: The spark configuration of the spark job.
        :paramtype target_spark_configuration:
         ~azure.synapse.artifacts.models.SparkConfigurationParametrizationReference
        :keyword spark_config: Spark configuration property.
        :paramtype spark_config: dict[str, JSON]
        :keyword authentication: Authentication method used for executing the notebook.
        :paramtype authentication: ~azure.synapse.artifacts.models.SynapseActivityAuthentication
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "SynapseNotebook"
        self.notebook = notebook
        self.spark_pool = spark_pool
        self.parameters = parameters
        self.executor_size = executor_size
        self.conf = conf
        self.driver_size = driver_size
        self.num_executors = num_executors
        self.configuration_type = configuration_type
        self.target_spark_configuration = target_spark_configuration
        self.spark_config = spark_config
        self.authentication = authentication


class SynapseNotebookReference(_serialization.Model):
    """Synapse notebook reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Synapse notebook reference type. Required. "NotebookReference"
    :vartype type: str or ~azure.synapse.artifacts.models.NotebookReferenceType
    :ivar reference_name: Reference notebook name. Type: string (or Expression with resultType
     string). Required.
    :vartype reference_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "object"},
    }

    def __init__(
        self, *, type: Union[str, "_models.NotebookReferenceType"], reference_name: JSON, **kwargs: Any
    ) -> None:
        """
        :keyword type: Synapse notebook reference type. Required. "NotebookReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.NotebookReferenceType
        :keyword reference_name: Reference notebook name. Type: string (or Expression with resultType
         string). Required.
        :paramtype reference_name: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class SynapseSparkJobDefinitionActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Execute spark job activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar spark_job: Synapse spark job reference. Required.
    :vartype spark_job: ~azure.synapse.artifacts.models.SynapseSparkJobReference
    :ivar arguments: User specified arguments to SynapseSparkJobDefinitionActivity.
    :vartype arguments: list[any]
    :ivar file: The main file used for the job, which will override the 'file' of the spark job
     definition you provide. Type: string (or Expression with resultType string).
    :vartype file: JSON
    :ivar scan_folder: Scanning subfolders from the root folder of the main definition file, these
     files will be added as reference files. The folders named 'jars', 'pyFiles', 'files' or
     'archives' will be scanned, and the folders name are case sensitive. Type: boolean (or
     Expression with resultType boolean).
    :vartype scan_folder: JSON
    :ivar class_name: The fully-qualified identifier or the main class that is in the main
     definition file, which will override the 'className' of the spark job definition you provide.
     Type: string (or Expression with resultType string).
    :vartype class_name: JSON
    :ivar files: (Deprecated. Please use pythonCodeReference and filesV2) Additional files used for
     reference in the main definition file, which will override the 'files' of the spark job
     definition you provide.
    :vartype files: list[JSON]
    :ivar python_code_reference: Additional python code files used for reference in the main
     definition file, which will override the 'pyFiles' of the spark job definition you provide.
    :vartype python_code_reference: list[JSON]
    :ivar files_v2: Additional files used for reference in the main definition file, which will
     override the 'jars' and 'files' of the spark job definition you provide.
    :vartype files_v2: list[JSON]
    :ivar target_big_data_pool: The name of the big data pool which will be used to execute the
     spark batch job, which will override the 'targetBigDataPool' of the spark job definition you
     provide.
    :vartype target_big_data_pool:
     ~azure.synapse.artifacts.models.BigDataPoolParametrizationReference
    :ivar executor_size: Number of core and memory to be used for executors allocated in the
     specified Spark pool for the job, which will be used for overriding 'executorCores' and
     'executorMemory' of the spark job definition you provide. Type: string (or Expression with
     resultType string).
    :vartype executor_size: JSON
    :ivar conf: Spark configuration properties, which will override the 'conf' of the spark job
     definition you provide.
    :vartype conf: JSON
    :ivar driver_size: Number of core and memory to be used for driver allocated in the specified
     Spark pool for the job, which will be used for overriding 'driverCores' and 'driverMemory' of
     the spark job definition you provide. Type: string (or Expression with resultType string).
    :vartype driver_size: JSON
    :ivar num_executors: Number of executors to launch for this job, which will override the
     'numExecutors' of the spark job definition you provide. Type: integer (or Expression with
     resultType integer).
    :vartype num_executors: JSON
    :ivar configuration_type: The type of the spark config. Known values are: "Default",
     "Customized", and "Artifact".
    :vartype configuration_type: str or ~azure.synapse.artifacts.models.ConfigurationType
    :ivar target_spark_configuration: The spark configuration of the spark job.
    :vartype target_spark_configuration:
     ~azure.synapse.artifacts.models.SparkConfigurationParametrizationReference
    :ivar spark_config: Spark configuration property.
    :vartype spark_config: dict[str, JSON]
    :ivar authentication: Authentication method used for executing the Spark job definition.
    :vartype authentication: ~azure.synapse.artifacts.models.SynapseActivityAuthentication
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "spark_job": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "spark_job": {"key": "typeProperties.sparkJob", "type": "SynapseSparkJobReference"},
        "arguments": {"key": "typeProperties.args", "type": "[object]"},
        "file": {"key": "typeProperties.file", "type": "object"},
        "scan_folder": {"key": "typeProperties.scanFolder", "type": "object"},
        "class_name": {"key": "typeProperties.className", "type": "object"},
        "files": {"key": "typeProperties.files", "type": "[object]"},
        "python_code_reference": {"key": "typeProperties.pythonCodeReference", "type": "[object]"},
        "files_v2": {"key": "typeProperties.filesV2", "type": "[object]"},
        "target_big_data_pool": {
            "key": "typeProperties.targetBigDataPool",
            "type": "BigDataPoolParametrizationReference",
        },
        "executor_size": {"key": "typeProperties.executorSize", "type": "object"},
        "conf": {"key": "typeProperties.conf", "type": "object"},
        "driver_size": {"key": "typeProperties.driverSize", "type": "object"},
        "num_executors": {"key": "typeProperties.numExecutors", "type": "object"},
        "configuration_type": {"key": "typeProperties.configurationType", "type": "str"},
        "target_spark_configuration": {
            "key": "typeProperties.targetSparkConfiguration",
            "type": "SparkConfigurationParametrizationReference",
        },
        "spark_config": {"key": "typeProperties.sparkConfig", "type": "{object}"},
        "authentication": {"key": "typeProperties.authentication", "type": "SynapseActivityAuthentication"},
    }

    def __init__(  # pylint: disable=too-many-locals
        self,
        *,
        name: str,
        spark_job: "_models.SynapseSparkJobReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        arguments: Optional[List[Any]] = None,
        file: Optional[JSON] = None,
        scan_folder: Optional[JSON] = None,
        class_name: Optional[JSON] = None,
        files: Optional[List[JSON]] = None,
        python_code_reference: Optional[List[JSON]] = None,
        files_v2: Optional[List[JSON]] = None,
        target_big_data_pool: Optional["_models.BigDataPoolParametrizationReference"] = None,
        executor_size: Optional[JSON] = None,
        conf: Optional[JSON] = None,
        driver_size: Optional[JSON] = None,
        num_executors: Optional[JSON] = None,
        configuration_type: Optional[Union[str, "_models.ConfigurationType"]] = None,
        target_spark_configuration: Optional["_models.SparkConfigurationParametrizationReference"] = None,
        spark_config: Optional[Dict[str, JSON]] = None,
        authentication: Optional["_models.SynapseActivityAuthentication"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword spark_job: Synapse spark job reference. Required.
        :paramtype spark_job: ~azure.synapse.artifacts.models.SynapseSparkJobReference
        :keyword arguments: User specified arguments to SynapseSparkJobDefinitionActivity.
        :paramtype arguments: list[any]
        :keyword file: The main file used for the job, which will override the 'file' of the spark job
         definition you provide. Type: string (or Expression with resultType string).
        :paramtype file: JSON
        :keyword scan_folder: Scanning subfolders from the root folder of the main definition file,
         these files will be added as reference files. The folders named 'jars', 'pyFiles', 'files' or
         'archives' will be scanned, and the folders name are case sensitive. Type: boolean (or
         Expression with resultType boolean).
        :paramtype scan_folder: JSON
        :keyword class_name: The fully-qualified identifier or the main class that is in the main
         definition file, which will override the 'className' of the spark job definition you provide.
         Type: string (or Expression with resultType string).
        :paramtype class_name: JSON
        :keyword files: (Deprecated. Please use pythonCodeReference and filesV2) Additional files used
         for reference in the main definition file, which will override the 'files' of the spark job
         definition you provide.
        :paramtype files: list[JSON]
        :keyword python_code_reference: Additional python code files used for reference in the main
         definition file, which will override the 'pyFiles' of the spark job definition you provide.
        :paramtype python_code_reference: list[JSON]
        :keyword files_v2: Additional files used for reference in the main definition file, which will
         override the 'jars' and 'files' of the spark job definition you provide.
        :paramtype files_v2: list[JSON]
        :keyword target_big_data_pool: The name of the big data pool which will be used to execute the
         spark batch job, which will override the 'targetBigDataPool' of the spark job definition you
         provide.
        :paramtype target_big_data_pool:
         ~azure.synapse.artifacts.models.BigDataPoolParametrizationReference
        :keyword executor_size: Number of core and memory to be used for executors allocated in the
         specified Spark pool for the job, which will be used for overriding 'executorCores' and
         'executorMemory' of the spark job definition you provide. Type: string (or Expression with
         resultType string).
        :paramtype executor_size: JSON
        :keyword conf: Spark configuration properties, which will override the 'conf' of the spark job
         definition you provide.
        :paramtype conf: JSON
        :keyword driver_size: Number of core and memory to be used for driver allocated in the
         specified Spark pool for the job, which will be used for overriding 'driverCores' and
         'driverMemory' of the spark job definition you provide. Type: string (or Expression with
         resultType string).
        :paramtype driver_size: JSON
        :keyword num_executors: Number of executors to launch for this job, which will override the
         'numExecutors' of the spark job definition you provide. Type: integer (or Expression with
         resultType integer).
        :paramtype num_executors: JSON
        :keyword configuration_type: The type of the spark config. Known values are: "Default",
         "Customized", and "Artifact".
        :paramtype configuration_type: str or ~azure.synapse.artifacts.models.ConfigurationType
        :keyword target_spark_configuration: The spark configuration of the spark job.
        :paramtype target_spark_configuration:
         ~azure.synapse.artifacts.models.SparkConfigurationParametrizationReference
        :keyword spark_config: Spark configuration property.
        :paramtype spark_config: dict[str, JSON]
        :keyword authentication: Authentication method used for executing the Spark job definition.
        :paramtype authentication: ~azure.synapse.artifacts.models.SynapseActivityAuthentication
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "SparkJob"
        self.spark_job = spark_job
        self.arguments = arguments
        self.file = file
        self.scan_folder = scan_folder
        self.class_name = class_name
        self.files = files
        self.python_code_reference = python_code_reference
        self.files_v2 = files_v2
        self.target_big_data_pool = target_big_data_pool
        self.executor_size = executor_size
        self.conf = conf
        self.driver_size = driver_size
        self.num_executors = num_executors
        self.configuration_type = configuration_type
        self.target_spark_configuration = target_spark_configuration
        self.spark_config = spark_config
        self.authentication = authentication


class SynapseSparkJobReference(_serialization.Model):
    """Synapse spark job reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Synapse spark job reference type. Required. "SparkJobDefinitionReference"
    :vartype type: str or ~azure.synapse.artifacts.models.SparkJobReferenceType
    :ivar reference_name: Reference spark job name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(
        self, *, type: Union[str, "_models.SparkJobReferenceType"], reference_name: str, **kwargs: Any
    ) -> None:
        """
        :keyword type: Synapse spark job reference type. Required. "SparkJobDefinitionReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.SparkJobReferenceType
        :keyword reference_name: Reference spark job name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class TabularTranslator(CopyTranslator):
    """A copy activity tabular translator.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy translator type. Required.
    :vartype type: str
    :ivar column_mappings: Column mappings. Example: "UserId: MyUserId, Group: MyGroup, Name:
     MyName" Type: string (or Expression with resultType string). This property will be retired.
     Please use mappings property.
    :vartype column_mappings: JSON
    :ivar schema_mapping: The schema mapping to map between tabular data and hierarchical data.
     Example: {"Column1": "$.Column1", "Column2": "$.Column2.Property1", "Column3":
     "$.Column2.Property2"}. Type: object (or Expression with resultType object). This property will
     be retired. Please use mappings property.
    :vartype schema_mapping: JSON
    :ivar collection_reference: The JSON Path of the Nested Array that is going to do cross-apply.
     Type: object (or Expression with resultType object).
    :vartype collection_reference: JSON
    :ivar map_complex_values_to_string: Whether to map complex (array and object) values to simple
     strings in json format. Type: boolean (or Expression with resultType boolean).
    :vartype map_complex_values_to_string: JSON
    :ivar mappings: Column mappings with logical types. Tabular->tabular example:
     [{"source":{"name":"CustomerName","type":"String"},"sink":{"name":"ClientName","type":"String"}},{"source":{"name":"CustomerAddress","type":"String"},"sink":{"name":"ClientAddress","type":"String"}}].  # pylint: disable=line-too-long
     Hierarchical->tabular example:
     [{"source":{"path":"$.CustomerName","type":"String"},"sink":{"name":"ClientName","type":"String"}},{"source":{"path":"$.CustomerAddress","type":"String"},"sink":{"name":"ClientAddress","type":"String"}}].  # pylint: disable=line-too-long
     Type: object (or Expression with resultType object).
    :vartype mappings: JSON
    :ivar type_conversion: Whether to enable the advanced type conversion feature in the Copy
     activity. Type: boolean (or Expression with resultType boolean).
    :vartype type_conversion: JSON
    :ivar type_conversion_settings: Type conversion settings.
    :vartype type_conversion_settings: ~azure.synapse.artifacts.models.TypeConversionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "column_mappings": {"key": "columnMappings", "type": "object"},
        "schema_mapping": {"key": "schemaMapping", "type": "object"},
        "collection_reference": {"key": "collectionReference", "type": "object"},
        "map_complex_values_to_string": {"key": "mapComplexValuesToString", "type": "object"},
        "mappings": {"key": "mappings", "type": "object"},
        "type_conversion": {"key": "typeConversion", "type": "object"},
        "type_conversion_settings": {"key": "typeConversionSettings", "type": "TypeConversionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        column_mappings: Optional[JSON] = None,
        schema_mapping: Optional[JSON] = None,
        collection_reference: Optional[JSON] = None,
        map_complex_values_to_string: Optional[JSON] = None,
        mappings: Optional[JSON] = None,
        type_conversion: Optional[JSON] = None,
        type_conversion_settings: Optional["_models.TypeConversionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword column_mappings: Column mappings. Example: "UserId: MyUserId, Group: MyGroup, Name:
         MyName" Type: string (or Expression with resultType string). This property will be retired.
         Please use mappings property.
        :paramtype column_mappings: JSON
        :keyword schema_mapping: The schema mapping to map between tabular data and hierarchical data.
         Example: {"Column1": "$.Column1", "Column2": "$.Column2.Property1", "Column3":
         "$.Column2.Property2"}. Type: object (or Expression with resultType object). This property will
         be retired. Please use mappings property.
        :paramtype schema_mapping: JSON
        :keyword collection_reference: The JSON Path of the Nested Array that is going to do
         cross-apply. Type: object (or Expression with resultType object).
        :paramtype collection_reference: JSON
        :keyword map_complex_values_to_string: Whether to map complex (array and object) values to
         simple strings in json format. Type: boolean (or Expression with resultType boolean).
        :paramtype map_complex_values_to_string: JSON
        :keyword mappings: Column mappings with logical types. Tabular->tabular example:
         [{"source":{"name":"CustomerName","type":"String"},"sink":{"name":"ClientName","type":"String"}},{"source":{"name":"CustomerAddress","type":"String"},"sink":{"name":"ClientAddress","type":"String"}}].  # pylint: disable=line-too-long
         Hierarchical->tabular example:
         [{"source":{"path":"$.CustomerName","type":"String"},"sink":{"name":"ClientName","type":"String"}},{"source":{"path":"$.CustomerAddress","type":"String"},"sink":{"name":"ClientAddress","type":"String"}}].  # pylint: disable=line-too-long
         Type: object (or Expression with resultType object).
        :paramtype mappings: JSON
        :keyword type_conversion: Whether to enable the advanced type conversion feature in the Copy
         activity. Type: boolean (or Expression with resultType boolean).
        :paramtype type_conversion: JSON
        :keyword type_conversion_settings: Type conversion settings.
        :paramtype type_conversion_settings: ~azure.synapse.artifacts.models.TypeConversionSettings
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "TabularTranslator"
        self.column_mappings = column_mappings
        self.schema_mapping = schema_mapping
        self.collection_reference = collection_reference
        self.map_complex_values_to_string = map_complex_values_to_string
        self.mappings = mappings
        self.type_conversion = type_conversion
        self.type_conversion_settings = type_conversion_settings


class TarGZipReadSettings(CompressionReadSettings):
    """The TarGZip compression read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The Compression setting type. Required.
    :vartype type: str
    :ivar preserve_compression_file_name_as_folder: Preserve the compression file name as folder
     path. Type: boolean (or Expression with resultType boolean).
    :vartype preserve_compression_file_name_as_folder: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "preserve_compression_file_name_as_folder": {"key": "preserveCompressionFileNameAsFolder", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        preserve_compression_file_name_as_folder: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword preserve_compression_file_name_as_folder: Preserve the compression file name as folder
         path. Type: boolean (or Expression with resultType boolean).
        :paramtype preserve_compression_file_name_as_folder: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "TarGZipReadSettings"
        self.preserve_compression_file_name_as_folder = preserve_compression_file_name_as_folder


class TarReadSettings(CompressionReadSettings):
    """The Tar compression read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The Compression setting type. Required.
    :vartype type: str
    :ivar preserve_compression_file_name_as_folder: Preserve the compression file name as folder
     path. Type: boolean (or Expression with resultType boolean).
    :vartype preserve_compression_file_name_as_folder: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "preserve_compression_file_name_as_folder": {"key": "preserveCompressionFileNameAsFolder", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        preserve_compression_file_name_as_folder: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword preserve_compression_file_name_as_folder: Preserve the compression file name as folder
         path. Type: boolean (or Expression with resultType boolean).
        :paramtype preserve_compression_file_name_as_folder: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "TarReadSettings"
        self.preserve_compression_file_name_as_folder = preserve_compression_file_name_as_folder


class TeamDeskLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for TeamDesk.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar authentication_type: The authentication type to use. Required. Known values are: "Basic"
     and "Token".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.TeamDeskAuthenticationType
    :ivar url: The url to connect TeamDesk source. Type: string (or Expression with resultType
     string). Required.
    :vartype url: JSON
    :ivar user_name: The username of the TeamDesk source. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: The password of the TeamDesk source.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_token: The api token for the TeamDesk source.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "authentication_type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        authentication_type: Union[str, "_models.TeamDeskAuthenticationType"],
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        api_token: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword authentication_type: The authentication type to use. Required. Known values are:
         "Basic" and "Token".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.TeamDeskAuthenticationType
        :keyword url: The url to connect TeamDesk source. Type: string (or Expression with resultType
         string). Required.
        :paramtype url: JSON
        :keyword user_name: The username of the TeamDesk source. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: The password of the TeamDesk source.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_token: The api token for the TeamDesk source.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "TeamDesk"
        self.authentication_type = authentication_type
        self.url = url
        self.user_name = user_name
        self.password = password
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class TeradataImportCommand(ImportSettings):
    """Teradata import command settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The import setting type. Required.
    :vartype type: str
    :ivar additional_format_options: Additional format options for Teradata Copy Command. The
     format options only applies to direct copy from CSV source. Type: key value pairs (value should
     be string type) (or Expression with resultType object). Example: "additionalFormatOptions": {
     "timeFormat": "HHhMImSSs" }.
    :vartype additional_format_options: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "additional_format_options": {"key": "additionalFormatOptions", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        additional_format_options: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword additional_format_options: Additional format options for Teradata Copy Command. The
         format options only applies to direct copy from CSV source. Type: key value pairs (value should
         be string type) (or Expression with resultType object). Example: "additionalFormatOptions": {
         "timeFormat": "HHhMImSSs" }.
        :paramtype additional_format_options: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "TeradataImportCommand"
        self.additional_format_options = additional_format_options


class TeradataLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Teradata data source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: Teradata ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. Type: string (or Expression with resultType string).
    :vartype server: JSON
    :ivar authentication_type: AuthenticationType to be used for connection. Known values are:
     "Basic" and "Windows".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.TeradataAuthenticationType
    :ivar username: Username for authentication. Type: string (or Expression with resultType
     string).
    :vartype username: JSON
    :ivar password: Password for authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar ssl_mode: SSL mode for connection. Valid values including: “Disable”, “Allow”, “Prefer”,
     “Require”, “Verify-CA”, “Verify-Full”. Default value is “Verify-Full”. Type: string (or
     Expression with resultType string). Only applied for version 2.0.
    :vartype ssl_mode: JSON
    :ivar port_number: The port numbers when connecting to server through non HTTPS/TLS
     connections. Type: integer (or Expression with resultType integer). Only used for V2. Only
     applied for version 2.0.
    :vartype port_number: JSON
    :ivar https_port_number: The port numbers when connecting to server through HTTPS/TLS
     connections. Type: integer (or Expression with resultType integer). Only applied for version
     2.0.
    :vartype https_port_number: JSON
    :ivar use_data_encryption: Specifies whether to encrypt all communication with the Teradata
     database. Allowed values are 0 or 1. This setting will be ignored for HTTPS/TLS connections.
     Type: integer (or Expression with resultType integer). Only applied for version 2.0.
    :vartype use_data_encryption: JSON
    :ivar character_set: The character set to use for the connection. Type: string (or Expression
     with resultType string). Only applied for version 2.0.
    :vartype character_set: JSON
    :ivar max_resp_size: The maximum size of the response buffer for SQL requests, in bytes. Type:
     integer. Only applied for version 2.0.
    :vartype max_resp_size: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "username": {"key": "typeProperties.username", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "ssl_mode": {"key": "typeProperties.sslMode", "type": "object"},
        "port_number": {"key": "typeProperties.portNumber", "type": "object"},
        "https_port_number": {"key": "typeProperties.httpsPortNumber", "type": "object"},
        "use_data_encryption": {"key": "typeProperties.useDataEncryption", "type": "object"},
        "character_set": {"key": "typeProperties.characterSet", "type": "object"},
        "max_resp_size": {"key": "typeProperties.maxRespSize", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.TeradataAuthenticationType"]] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        ssl_mode: Optional[JSON] = None,
        port_number: Optional[JSON] = None,
        https_port_number: Optional[JSON] = None,
        use_data_encryption: Optional[JSON] = None,
        character_set: Optional[JSON] = None,
        max_resp_size: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: Teradata ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. Type: string (or Expression with resultType
         string).
        :paramtype server: JSON
        :keyword authentication_type: AuthenticationType to be used for connection. Known values are:
         "Basic" and "Windows".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.TeradataAuthenticationType
        :keyword username: Username for authentication. Type: string (or Expression with resultType
         string).
        :paramtype username: JSON
        :keyword password: Password for authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword ssl_mode: SSL mode for connection. Valid values including: “Disable”, “Allow”,
         “Prefer”, “Require”, “Verify-CA”, “Verify-Full”. Default value is “Verify-Full”. Type: string
         (or Expression with resultType string). Only applied for version 2.0.
        :paramtype ssl_mode: JSON
        :keyword port_number: The port numbers when connecting to server through non HTTPS/TLS
         connections. Type: integer (or Expression with resultType integer). Only used for V2. Only
         applied for version 2.0.
        :paramtype port_number: JSON
        :keyword https_port_number: The port numbers when connecting to server through HTTPS/TLS
         connections. Type: integer (or Expression with resultType integer). Only applied for version
         2.0.
        :paramtype https_port_number: JSON
        :keyword use_data_encryption: Specifies whether to encrypt all communication with the Teradata
         database. Allowed values are 0 or 1. This setting will be ignored for HTTPS/TLS connections.
         Type: integer (or Expression with resultType integer). Only applied for version 2.0.
        :paramtype use_data_encryption: JSON
        :keyword character_set: The character set to use for the connection. Type: string (or
         Expression with resultType string). Only applied for version 2.0.
        :paramtype character_set: JSON
        :keyword max_resp_size: The maximum size of the response buffer for SQL requests, in bytes.
         Type: integer. Only applied for version 2.0.
        :paramtype max_resp_size: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Teradata"
        self.connection_string = connection_string
        self.server = server
        self.authentication_type = authentication_type
        self.username = username
        self.password = password
        self.ssl_mode = ssl_mode
        self.port_number = port_number
        self.https_port_number = https_port_number
        self.use_data_encryption = use_data_encryption
        self.character_set = character_set
        self.max_resp_size = max_resp_size
        self.encrypted_credential = encrypted_credential


class TeradataPartitionSettings(_serialization.Model):
    """The settings that will be leveraged for teradata source partitioning.

    :ivar partition_column_name: The name of the column that will be used for proceeding range or
     hash partitioning. Type: string (or Expression with resultType string).
    :vartype partition_column_name: JSON
    :ivar partition_upper_bound: The maximum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_upper_bound: JSON
    :ivar partition_lower_bound: The minimum value of column specified in partitionColumnName that
     will be used for proceeding range partitioning. Type: string (or Expression with resultType
     string).
    :vartype partition_lower_bound: JSON
    """

    _attribute_map = {
        "partition_column_name": {"key": "partitionColumnName", "type": "object"},
        "partition_upper_bound": {"key": "partitionUpperBound", "type": "object"},
        "partition_lower_bound": {"key": "partitionLowerBound", "type": "object"},
    }

    def __init__(
        self,
        *,
        partition_column_name: Optional[JSON] = None,
        partition_upper_bound: Optional[JSON] = None,
        partition_lower_bound: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword partition_column_name: The name of the column that will be used for proceeding range
         or hash partitioning. Type: string (or Expression with resultType string).
        :paramtype partition_column_name: JSON
        :keyword partition_upper_bound: The maximum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_upper_bound: JSON
        :keyword partition_lower_bound: The minimum value of column specified in partitionColumnName
         that will be used for proceeding range partitioning. Type: string (or Expression with
         resultType string).
        :paramtype partition_lower_bound: JSON
        """
        super().__init__(**kwargs)
        self.partition_column_name = partition_column_name
        self.partition_upper_bound = partition_upper_bound
        self.partition_lower_bound = partition_lower_bound


class TeradataSink(CopySink):
    """A copy activity Teradata sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar import_settings: Teradata import settings.
    :vartype import_settings: ~azure.synapse.artifacts.models.TeradataImportCommand
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "import_settings": {"key": "importSettings", "type": "TeradataImportCommand"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        import_settings: Optional["_models.TeradataImportCommand"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword import_settings: Teradata import settings.
        :paramtype import_settings: ~azure.synapse.artifacts.models.TeradataImportCommand
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "TeradataSink"
        self.import_settings = import_settings


class TeradataSource(TabularSource):
    """A copy activity Teradata source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: Teradata query. Type: string (or Expression with resultType string).
    :vartype query: JSON
    :ivar partition_option: The partition mechanism that will be used for teradata read in
     parallel. Known values are: "None", "Hash", and "DynamicRange".
    :vartype partition_option: str or ~azure.synapse.artifacts.models.TeradataPartitionOption
    :ivar partition_settings: The settings that will be leveraged for teradata source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.TeradataPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "str"},
        "partition_settings": {"key": "partitionSettings", "type": "TeradataPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        partition_option: Optional[Union[str, "_models.TeradataPartitionOption"]] = None,
        partition_settings: Optional["_models.TeradataPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: Teradata query. Type: string (or Expression with resultType string).
        :paramtype query: JSON
        :keyword partition_option: The partition mechanism that will be used for teradata read in
         parallel. Known values are: "None", "Hash", and "DynamicRange".
        :paramtype partition_option: str or ~azure.synapse.artifacts.models.TeradataPartitionOption
        :keyword partition_settings: The settings that will be leveraged for teradata source
         partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.TeradataPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "TeradataSource"
        self.query = query
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class TeradataTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The Teradata database dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar database: The database name of Teradata. Type: string (or Expression with resultType
     string).
    :vartype database: JSON
    :ivar table: The table name of Teradata. Type: string (or Expression with resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        database: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword database: The database name of Teradata. Type: string (or Expression with resultType
         string).
        :paramtype database: JSON
        :keyword table: The table name of Teradata. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "TeradataTable"
        self.database = database
        self.table = table


class TextFormat(DatasetStorageFormat):  # pylint: disable=too-many-instance-attributes
    """The data stored in text format.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset storage format. Required.
    :vartype type: str
    :ivar serializer: Serializer. Type: string (or Expression with resultType string).
    :vartype serializer: JSON
    :ivar deserializer: Deserializer. Type: string (or Expression with resultType string).
    :vartype deserializer: JSON
    :ivar column_delimiter: The column delimiter. Type: string (or Expression with resultType
     string).
    :vartype column_delimiter: JSON
    :ivar row_delimiter: The row delimiter. Type: string (or Expression with resultType string).
    :vartype row_delimiter: JSON
    :ivar escape_char: The escape character. Type: string (or Expression with resultType string).
    :vartype escape_char: JSON
    :ivar quote_char: The quote character. Type: string (or Expression with resultType string).
    :vartype quote_char: JSON
    :ivar null_value: The null value string. Type: string (or Expression with resultType string).
    :vartype null_value: JSON
    :ivar encoding_name: The code page name of the preferred encoding. If miss, the default value
     is ΓÇ£utf-8ΓÇ¥, unless BOM denotes another Unicode encoding. Refer to the ΓÇ£NameΓÇ¥ column of
     the table in the following link to set supported values:
     https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
     resultType string).
    :vartype encoding_name: JSON
    :ivar treat_empty_as_null: Treat empty column values in the text file as null. The default
     value is true. Type: boolean (or Expression with resultType boolean).
    :vartype treat_empty_as_null: JSON
    :ivar skip_line_count: The number of lines/rows to be skipped when parsing text files. The
     default value is 0. Type: integer (or Expression with resultType integer).
    :vartype skip_line_count: JSON
    :ivar first_row_as_header: When used as input, treat the first row of data as headers. When
     used as output,write the headers into the output as the first row of data. The default value is
     false. Type: boolean (or Expression with resultType boolean).
    :vartype first_row_as_header: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "serializer": {"key": "serializer", "type": "object"},
        "deserializer": {"key": "deserializer", "type": "object"},
        "column_delimiter": {"key": "columnDelimiter", "type": "object"},
        "row_delimiter": {"key": "rowDelimiter", "type": "object"},
        "escape_char": {"key": "escapeChar", "type": "object"},
        "quote_char": {"key": "quoteChar", "type": "object"},
        "null_value": {"key": "nullValue", "type": "object"},
        "encoding_name": {"key": "encodingName", "type": "object"},
        "treat_empty_as_null": {"key": "treatEmptyAsNull", "type": "object"},
        "skip_line_count": {"key": "skipLineCount", "type": "object"},
        "first_row_as_header": {"key": "firstRowAsHeader", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        serializer: Optional[JSON] = None,
        deserializer: Optional[JSON] = None,
        column_delimiter: Optional[JSON] = None,
        row_delimiter: Optional[JSON] = None,
        escape_char: Optional[JSON] = None,
        quote_char: Optional[JSON] = None,
        null_value: Optional[JSON] = None,
        encoding_name: Optional[JSON] = None,
        treat_empty_as_null: Optional[JSON] = None,
        skip_line_count: Optional[JSON] = None,
        first_row_as_header: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword serializer: Serializer. Type: string (or Expression with resultType string).
        :paramtype serializer: JSON
        :keyword deserializer: Deserializer. Type: string (or Expression with resultType string).
        :paramtype deserializer: JSON
        :keyword column_delimiter: The column delimiter. Type: string (or Expression with resultType
         string).
        :paramtype column_delimiter: JSON
        :keyword row_delimiter: The row delimiter. Type: string (or Expression with resultType string).
        :paramtype row_delimiter: JSON
        :keyword escape_char: The escape character. Type: string (or Expression with resultType
         string).
        :paramtype escape_char: JSON
        :keyword quote_char: The quote character. Type: string (or Expression with resultType string).
        :paramtype quote_char: JSON
        :keyword null_value: The null value string. Type: string (or Expression with resultType
         string).
        :paramtype null_value: JSON
        :keyword encoding_name: The code page name of the preferred encoding. If miss, the default
         value is ΓÇ£utf-8ΓÇ¥, unless BOM denotes another Unicode encoding. Refer to the ΓÇ£NameΓÇ¥
         column of the table in the following link to set supported values:
         https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
         resultType string).
        :paramtype encoding_name: JSON
        :keyword treat_empty_as_null: Treat empty column values in the text file as null. The default
         value is true. Type: boolean (or Expression with resultType boolean).
        :paramtype treat_empty_as_null: JSON
        :keyword skip_line_count: The number of lines/rows to be skipped when parsing text files. The
         default value is 0. Type: integer (or Expression with resultType integer).
        :paramtype skip_line_count: JSON
        :keyword first_row_as_header: When used as input, treat the first row of data as headers. When
         used as output,write the headers into the output as the first row of data. The default value is
         false. Type: boolean (or Expression with resultType boolean).
        :paramtype first_row_as_header: JSON
        """
        super().__init__(
            additional_properties=additional_properties, serializer=serializer, deserializer=deserializer, **kwargs
        )
        self.type: str = "TextFormat"
        self.column_delimiter = column_delimiter
        self.row_delimiter = row_delimiter
        self.escape_char = escape_char
        self.quote_char = quote_char
        self.null_value = null_value
        self.encoding_name = encoding_name
        self.treat_empty_as_null = treat_empty_as_null
        self.skip_line_count = skip_line_count
        self.first_row_as_header = first_row_as_header


class TriggerDependencyProvisioningStatus(_serialization.Model):
    """Defines the response of a provision trigger dependency operation.

    All required parameters must be populated in order to send to Azure.

    :ivar trigger_name: Trigger name. Required.
    :vartype trigger_name: str
    :ivar provisioning_status: Provisioning status. Required.
    :vartype provisioning_status: str
    """

    _validation = {
        "trigger_name": {"required": True},
        "provisioning_status": {"required": True},
    }

    _attribute_map = {
        "trigger_name": {"key": "triggerName", "type": "str"},
        "provisioning_status": {"key": "provisioningStatus", "type": "str"},
    }

    def __init__(self, *, trigger_name: str, provisioning_status: str, **kwargs: Any) -> None:
        """
        :keyword trigger_name: Trigger name. Required.
        :paramtype trigger_name: str
        :keyword provisioning_status: Provisioning status. Required.
        :paramtype provisioning_status: str
        """
        super().__init__(**kwargs)
        self.trigger_name = trigger_name
        self.provisioning_status = provisioning_status


class TriggerDependencyReference(DependencyReference):
    """Trigger referenced dependency.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    TumblingWindowTriggerDependencyReference

    All required parameters must be populated in order to send to Azure.

    :ivar type: The type of dependency reference. Required.
    :vartype type: str
    :ivar reference_trigger: Referenced trigger. Required.
    :vartype reference_trigger: ~azure.synapse.artifacts.models.TriggerReference
    """

    _validation = {
        "type": {"required": True},
        "reference_trigger": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_trigger": {"key": "referenceTrigger", "type": "TriggerReference"},
    }

    _subtype_map = {"type": {"TumblingWindowTriggerDependencyReference": "TumblingWindowTriggerDependencyReference"}}

    def __init__(self, *, reference_trigger: "_models.TriggerReference", **kwargs: Any) -> None:
        """
        :keyword reference_trigger: Referenced trigger. Required.
        :paramtype reference_trigger: ~azure.synapse.artifacts.models.TriggerReference
        """
        super().__init__(**kwargs)
        self.type: str = "TriggerDependencyReference"
        self.reference_trigger = reference_trigger


class TriggerListResponse(_serialization.Model):
    """A list of trigger resources.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of triggers. Required.
    :vartype value: list[~azure.synapse.artifacts.models.TriggerResource]
    :ivar next_link: The link to the next page of results, if any remaining results exist.
    :vartype next_link: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[TriggerResource]"},
        "next_link": {"key": "nextLink", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.TriggerResource"], next_link: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of triggers. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.TriggerResource]
        :keyword next_link: The link to the next page of results, if any remaining results exist.
        :paramtype next_link: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.next_link = next_link


class TriggerPipelineReference(_serialization.Model):
    """Pipeline that needs to be triggered with the given parameters.

    :ivar pipeline_reference: Pipeline reference.
    :vartype pipeline_reference: ~azure.synapse.artifacts.models.PipelineReference
    :ivar parameters: Pipeline parameters.
    :vartype parameters: dict[str, JSON]
    """

    _attribute_map = {
        "pipeline_reference": {"key": "pipelineReference", "type": "PipelineReference"},
        "parameters": {"key": "parameters", "type": "{object}"},
    }

    def __init__(
        self,
        *,
        pipeline_reference: Optional["_models.PipelineReference"] = None,
        parameters: Optional[Dict[str, JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword pipeline_reference: Pipeline reference.
        :paramtype pipeline_reference: ~azure.synapse.artifacts.models.PipelineReference
        :keyword parameters: Pipeline parameters.
        :paramtype parameters: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.pipeline_reference = pipeline_reference
        self.parameters = parameters


class TriggerReference(_serialization.Model):
    """Trigger reference type.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Trigger reference type. Required. "TriggerReference"
    :vartype type: str or ~azure.synapse.artifacts.models.TriggerReferenceType
    :ivar reference_name: Reference trigger name. Required.
    :vartype reference_name: str
    """

    _validation = {
        "type": {"required": True},
        "reference_name": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_name": {"key": "referenceName", "type": "str"},
    }

    def __init__(self, *, type: Union[str, "_models.TriggerReferenceType"], reference_name: str, **kwargs: Any) -> None:
        """
        :keyword type: Trigger reference type. Required. "TriggerReference"
        :paramtype type: str or ~azure.synapse.artifacts.models.TriggerReferenceType
        :keyword reference_name: Reference trigger name. Required.
        :paramtype reference_name: str
        """
        super().__init__(**kwargs)
        self.type = type
        self.reference_name = reference_name


class TriggerResource(SubResource):
    """Trigger resource type.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar etag: Resource Etag.
    :vartype etag: str
    :ivar properties: Properties of the trigger. Required.
    :vartype properties: ~azure.synapse.artifacts.models.Trigger
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "etag": {"readonly": True},
        "properties": {"required": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "etag": {"key": "etag", "type": "str"},
        "properties": {"key": "properties", "type": "Trigger"},
    }

    def __init__(self, *, properties: "_models.Trigger", **kwargs: Any) -> None:
        """
        :keyword properties: Properties of the trigger. Required.
        :paramtype properties: ~azure.synapse.artifacts.models.Trigger
        """
        super().__init__(**kwargs)
        self.properties = properties


class TriggerRun(_serialization.Model):
    """Trigger runs.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar trigger_run_id: Trigger run id.
    :vartype trigger_run_id: str
    :ivar trigger_name: Trigger name.
    :vartype trigger_name: str
    :ivar trigger_type: Trigger type.
    :vartype trigger_type: str
    :ivar trigger_run_timestamp: Trigger run start time.
    :vartype trigger_run_timestamp: ~datetime.datetime
    :ivar status: Trigger run status. Known values are: "Succeeded", "Failed", and "Inprogress".
    :vartype status: str or ~azure.synapse.artifacts.models.TriggerRunStatus
    :ivar message: Trigger error message.
    :vartype message: str
    :ivar properties: List of property name and value related to trigger run. Name, value pair
     depends on type of trigger.
    :vartype properties: dict[str, str]
    :ivar triggered_pipelines: List of pipeline name and run Id triggered by the trigger run.
    :vartype triggered_pipelines: dict[str, str]
    """

    _validation = {
        "trigger_run_id": {"readonly": True},
        "trigger_name": {"readonly": True},
        "trigger_type": {"readonly": True},
        "trigger_run_timestamp": {"readonly": True},
        "status": {"readonly": True},
        "message": {"readonly": True},
        "properties": {"readonly": True},
        "triggered_pipelines": {"readonly": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "trigger_run_id": {"key": "triggerRunId", "type": "str"},
        "trigger_name": {"key": "triggerName", "type": "str"},
        "trigger_type": {"key": "triggerType", "type": "str"},
        "trigger_run_timestamp": {"key": "triggerRunTimestamp", "type": "iso-8601"},
        "status": {"key": "status", "type": "str"},
        "message": {"key": "message", "type": "str"},
        "properties": {"key": "properties", "type": "{str}"},
        "triggered_pipelines": {"key": "triggeredPipelines", "type": "{str}"},
    }

    def __init__(self, *, additional_properties: Optional[Dict[str, JSON]] = None, **kwargs: Any) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        """
        super().__init__(**kwargs)
        self.additional_properties = additional_properties
        self.trigger_run_id = None
        self.trigger_name = None
        self.trigger_type = None
        self.trigger_run_timestamp = None
        self.status = None
        self.message = None
        self.properties = None
        self.triggered_pipelines = None


class TriggerRunsQueryResponse(_serialization.Model):
    """A list of trigger runs.

    All required parameters must be populated in order to send to Azure.

    :ivar value: List of trigger runs. Required.
    :vartype value: list[~azure.synapse.artifacts.models.TriggerRun]
    :ivar continuation_token: The continuation token for getting the next page of results, if any
     remaining results exist, null otherwise.
    :vartype continuation_token: str
    """

    _validation = {
        "value": {"required": True},
    }

    _attribute_map = {
        "value": {"key": "value", "type": "[TriggerRun]"},
        "continuation_token": {"key": "continuationToken", "type": "str"},
    }

    def __init__(
        self, *, value: List["_models.TriggerRun"], continuation_token: Optional[str] = None, **kwargs: Any
    ) -> None:
        """
        :keyword value: List of trigger runs. Required.
        :paramtype value: list[~azure.synapse.artifacts.models.TriggerRun]
        :keyword continuation_token: The continuation token for getting the next page of results, if
         any remaining results exist, null otherwise.
        :paramtype continuation_token: str
        """
        super().__init__(**kwargs)
        self.value = value
        self.continuation_token = continuation_token


class TriggerSubscriptionOperationStatus(_serialization.Model):
    """Defines the response of a trigger subscription operation.

    Variables are only populated by the server, and will be ignored when sending a request.

    :ivar trigger_name: Trigger name.
    :vartype trigger_name: str
    :ivar status: Event Subscription Status. Known values are: "Enabled", "Provisioning",
     "Deprovisioning", "Disabled", and "Unknown".
    :vartype status: str or ~azure.synapse.artifacts.models.EventSubscriptionStatus
    """

    _validation = {
        "trigger_name": {"readonly": True},
        "status": {"readonly": True},
    }

    _attribute_map = {
        "trigger_name": {"key": "triggerName", "type": "str"},
        "status": {"key": "status", "type": "str"},
    }

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.trigger_name = None
        self.status = None


class TumblingWindowTrigger(Trigger):  # pylint: disable=too-many-instance-attributes
    """Trigger that schedules pipeline runs for all fixed time interval windows from a start time
    without gaps and also supports backfill scenarios (when start time is in the past).

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Trigger type. Required.
    :vartype type: str
    :ivar description: Trigger description.
    :vartype description: str
    :ivar runtime_state: Indicates if trigger is running or not. Updated when Start/Stop APIs are
     called on the Trigger. Known values are: "Started", "Stopped", and "Disabled".
    :vartype runtime_state: str or ~azure.synapse.artifacts.models.TriggerRuntimeState
    :ivar annotations: List of tags that can be used for describing the trigger.
    :vartype annotations: list[JSON]
    :ivar pipeline: Pipeline for which runs are created when an event is fired for trigger window
     that is ready. Required.
    :vartype pipeline: ~azure.synapse.artifacts.models.TriggerPipelineReference
    :ivar frequency: The frequency of the time windows. Required. Known values are: "Minute",
     "Hour", and "Month".
    :vartype frequency: str or ~azure.synapse.artifacts.models.TumblingWindowFrequency
    :ivar interval: The interval of the time windows. The minimum interval allowed is 15 Minutes.
     Required.
    :vartype interval: int
    :ivar start_time: The start time for the time period for the trigger during which events are
     fired for windows that are ready. Only UTC time is currently supported. Required.
    :vartype start_time: ~datetime.datetime
    :ivar end_time: The end time for the time period for the trigger during which events are fired
     for windows that are ready. Only UTC time is currently supported.
    :vartype end_time: ~datetime.datetime
    :ivar delay: Specifies how long the trigger waits past due time before triggering new run. It
     doesn't alter window start and end time. The default is 0. Type: string (or Expression with
     resultType string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype delay: JSON
    :ivar max_concurrency: The max number of parallel time windows (ready for execution) for which
     a new run is triggered. Required.
    :vartype max_concurrency: int
    :ivar retry_policy: Retry policy that will be applied for failed pipeline runs.
    :vartype retry_policy: ~azure.synapse.artifacts.models.RetryPolicy
    :ivar depends_on: Triggers that this trigger depends on. Only tumbling window triggers are
     supported.
    :vartype depends_on: list[~azure.synapse.artifacts.models.DependencyReference]
    """

    _validation = {
        "type": {"required": True},
        "runtime_state": {"readonly": True},
        "pipeline": {"required": True},
        "frequency": {"required": True},
        "interval": {"required": True},
        "start_time": {"required": True},
        "max_concurrency": {"required": True, "maximum": 50, "minimum": 1},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "runtime_state": {"key": "runtimeState", "type": "str"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "pipeline": {"key": "pipeline", "type": "TriggerPipelineReference"},
        "frequency": {"key": "typeProperties.frequency", "type": "str"},
        "interval": {"key": "typeProperties.interval", "type": "int"},
        "start_time": {"key": "typeProperties.startTime", "type": "iso-8601"},
        "end_time": {"key": "typeProperties.endTime", "type": "iso-8601"},
        "delay": {"key": "typeProperties.delay", "type": "object"},
        "max_concurrency": {"key": "typeProperties.maxConcurrency", "type": "int"},
        "retry_policy": {"key": "typeProperties.retryPolicy", "type": "RetryPolicy"},
        "depends_on": {"key": "typeProperties.dependsOn", "type": "[DependencyReference]"},
    }

    def __init__(
        self,
        *,
        pipeline: "_models.TriggerPipelineReference",
        frequency: Union[str, "_models.TumblingWindowFrequency"],
        interval: int,
        start_time: datetime.datetime,
        max_concurrency: int,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        annotations: Optional[List[JSON]] = None,
        end_time: Optional[datetime.datetime] = None,
        delay: Optional[JSON] = None,
        retry_policy: Optional["_models.RetryPolicy"] = None,
        depends_on: Optional[List["_models.DependencyReference"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Trigger description.
        :paramtype description: str
        :keyword annotations: List of tags that can be used for describing the trigger.
        :paramtype annotations: list[JSON]
        :keyword pipeline: Pipeline for which runs are created when an event is fired for trigger
         window that is ready. Required.
        :paramtype pipeline: ~azure.synapse.artifacts.models.TriggerPipelineReference
        :keyword frequency: The frequency of the time windows. Required. Known values are: "Minute",
         "Hour", and "Month".
        :paramtype frequency: str or ~azure.synapse.artifacts.models.TumblingWindowFrequency
        :keyword interval: The interval of the time windows. The minimum interval allowed is 15
         Minutes. Required.
        :paramtype interval: int
        :keyword start_time: The start time for the time period for the trigger during which events are
         fired for windows that are ready. Only UTC time is currently supported. Required.
        :paramtype start_time: ~datetime.datetime
        :keyword end_time: The end time for the time period for the trigger during which events are
         fired for windows that are ready. Only UTC time is currently supported.
        :paramtype end_time: ~datetime.datetime
        :keyword delay: Specifies how long the trigger waits past due time before triggering new run.
         It doesn't alter window start and end time. The default is 0. Type: string (or Expression with
         resultType string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype delay: JSON
        :keyword max_concurrency: The max number of parallel time windows (ready for execution) for
         which a new run is triggered. Required.
        :paramtype max_concurrency: int
        :keyword retry_policy: Retry policy that will be applied for failed pipeline runs.
        :paramtype retry_policy: ~azure.synapse.artifacts.models.RetryPolicy
        :keyword depends_on: Triggers that this trigger depends on. Only tumbling window triggers are
         supported.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.DependencyReference]
        """
        super().__init__(
            additional_properties=additional_properties, description=description, annotations=annotations, **kwargs
        )
        self.type: str = "TumblingWindowTrigger"
        self.pipeline = pipeline
        self.frequency = frequency
        self.interval = interval
        self.start_time = start_time
        self.end_time = end_time
        self.delay = delay
        self.max_concurrency = max_concurrency
        self.retry_policy = retry_policy
        self.depends_on = depends_on


class TumblingWindowTriggerDependencyReference(TriggerDependencyReference):
    """Referenced tumbling window trigger dependency.

    All required parameters must be populated in order to send to Azure.

    :ivar type: The type of dependency reference. Required.
    :vartype type: str
    :ivar reference_trigger: Referenced trigger. Required.
    :vartype reference_trigger: ~azure.synapse.artifacts.models.TriggerReference
    :ivar offset: Timespan applied to the start time of a tumbling window when evaluating
     dependency.
    :vartype offset: str
    :ivar size: The size of the window when evaluating the dependency. If undefined the frequency
     of the tumbling window will be used.
    :vartype size: str
    """

    _validation = {
        "type": {"required": True},
        "reference_trigger": {"required": True},
        "offset": {
            "max_length": 15,
            "min_length": 8,
            "pattern": r"-?((\d+)\.)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))",
        },
        "size": {"max_length": 15, "min_length": 8, "pattern": r"((\d+)\.)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9]))"},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "reference_trigger": {"key": "referenceTrigger", "type": "TriggerReference"},
        "offset": {"key": "offset", "type": "str"},
        "size": {"key": "size", "type": "str"},
    }

    def __init__(
        self,
        *,
        reference_trigger: "_models.TriggerReference",
        offset: Optional[str] = None,
        size: Optional[str] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword reference_trigger: Referenced trigger. Required.
        :paramtype reference_trigger: ~azure.synapse.artifacts.models.TriggerReference
        :keyword offset: Timespan applied to the start time of a tumbling window when evaluating
         dependency.
        :paramtype offset: str
        :keyword size: The size of the window when evaluating the dependency. If undefined the
         frequency of the tumbling window will be used.
        :paramtype size: str
        """
        super().__init__(reference_trigger=reference_trigger, **kwargs)
        self.type: str = "TumblingWindowTriggerDependencyReference"
        self.offset = offset
        self.size = size


class TwilioLinkedService(LinkedService):
    """Linked service for Twilio.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar user_name: The Account SID of Twilio service. Required.
    :vartype user_name: JSON
    :ivar password: The auth token of Twilio service. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "type": {"required": True},
        "user_name": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
    }

    def __init__(
        self,
        *,
        user_name: JSON,
        password: "_models.SecretBase",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword user_name: The Account SID of Twilio service. Required.
        :paramtype user_name: JSON
        :keyword password: The auth token of Twilio service. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Twilio"
        self.user_name = user_name
        self.password = password


class TypeConversionSettings(_serialization.Model):
    """Type conversion settings.

    :ivar allow_data_truncation: Whether to allow data truncation when converting the data. Type:
     boolean (or Expression with resultType boolean).
    :vartype allow_data_truncation: JSON
    :ivar treat_boolean_as_number: Whether to treat boolean values as numbers. Type: boolean (or
     Expression with resultType boolean).
    :vartype treat_boolean_as_number: JSON
    :ivar date_time_format: The format for DateTime values. Type: string (or Expression with
     resultType string).
    :vartype date_time_format: JSON
    :ivar date_time_offset_format: The format for DateTimeOffset values. Type: string (or
     Expression with resultType string).
    :vartype date_time_offset_format: JSON
    :ivar time_span_format: The format for TimeSpan values. Type: string (or Expression with
     resultType string).
    :vartype time_span_format: JSON
    :ivar time_format: The format for Time values. Type: string (or Expression with resultType
     string).
    :vartype time_format: JSON
    :ivar date_format: The format for Date values. Type: string (or Expression with resultType
     string).
    :vartype date_format: JSON
    :ivar culture: The culture used to convert data from/to string. Type: string (or Expression
     with resultType string).
    :vartype culture: JSON
    """

    _attribute_map = {
        "allow_data_truncation": {"key": "allowDataTruncation", "type": "object"},
        "treat_boolean_as_number": {"key": "treatBooleanAsNumber", "type": "object"},
        "date_time_format": {"key": "dateTimeFormat", "type": "object"},
        "date_time_offset_format": {"key": "dateTimeOffsetFormat", "type": "object"},
        "time_span_format": {"key": "timeSpanFormat", "type": "object"},
        "time_format": {"key": "timeFormat", "type": "object"},
        "date_format": {"key": "dateFormat", "type": "object"},
        "culture": {"key": "culture", "type": "object"},
    }

    def __init__(
        self,
        *,
        allow_data_truncation: Optional[JSON] = None,
        treat_boolean_as_number: Optional[JSON] = None,
        date_time_format: Optional[JSON] = None,
        date_time_offset_format: Optional[JSON] = None,
        time_span_format: Optional[JSON] = None,
        time_format: Optional[JSON] = None,
        date_format: Optional[JSON] = None,
        culture: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword allow_data_truncation: Whether to allow data truncation when converting the data.
         Type: boolean (or Expression with resultType boolean).
        :paramtype allow_data_truncation: JSON
        :keyword treat_boolean_as_number: Whether to treat boolean values as numbers. Type: boolean (or
         Expression with resultType boolean).
        :paramtype treat_boolean_as_number: JSON
        :keyword date_time_format: The format for DateTime values. Type: string (or Expression with
         resultType string).
        :paramtype date_time_format: JSON
        :keyword date_time_offset_format: The format for DateTimeOffset values. Type: string (or
         Expression with resultType string).
        :paramtype date_time_offset_format: JSON
        :keyword time_span_format: The format for TimeSpan values. Type: string (or Expression with
         resultType string).
        :paramtype time_span_format: JSON
        :keyword time_format: The format for Time values. Type: string (or Expression with resultType
         string).
        :paramtype time_format: JSON
        :keyword date_format: The format for Date values. Type: string (or Expression with resultType
         string).
        :paramtype date_format: JSON
        :keyword culture: The culture used to convert data from/to string. Type: string (or Expression
         with resultType string).
        :paramtype culture: JSON
        """
        super().__init__(**kwargs)
        self.allow_data_truncation = allow_data_truncation
        self.treat_boolean_as_number = treat_boolean_as_number
        self.date_time_format = date_time_format
        self.date_time_offset_format = date_time_offset_format
        self.time_span_format = time_span_format
        self.time_format = time_format
        self.date_format = date_format
        self.culture = culture


class UntilActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """This activity executes inner activities until the specified boolean expression results to true
    or timeout is reached, whichever is earlier.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar expression: An expression that would evaluate to Boolean. The loop will continue until
     this expression evaluates to true. Required.
    :vartype expression: ~azure.synapse.artifacts.models.Expression
    :ivar timeout: Specifies the timeout for the activity to run. If there is no value specified,
     it takes the value of TimeSpan.FromDays(7) which is 1 week as default. Type: string (or
     Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])). Type: string (or Expression with
     resultType string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype timeout: JSON
    :ivar activities: List of activities to execute. Required.
    :vartype activities: list[~azure.synapse.artifacts.models.Activity]
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "expression": {"required": True},
        "activities": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "expression": {"key": "typeProperties.expression", "type": "Expression"},
        "timeout": {"key": "typeProperties.timeout", "type": "object"},
        "activities": {"key": "typeProperties.activities", "type": "[Activity]"},
    }

    def __init__(
        self,
        *,
        name: str,
        expression: "_models.Expression",
        activities: List["_models.Activity"],
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        timeout: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword expression: An expression that would evaluate to Boolean. The loop will continue until
         this expression evaluates to true. Required.
        :paramtype expression: ~azure.synapse.artifacts.models.Expression
        :keyword timeout: Specifies the timeout for the activity to run. If there is no value
         specified, it takes the value of TimeSpan.FromDays(7) which is 1 week as default. Type: string
         (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])). Type: string (or Expression with
         resultType string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype timeout: JSON
        :keyword activities: List of activities to execute. Required.
        :paramtype activities: list[~azure.synapse.artifacts.models.Activity]
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Until"
        self.expression = expression
        self.timeout = timeout
        self.activities = activities


class UpdateLandingZoneCredential(_serialization.Model):
    """UpdateLandingZoneCredential.

    :ivar sas_token: Landing zone's sas token.
    :vartype sas_token: ~azure.synapse.artifacts.models.SecureString
    """

    _attribute_map = {
        "sas_token": {"key": "sasToken", "type": "SecureString"},
    }

    def __init__(self, *, sas_token: Optional["_models.SecureString"] = None, **kwargs: Any) -> None:
        """
        :keyword sas_token: Landing zone's sas token.
        :paramtype sas_token: ~azure.synapse.artifacts.models.SecureString
        """
        super().__init__(**kwargs)
        self.sas_token = sas_token


class UserProperty(_serialization.Model):
    """User property.

    All required parameters must be populated in order to send to Azure.

    :ivar name: User property name. Required.
    :vartype name: str
    :ivar value: User property value. Type: string (or Expression with resultType string).
     Required.
    :vartype value: JSON
    """

    _validation = {
        "name": {"required": True},
        "value": {"required": True},
    }

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "value": {"key": "value", "type": "object"},
    }

    def __init__(self, *, name: str, value: JSON, **kwargs: Any) -> None:
        """
        :keyword name: User property name. Required.
        :paramtype name: str
        :keyword value: User property value. Type: string (or Expression with resultType string).
         Required.
        :paramtype value: JSON
        """
        super().__init__(**kwargs)
        self.name = name
        self.value = value


class ValidationActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """This activity verifies that an external resource exists.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar timeout: Specifies the timeout for the activity to run. If there is no value specified,
     it takes the value of TimeSpan.FromDays(7) which is 1 week as default. Type: string (or
     Expression with resultType string), pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype timeout: JSON
    :ivar sleep: A delay in seconds between validation attempts. If no value is specified, 10
     seconds will be used as the default. Type: integer (or Expression with resultType integer).
    :vartype sleep: JSON
    :ivar minimum_size: Can be used if dataset points to a file. The file must be greater than or
     equal in size to the value specified. Type: integer (or Expression with resultType integer).
    :vartype minimum_size: JSON
    :ivar child_items: Can be used if dataset points to a folder. If set to true, the folder must
     have at least one file. If set to false, the folder must be empty. Type: boolean (or Expression
     with resultType boolean).
    :vartype child_items: JSON
    :ivar dataset: Validation activity dataset reference. Required.
    :vartype dataset: ~azure.synapse.artifacts.models.DatasetReference
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "dataset": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "timeout": {"key": "typeProperties.timeout", "type": "object"},
        "sleep": {"key": "typeProperties.sleep", "type": "object"},
        "minimum_size": {"key": "typeProperties.minimumSize", "type": "object"},
        "child_items": {"key": "typeProperties.childItems", "type": "object"},
        "dataset": {"key": "typeProperties.dataset", "type": "DatasetReference"},
    }

    def __init__(
        self,
        *,
        name: str,
        dataset: "_models.DatasetReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        timeout: Optional[JSON] = None,
        sleep: Optional[JSON] = None,
        minimum_size: Optional[JSON] = None,
        child_items: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword timeout: Specifies the timeout for the activity to run. If there is no value
         specified, it takes the value of TimeSpan.FromDays(7) which is 1 week as default. Type: string
         (or Expression with resultType string), pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype timeout: JSON
        :keyword sleep: A delay in seconds between validation attempts. If no value is specified, 10
         seconds will be used as the default. Type: integer (or Expression with resultType integer).
        :paramtype sleep: JSON
        :keyword minimum_size: Can be used if dataset points to a file. The file must be greater than
         or equal in size to the value specified. Type: integer (or Expression with resultType integer).
        :paramtype minimum_size: JSON
        :keyword child_items: Can be used if dataset points to a folder. If set to true, the folder
         must have at least one file. If set to false, the folder must be empty. Type: boolean (or
         Expression with resultType boolean).
        :paramtype child_items: JSON
        :keyword dataset: Validation activity dataset reference. Required.
        :paramtype dataset: ~azure.synapse.artifacts.models.DatasetReference
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Validation"
        self.timeout = timeout
        self.sleep = sleep
        self.minimum_size = minimum_size
        self.child_items = child_items
        self.dataset = dataset


class VariableSpecification(_serialization.Model):
    """Definition of a single variable for a Pipeline.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Variable type. Required. Known values are: "String", "Bool", "Boolean", and
     "Array".
    :vartype type: str or ~azure.synapse.artifacts.models.VariableType
    :ivar default_value: Default value of variable.
    :vartype default_value: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "default_value": {"key": "defaultValue", "type": "object"},
    }

    def __init__(
        self, *, type: Union[str, "_models.VariableType"], default_value: Optional[JSON] = None, **kwargs: Any
    ) -> None:
        """
        :keyword type: Variable type. Required. Known values are: "String", "Bool", "Boolean", and
         "Array".
        :paramtype type: str or ~azure.synapse.artifacts.models.VariableType
        :keyword default_value: Default value of variable.
        :paramtype default_value: JSON
        """
        super().__init__(**kwargs)
        self.type = type
        self.default_value = default_value


class VerticaLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Vertica linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_string: An ODBC connection string. Type: string, SecureString or
     AzureKeyVaultSecretReference.
    :vartype connection_string: JSON
    :ivar server: Server name for connection. Type: string.
    :vartype server: JSON
    :ivar port: The port for the connection. Type: integer.
    :vartype port: JSON
    :ivar uid: Username for authentication. Type: string.
    :vartype uid: JSON
    :ivar database: Database name for connection. Type: string.
    :vartype database: JSON
    :ivar pwd: The Azure key vault secret reference of password in connection string.
    :vartype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_string": {"key": "typeProperties.connectionString", "type": "object"},
        "server": {"key": "typeProperties.server", "type": "object"},
        "port": {"key": "typeProperties.port", "type": "object"},
        "uid": {"key": "typeProperties.uid", "type": "object"},
        "database": {"key": "typeProperties.database", "type": "object"},
        "pwd": {"key": "typeProperties.pwd", "type": "AzureKeyVaultSecretReference"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_string: Optional[JSON] = None,
        server: Optional[JSON] = None,
        port: Optional[JSON] = None,
        uid: Optional[JSON] = None,
        database: Optional[JSON] = None,
        pwd: Optional["_models.AzureKeyVaultSecretReference"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_string: An ODBC connection string. Type: string, SecureString or
         AzureKeyVaultSecretReference.
        :paramtype connection_string: JSON
        :keyword server: Server name for connection. Type: string.
        :paramtype server: JSON
        :keyword port: The port for the connection. Type: integer.
        :paramtype port: JSON
        :keyword uid: Username for authentication. Type: string.
        :paramtype uid: JSON
        :keyword database: Database name for connection. Type: string.
        :paramtype database: JSON
        :keyword pwd: The Azure key vault secret reference of password in connection string.
        :paramtype pwd: ~azure.synapse.artifacts.models.AzureKeyVaultSecretReference
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Vertica"
        self.connection_string = connection_string
        self.server = server
        self.port = port
        self.uid = uid
        self.database = database
        self.pwd = pwd
        self.encrypted_credential = encrypted_credential


class VerticaSource(TabularSource):
    """A copy activity Vertica source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "VerticaSource"
        self.query = query


class VerticaTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Vertica dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: This property will be retired. Please consider using schema + table
     properties instead.
    :vartype table_name: JSON
    :ivar table: The table name of the Vertica. Type: string (or Expression with resultType
     string).
    :vartype table: JSON
    :ivar schema_type_properties_schema: The schema name of the Vertica. Type: string (or
     Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        table: Optional[JSON] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: This property will be retired. Please consider using schema + table
         properties instead.
        :paramtype table_name: JSON
        :keyword table: The table name of the Vertica. Type: string (or Expression with resultType
         string).
        :paramtype table: JSON
        :keyword schema_type_properties_schema: The schema name of the Vertica. Type: string (or
         Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "VerticaTable"
        self.table_name = table_name
        self.table = table
        self.schema_type_properties_schema = schema_type_properties_schema


class VirtualNetworkProfile(_serialization.Model):
    """Virtual Network Profile.

    :ivar compute_subnet_id: Subnet ID used for computes in workspace.
    :vartype compute_subnet_id: str
    """

    _attribute_map = {
        "compute_subnet_id": {"key": "computeSubnetId", "type": "str"},
    }

    def __init__(self, *, compute_subnet_id: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword compute_subnet_id: Subnet ID used for computes in workspace.
        :paramtype compute_subnet_id: str
        """
        super().__init__(**kwargs)
        self.compute_subnet_id = compute_subnet_id


class WaitActivity(ControlActivity):
    """This activity suspends pipeline execution for the specified interval.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar wait_time_in_seconds: Duration in seconds. Required.
    :vartype wait_time_in_seconds: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "wait_time_in_seconds": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "wait_time_in_seconds": {"key": "typeProperties.waitTimeInSeconds", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        wait_time_in_seconds: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword wait_time_in_seconds: Duration in seconds. Required.
        :paramtype wait_time_in_seconds: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "Wait"
        self.wait_time_in_seconds = wait_time_in_seconds


class WarehouseLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Microsoft Fabric Warehouse linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar artifact_id: The ID of Microsoft Fabric Warehouse artifact. Type: string (or Expression
     with resultType string). Required.
    :vartype artifact_id: JSON
    :ivar endpoint: The endpoint of Microsoft Fabric Warehouse server. Type: string (or Expression
     with resultType string). Required.
    :vartype endpoint: JSON
    :ivar workspace_id: The ID of Microsoft Fabric workspace. Type: string (or Expression with
     resultType string).
    :vartype workspace_id: JSON
    :ivar authentication_type: The authentication type to use. Known values are:
     "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
    :vartype authentication_type: str or
     ~azure.synapse.artifacts.models.WarehouseAuthenticationType
    :ivar service_principal_id: The ID of the application used to authenticate against Microsoft
     Fabric Warehouse. Type: string (or Expression with resultType string).
    :vartype service_principal_id: JSON
    :ivar service_principal_key: The Key of the application used to authenticate against Microsoft
     Fabric Warehouse.
    :vartype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar tenant: The name or ID of the tenant to which the service principal belongs. Type: string
     (or Expression with resultType string).
    :vartype tenant: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string.
    :vartype encrypted_credential: str
    :ivar service_principal_credential_type: The service principal credential type to use in
     Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
     for certificate. Type: string (or Expression with resultType string).
    :vartype service_principal_credential_type: JSON
    :ivar service_principal_credential: The credential of the service principal object in Azure
     Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
     servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
     servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
     be AzureKeyVaultSecretReference.
    :vartype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
        "artifact_id": {"required": True},
        "endpoint": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "artifact_id": {"key": "typeProperties.artifactId", "type": "object"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "workspace_id": {"key": "typeProperties.workspaceId", "type": "object"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "service_principal_id": {"key": "typeProperties.servicePrincipalId", "type": "object"},
        "service_principal_key": {"key": "typeProperties.servicePrincipalKey", "type": "SecretBase"},
        "tenant": {"key": "typeProperties.tenant", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "str"},
        "service_principal_credential_type": {"key": "typeProperties.servicePrincipalCredentialType", "type": "object"},
        "service_principal_credential": {"key": "typeProperties.servicePrincipalCredential", "type": "SecretBase"},
        "credential": {"key": "typeProperties.credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        artifact_id: JSON,
        endpoint: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        workspace_id: Optional[JSON] = None,
        authentication_type: Optional[Union[str, "_models.WarehouseAuthenticationType"]] = None,
        service_principal_id: Optional[JSON] = None,
        service_principal_key: Optional["_models.SecretBase"] = None,
        tenant: Optional[JSON] = None,
        encrypted_credential: Optional[str] = None,
        service_principal_credential_type: Optional[JSON] = None,
        service_principal_credential: Optional["_models.SecretBase"] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword artifact_id: The ID of Microsoft Fabric Warehouse artifact. Type: string (or
         Expression with resultType string). Required.
        :paramtype artifact_id: JSON
        :keyword endpoint: The endpoint of Microsoft Fabric Warehouse server. Type: string (or
         Expression with resultType string). Required.
        :paramtype endpoint: JSON
        :keyword workspace_id: The ID of Microsoft Fabric workspace. Type: string (or Expression with
         resultType string).
        :paramtype workspace_id: JSON
        :keyword authentication_type: The authentication type to use. Known values are:
         "ServicePrincipal", "SystemAssignedManagedIdentity", and "UserAssignedManagedIdentity".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.WarehouseAuthenticationType
        :keyword service_principal_id: The ID of the application used to authenticate against Microsoft
         Fabric Warehouse. Type: string (or Expression with resultType string).
        :paramtype service_principal_id: JSON
        :keyword service_principal_key: The Key of the application used to authenticate against
         Microsoft Fabric Warehouse.
        :paramtype service_principal_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword tenant: The name or ID of the tenant to which the service principal belongs. Type:
         string (or Expression with resultType string).
        :paramtype tenant: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string.
        :paramtype encrypted_credential: str
        :keyword service_principal_credential_type: The service principal credential type to use in
         Server-To-Server authentication. 'ServicePrincipalKey' for key/secret, 'ServicePrincipalCert'
         for certificate. Type: string (or Expression with resultType string).
        :paramtype service_principal_credential_type: JSON
        :keyword service_principal_credential: The credential of the service principal object in Azure
         Active Directory. If servicePrincipalCredentialType is 'ServicePrincipalKey',
         servicePrincipalCredential can be SecureString or AzureKeyVaultSecretReference. If
         servicePrincipalCredentialType is 'ServicePrincipalCert', servicePrincipalCredential can only
         be AzureKeyVaultSecretReference.
        :paramtype service_principal_credential: ~azure.synapse.artifacts.models.SecretBase
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Warehouse"
        self.artifact_id = artifact_id
        self.endpoint = endpoint
        self.workspace_id = workspace_id
        self.authentication_type = authentication_type
        self.service_principal_id = service_principal_id
        self.service_principal_key = service_principal_key
        self.tenant = tenant
        self.encrypted_credential = encrypted_credential
        self.service_principal_credential_type = service_principal_credential_type
        self.service_principal_credential = service_principal_credential
        self.credential = credential


class WarehouseSink(CopySink):  # pylint: disable=too-many-instance-attributes
    """A copy activity Microsoft Fabric Warehouse sink.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy sink type. Required.
    :vartype type: str
    :ivar write_batch_size: Write batch size. Type: integer (or Expression with resultType
     integer), minimum: 0.
    :vartype write_batch_size: JSON
    :ivar write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype write_batch_timeout: JSON
    :ivar sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
     integer).
    :vartype sink_retry_count: JSON
    :ivar sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype sink_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the sink data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
     string).
    :vartype pre_copy_script: JSON
    :ivar allow_copy_command: Indicates to use Copy Command to copy data into SQL Data Warehouse.
     Type: boolean (or Expression with resultType boolean).
    :vartype allow_copy_command: JSON
    :ivar copy_command_settings: Specifies Copy Command related settings when allowCopyCommand is
     true.
    :vartype copy_command_settings: ~azure.synapse.artifacts.models.DWCopyCommandSettings
    :ivar table_option: The option to handle sink table, such as autoCreate. For now only
     'autoCreate' value is supported. Type: string (or Expression with resultType string).
    :vartype table_option: JSON
    :ivar write_behavior: Write behavior when copying data into azure Microsoft Fabric Data
     Warehouse. Type: DWWriteBehaviorEnum (or Expression with resultType DWWriteBehaviorEnum).
    :vartype write_behavior: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "write_batch_size": {"key": "writeBatchSize", "type": "object"},
        "write_batch_timeout": {"key": "writeBatchTimeout", "type": "object"},
        "sink_retry_count": {"key": "sinkRetryCount", "type": "object"},
        "sink_retry_wait": {"key": "sinkRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "pre_copy_script": {"key": "preCopyScript", "type": "object"},
        "allow_copy_command": {"key": "allowCopyCommand", "type": "object"},
        "copy_command_settings": {"key": "copyCommandSettings", "type": "DWCopyCommandSettings"},
        "table_option": {"key": "tableOption", "type": "object"},
        "write_behavior": {"key": "writeBehavior", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        write_batch_size: Optional[JSON] = None,
        write_batch_timeout: Optional[JSON] = None,
        sink_retry_count: Optional[JSON] = None,
        sink_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        pre_copy_script: Optional[JSON] = None,
        allow_copy_command: Optional[JSON] = None,
        copy_command_settings: Optional["_models.DWCopyCommandSettings"] = None,
        table_option: Optional[JSON] = None,
        write_behavior: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword write_batch_size: Write batch size. Type: integer (or Expression with resultType
         integer), minimum: 0.
        :paramtype write_batch_size: JSON
        :keyword write_batch_timeout: Write batch timeout. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype write_batch_timeout: JSON
        :keyword sink_retry_count: Sink retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype sink_retry_count: JSON
        :keyword sink_retry_wait: Sink retry wait. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype sink_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the sink data
         store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword pre_copy_script: SQL pre-copy script. Type: string (or Expression with resultType
         string).
        :paramtype pre_copy_script: JSON
        :keyword allow_copy_command: Indicates to use Copy Command to copy data into SQL Data
         Warehouse. Type: boolean (or Expression with resultType boolean).
        :paramtype allow_copy_command: JSON
        :keyword copy_command_settings: Specifies Copy Command related settings when allowCopyCommand
         is true.
        :paramtype copy_command_settings: ~azure.synapse.artifacts.models.DWCopyCommandSettings
        :keyword table_option: The option to handle sink table, such as autoCreate. For now only
         'autoCreate' value is supported. Type: string (or Expression with resultType string).
        :paramtype table_option: JSON
        :keyword write_behavior: Write behavior when copying data into azure Microsoft Fabric Data
         Warehouse. Type: DWWriteBehaviorEnum (or Expression with resultType DWWriteBehaviorEnum).
        :paramtype write_behavior: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            write_batch_size=write_batch_size,
            write_batch_timeout=write_batch_timeout,
            sink_retry_count=sink_retry_count,
            sink_retry_wait=sink_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "WarehouseSink"
        self.pre_copy_script = pre_copy_script
        self.allow_copy_command = allow_copy_command
        self.copy_command_settings = copy_command_settings
        self.table_option = table_option
        self.write_behavior = write_behavior


class WarehouseSource(TabularSource):  # pylint: disable=too-many-instance-attributes
    """A copy activity Microsoft Fabric Warehouse source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar sql_reader_query: Microsoft Fabric Warehouse reader query. Type: string (or Expression
     with resultType string).
    :vartype sql_reader_query: JSON
    :ivar sql_reader_stored_procedure_name: Name of the stored procedure for a Microsoft Fabric
     Warehouse source. This cannot be used at the same time as SqlReaderQuery. Type: string (or
     Expression with resultType string).
    :vartype sql_reader_stored_procedure_name: JSON
    :ivar stored_procedure_parameters: Value and type setting for stored procedure parameters.
     Example: "{Parameter1: {value: "1", type: "int"}}". Type: object (or Expression with resultType
     object), itemType: StoredProcedureParameter.
    :vartype stored_procedure_parameters: JSON
    :ivar isolation_level: Specifies the transaction locking behavior for the Microsoft Fabric
     Warehouse source. Allowed values:
     ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value is
     ReadCommitted. Type: string (or Expression with resultType string).
    :vartype isolation_level: JSON
    :ivar partition_option: The partition mechanism that will be used for Sql read in parallel.
     Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
    :vartype partition_option: JSON
    :ivar partition_settings: The settings that will be leveraged for Sql source partitioning.
    :vartype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "sql_reader_query": {"key": "sqlReaderQuery", "type": "object"},
        "sql_reader_stored_procedure_name": {"key": "sqlReaderStoredProcedureName", "type": "object"},
        "stored_procedure_parameters": {"key": "storedProcedureParameters", "type": "object"},
        "isolation_level": {"key": "isolationLevel", "type": "object"},
        "partition_option": {"key": "partitionOption", "type": "object"},
        "partition_settings": {"key": "partitionSettings", "type": "SqlPartitionSettings"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        sql_reader_query: Optional[JSON] = None,
        sql_reader_stored_procedure_name: Optional[JSON] = None,
        stored_procedure_parameters: Optional[JSON] = None,
        isolation_level: Optional[JSON] = None,
        partition_option: Optional[JSON] = None,
        partition_settings: Optional["_models.SqlPartitionSettings"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword sql_reader_query: Microsoft Fabric Warehouse reader query. Type: string (or Expression
         with resultType string).
        :paramtype sql_reader_query: JSON
        :keyword sql_reader_stored_procedure_name: Name of the stored procedure for a Microsoft Fabric
         Warehouse source. This cannot be used at the same time as SqlReaderQuery. Type: string (or
         Expression with resultType string).
        :paramtype sql_reader_stored_procedure_name: JSON
        :keyword stored_procedure_parameters: Value and type setting for stored procedure parameters.
         Example: "{Parameter1: {value: "1", type: "int"}}". Type: object (or Expression with resultType
         object), itemType: StoredProcedureParameter.
        :paramtype stored_procedure_parameters: JSON
        :keyword isolation_level: Specifies the transaction locking behavior for the Microsoft Fabric
         Warehouse source. Allowed values:
         ReadCommitted/ReadUncommitted/RepeatableRead/Serializable/Snapshot. The default value is
         ReadCommitted. Type: string (or Expression with resultType string).
        :paramtype isolation_level: JSON
        :keyword partition_option: The partition mechanism that will be used for Sql read in parallel.
         Possible values include: "None", "PhysicalPartitionsOfTable", "DynamicRange".
        :paramtype partition_option: JSON
        :keyword partition_settings: The settings that will be leveraged for Sql source partitioning.
        :paramtype partition_settings: ~azure.synapse.artifacts.models.SqlPartitionSettings
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "WarehouseSource"
        self.sql_reader_query = sql_reader_query
        self.sql_reader_stored_procedure_name = sql_reader_stored_procedure_name
        self.stored_procedure_parameters = stored_procedure_parameters
        self.isolation_level = isolation_level
        self.partition_option = partition_option
        self.partition_settings = partition_settings


class WarehouseTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Microsoft Fabric Warehouse dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar schema_type_properties_schema: The schema name of the Microsoft Fabric Warehouse. Type:
     string (or Expression with resultType string).
    :vartype schema_type_properties_schema: JSON
    :ivar table: The table name of the Microsoft Fabric Warehouse. Type: string (or Expression with
     resultType string).
    :vartype table: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "schema_type_properties_schema": {"key": "typeProperties.schema", "type": "object"},
        "table": {"key": "typeProperties.table", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        schema_type_properties_schema: Optional[JSON] = None,
        table: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword schema_type_properties_schema: The schema name of the Microsoft Fabric Warehouse.
         Type: string (or Expression with resultType string).
        :paramtype schema_type_properties_schema: JSON
        :keyword table: The table name of the Microsoft Fabric Warehouse. Type: string (or Expression
         with resultType string).
        :paramtype table: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "WarehouseTable"
        self.schema_type_properties_schema = schema_type_properties_schema
        self.table = table


class WebActivity(ExecutionActivity):  # pylint: disable=too-many-instance-attributes
    """Web activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar linked_service_name: Linked service reference.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar policy: Activity policy.
    :vartype policy: ~azure.synapse.artifacts.models.ActivityPolicy
    :ivar method: Rest API method for target endpoint. Required. Known values are: "GET", "POST",
     "PUT", and "DELETE".
    :vartype method: str or ~azure.synapse.artifacts.models.WebActivityMethod
    :ivar url: Web activity target endpoint and path. Type: string (or Expression with resultType
     string). Required.
    :vartype url: JSON
    :ivar headers: Represents the headers that will be sent to the request. For example, to set the
     language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
     "application/json" }. Type: string (or Expression with resultType string).
    :vartype headers: JSON
    :ivar body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
     method, not allowed for GET method Type: string (or Expression with resultType string).
    :vartype body: JSON
    :ivar authentication: Authentication method used for calling the endpoint.
    :vartype authentication: ~azure.synapse.artifacts.models.WebActivityAuthentication
    :ivar datasets: List of datasets passed to web endpoint.
    :vartype datasets: list[~azure.synapse.artifacts.models.DatasetReference]
    :ivar linked_services: List of linked services passed to web endpoint.
    :vartype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "method": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "policy": {"key": "policy", "type": "ActivityPolicy"},
        "method": {"key": "typeProperties.method", "type": "str"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "headers": {"key": "typeProperties.headers", "type": "object"},
        "body": {"key": "typeProperties.body", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "WebActivityAuthentication"},
        "datasets": {"key": "typeProperties.datasets", "type": "[DatasetReference]"},
        "linked_services": {"key": "typeProperties.linkedServices", "type": "[LinkedServiceReference]"},
        "connect_via": {"key": "typeProperties.connectVia", "type": "IntegrationRuntimeReference"},
    }

    def __init__(
        self,
        *,
        name: str,
        method: Union[str, "_models.WebActivityMethod"],
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        linked_service_name: Optional["_models.LinkedServiceReference"] = None,
        policy: Optional["_models.ActivityPolicy"] = None,
        headers: Optional[JSON] = None,
        body: Optional[JSON] = None,
        authentication: Optional["_models.WebActivityAuthentication"] = None,
        datasets: Optional[List["_models.DatasetReference"]] = None,
        linked_services: Optional[List["_models.LinkedServiceReference"]] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword linked_service_name: Linked service reference.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword policy: Activity policy.
        :paramtype policy: ~azure.synapse.artifacts.models.ActivityPolicy
        :keyword method: Rest API method for target endpoint. Required. Known values are: "GET",
         "POST", "PUT", and "DELETE".
        :paramtype method: str or ~azure.synapse.artifacts.models.WebActivityMethod
        :keyword url: Web activity target endpoint and path. Type: string (or Expression with
         resultType string). Required.
        :paramtype url: JSON
        :keyword headers: Represents the headers that will be sent to the request. For example, to set
         the language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
         "application/json" }. Type: string (or Expression with resultType string).
        :paramtype headers: JSON
        :keyword body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
         method, not allowed for GET method Type: string (or Expression with resultType string).
        :paramtype body: JSON
        :keyword authentication: Authentication method used for calling the endpoint.
        :paramtype authentication: ~azure.synapse.artifacts.models.WebActivityAuthentication
        :keyword datasets: List of datasets passed to web endpoint.
        :paramtype datasets: list[~azure.synapse.artifacts.models.DatasetReference]
        :keyword linked_services: List of linked services passed to web endpoint.
        :paramtype linked_services: list[~azure.synapse.artifacts.models.LinkedServiceReference]
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            linked_service_name=linked_service_name,
            policy=policy,
            **kwargs
        )
        self.type: str = "WebActivity"
        self.method = method
        self.url = url
        self.headers = headers
        self.body = body
        self.authentication = authentication
        self.datasets = datasets
        self.linked_services = linked_services
        self.connect_via = connect_via


class WebActivityAuthentication(_serialization.Model):
    """Web activity authentication properties.

    All required parameters must be populated in order to send to Azure.

    :ivar type: Web activity authentication (Basic/ClientCertificate/MSI). Required.
    :vartype type: str
    :ivar pfx: Base64-encoded contents of a PFX file.
    :vartype pfx: ~azure.synapse.artifacts.models.SecretBase
    :ivar username: Web activity authentication user name for basic authentication. Type: string
     (or Expression with resultType string).
    :vartype username: JSON
    :ivar password: Password for the PFX file or basic authentication.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar resource: Resource for which Azure Auth token will be requested when using MSI
     Authentication. Type: string (or Expression with resultType string).
    :vartype resource: JSON
    :ivar user_tenant: TenantId for which Azure Auth token will be requested when using
     ServicePrincipal Authentication. Type: string (or Expression with resultType string).
    :vartype user_tenant: JSON
    :ivar credential: The credential reference containing authentication information.
    :vartype credential: ~azure.synapse.artifacts.models.CredentialReference
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "pfx": {"key": "pfx", "type": "SecretBase"},
        "username": {"key": "username", "type": "object"},
        "password": {"key": "password", "type": "SecretBase"},
        "resource": {"key": "resource", "type": "object"},
        "user_tenant": {"key": "userTenant", "type": "object"},
        "credential": {"key": "credential", "type": "CredentialReference"},
    }

    def __init__(
        self,
        *,
        type: str,
        pfx: Optional["_models.SecretBase"] = None,
        username: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        resource: Optional[JSON] = None,
        user_tenant: Optional[JSON] = None,
        credential: Optional["_models.CredentialReference"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Web activity authentication (Basic/ClientCertificate/MSI). Required.
        :paramtype type: str
        :keyword pfx: Base64-encoded contents of a PFX file.
        :paramtype pfx: ~azure.synapse.artifacts.models.SecretBase
        :keyword username: Web activity authentication user name for basic authentication. Type: string
         (or Expression with resultType string).
        :paramtype username: JSON
        :keyword password: Password for the PFX file or basic authentication.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword resource: Resource for which Azure Auth token will be requested when using MSI
         Authentication. Type: string (or Expression with resultType string).
        :paramtype resource: JSON
        :keyword user_tenant: TenantId for which Azure Auth token will be requested when using
         ServicePrincipal Authentication. Type: string (or Expression with resultType string).
        :paramtype user_tenant: JSON
        :keyword credential: The credential reference containing authentication information.
        :paramtype credential: ~azure.synapse.artifacts.models.CredentialReference
        """
        super().__init__(**kwargs)
        self.type = type
        self.pfx = pfx
        self.username = username
        self.password = password
        self.resource = resource
        self.user_tenant = user_tenant
        self.credential = credential


class WebLinkedServiceTypeProperties(_serialization.Model):
    """Base definition of WebLinkedServiceTypeProperties, this typeProperties is polymorphic based on
    authenticationType, so not flattened in SDK models.

    You probably want to use the sub-classes and not this class directly. Known sub-classes are:
    WebAnonymousAuthentication, WebBasicAuthentication, WebClientCertificateAuthentication

    All required parameters must be populated in order to send to Azure.

    :ivar url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
     (or Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the web table source.
     Required. Known values are: "Basic", "Anonymous", and "ClientCertificate".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.WebAuthenticationType
    """

    _validation = {
        "url": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "url": {"key": "url", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
    }

    _subtype_map = {
        "authentication_type": {
            "Anonymous": "WebAnonymousAuthentication",
            "Basic": "WebBasicAuthentication",
            "ClientCertificate": "WebClientCertificateAuthentication",
        }
    }

    def __init__(self, *, url: JSON, **kwargs: Any) -> None:
        """
        :keyword url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
         (or Expression with resultType string). Required.
        :paramtype url: JSON
        """
        super().__init__(**kwargs)
        self.url = url
        self.authentication_type: Optional[str] = None


class WebAnonymousAuthentication(WebLinkedServiceTypeProperties):
    """A WebLinkedService that uses anonymous authentication to communicate with an HTTP endpoint.

    All required parameters must be populated in order to send to Azure.

    :ivar url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
     (or Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the web table source.
     Required. Known values are: "Basic", "Anonymous", and "ClientCertificate".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.WebAuthenticationType
    """

    _validation = {
        "url": {"required": True},
        "authentication_type": {"required": True},
    }

    _attribute_map = {
        "url": {"key": "url", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
    }

    def __init__(self, *, url: JSON, **kwargs: Any) -> None:
        """
        :keyword url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
         (or Expression with resultType string). Required.
        :paramtype url: JSON
        """
        super().__init__(url=url, **kwargs)
        self.authentication_type: str = "Anonymous"


class WebBasicAuthentication(WebLinkedServiceTypeProperties):
    """A WebLinkedService that uses basic authentication to communicate with an HTTP endpoint.

    All required parameters must be populated in order to send to Azure.

    :ivar url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
     (or Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the web table source.
     Required. Known values are: "Basic", "Anonymous", and "ClientCertificate".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.WebAuthenticationType
    :ivar username: User name for Basic authentication. Type: string (or Expression with resultType
     string). Required.
    :vartype username: JSON
    :ivar password: The password for Basic authentication. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "url": {"required": True},
        "authentication_type": {"required": True},
        "username": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "url": {"key": "url", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "username": {"key": "username", "type": "object"},
        "password": {"key": "password", "type": "SecretBase"},
    }

    def __init__(self, *, url: JSON, username: JSON, password: "_models.SecretBase", **kwargs: Any) -> None:
        """
        :keyword url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
         (or Expression with resultType string). Required.
        :paramtype url: JSON
        :keyword username: User name for Basic authentication. Type: string (or Expression with
         resultType string). Required.
        :paramtype username: JSON
        :keyword password: The password for Basic authentication. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(url=url, **kwargs)
        self.authentication_type: str = "Basic"
        self.username = username
        self.password = password


class WebClientCertificateAuthentication(WebLinkedServiceTypeProperties):
    """A WebLinkedService that uses client certificate based authentication to communicate with an
    HTTP endpoint. This scheme follows mutual authentication; the server must also provide valid
    credentials to the client.

    All required parameters must be populated in order to send to Azure.

    :ivar url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
     (or Expression with resultType string). Required.
    :vartype url: JSON
    :ivar authentication_type: Type of authentication used to connect to the web table source.
     Required. Known values are: "Basic", "Anonymous", and "ClientCertificate".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.WebAuthenticationType
    :ivar pfx: Base64-encoded contents of a PFX file. Required.
    :vartype pfx: ~azure.synapse.artifacts.models.SecretBase
    :ivar password: Password for the PFX file. Required.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    """

    _validation = {
        "url": {"required": True},
        "authentication_type": {"required": True},
        "pfx": {"required": True},
        "password": {"required": True},
    }

    _attribute_map = {
        "url": {"key": "url", "type": "object"},
        "authentication_type": {"key": "authenticationType", "type": "str"},
        "pfx": {"key": "pfx", "type": "SecretBase"},
        "password": {"key": "password", "type": "SecretBase"},
    }

    def __init__(self, *, url: JSON, pfx: "_models.SecretBase", password: "_models.SecretBase", **kwargs: Any) -> None:
        """
        :keyword url: The URL of the web service endpoint, e.g. http://www.microsoft.com . Type: string
         (or Expression with resultType string). Required.
        :paramtype url: JSON
        :keyword pfx: Base64-encoded contents of a PFX file. Required.
        :paramtype pfx: ~azure.synapse.artifacts.models.SecretBase
        :keyword password: Password for the PFX file. Required.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        """
        super().__init__(url=url, **kwargs)
        self.authentication_type: str = "ClientCertificate"
        self.pfx = pfx
        self.password = password


class WebHookActivity(ControlActivity):  # pylint: disable=too-many-instance-attributes
    """WebHook activity.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar name: Activity name. Required.
    :vartype name: str
    :ivar type: Type of activity. Required.
    :vartype type: str
    :ivar description: Activity description.
    :vartype description: str
    :ivar state: Activity state. This is an optional property and if not provided, the state will
     be Active by default. Known values are: "Active" and "Inactive".
    :vartype state: str or ~azure.synapse.artifacts.models.ActivityState
    :ivar on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
     This is an optional property and if not provided when the activity is inactive, the status will
     be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
    :vartype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
    :ivar depends_on: Activity depends on condition.
    :vartype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
    :ivar user_properties: Activity user properties.
    :vartype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
    :ivar method: Rest API method for target endpoint. Required. "POST"
    :vartype method: str or ~azure.synapse.artifacts.models.WebHookActivityMethod
    :ivar url: WebHook activity target endpoint and path. Type: string (or Expression with
     resultType string). Required.
    :vartype url: JSON
    :ivar timeout: The timeout within which the webhook should be called back. If there is no value
     specified, it defaults to 10 minutes. Type: string. Pattern:
     ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype timeout: str
    :ivar headers: Represents the headers that will be sent to the request. For example, to set the
     language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
     "application/json" }. Type: string (or Expression with resultType string).
    :vartype headers: JSON
    :ivar body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
     method, not allowed for GET method Type: string (or Expression with resultType string).
    :vartype body: JSON
    :ivar authentication: Authentication method used for calling the endpoint.
    :vartype authentication: ~azure.synapse.artifacts.models.WebActivityAuthentication
    :ivar report_status_on_call_back: When set to true, statusCode, output and error in callback
     request body will be consumed by activity. The activity can be marked as failed by setting
     statusCode >= 400 in callback request. Default is false. Type: boolean (or Expression with
     resultType boolean).
    :vartype report_status_on_call_back: JSON
    """

    _validation = {
        "name": {"required": True},
        "type": {"required": True},
        "method": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "state": {"key": "state", "type": "str"},
        "on_inactive_mark_as": {"key": "onInactiveMarkAs", "type": "str"},
        "depends_on": {"key": "dependsOn", "type": "[ActivityDependency]"},
        "user_properties": {"key": "userProperties", "type": "[UserProperty]"},
        "method": {"key": "typeProperties.method", "type": "str"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "timeout": {"key": "typeProperties.timeout", "type": "str"},
        "headers": {"key": "typeProperties.headers", "type": "object"},
        "body": {"key": "typeProperties.body", "type": "object"},
        "authentication": {"key": "typeProperties.authentication", "type": "WebActivityAuthentication"},
        "report_status_on_call_back": {"key": "typeProperties.reportStatusOnCallBack", "type": "object"},
    }

    def __init__(
        self,
        *,
        name: str,
        method: Union[str, "_models.WebHookActivityMethod"],
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        state: Optional[Union[str, "_models.ActivityState"]] = None,
        on_inactive_mark_as: Optional[Union[str, "_models.ActivityOnInactiveMarkAs"]] = None,
        depends_on: Optional[List["_models.ActivityDependency"]] = None,
        user_properties: Optional[List["_models.UserProperty"]] = None,
        timeout: Optional[str] = None,
        headers: Optional[JSON] = None,
        body: Optional[JSON] = None,
        authentication: Optional["_models.WebActivityAuthentication"] = None,
        report_status_on_call_back: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword name: Activity name. Required.
        :paramtype name: str
        :keyword description: Activity description.
        :paramtype description: str
        :keyword state: Activity state. This is an optional property and if not provided, the state
         will be Active by default. Known values are: "Active" and "Inactive".
        :paramtype state: str or ~azure.synapse.artifacts.models.ActivityState
        :keyword on_inactive_mark_as: Status result of the activity when the state is set to Inactive.
         This is an optional property and if not provided when the activity is inactive, the status will
         be Succeeded by default. Known values are: "Succeeded", "Failed", and "Skipped".
        :paramtype on_inactive_mark_as: str or ~azure.synapse.artifacts.models.ActivityOnInactiveMarkAs
        :keyword depends_on: Activity depends on condition.
        :paramtype depends_on: list[~azure.synapse.artifacts.models.ActivityDependency]
        :keyword user_properties: Activity user properties.
        :paramtype user_properties: list[~azure.synapse.artifacts.models.UserProperty]
        :keyword method: Rest API method for target endpoint. Required. "POST"
        :paramtype method: str or ~azure.synapse.artifacts.models.WebHookActivityMethod
        :keyword url: WebHook activity target endpoint and path. Type: string (or Expression with
         resultType string). Required.
        :paramtype url: JSON
        :keyword timeout: The timeout within which the webhook should be called back. If there is no
         value specified, it defaults to 10 minutes. Type: string. Pattern:
         ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype timeout: str
        :keyword headers: Represents the headers that will be sent to the request. For example, to set
         the language and type on a request: "headers" : { "Accept-Language": "en-us", "Content-Type":
         "application/json" }. Type: string (or Expression with resultType string).
        :paramtype headers: JSON
        :keyword body: Represents the payload that will be sent to the endpoint. Required for POST/PUT
         method, not allowed for GET method Type: string (or Expression with resultType string).
        :paramtype body: JSON
        :keyword authentication: Authentication method used for calling the endpoint.
        :paramtype authentication: ~azure.synapse.artifacts.models.WebActivityAuthentication
        :keyword report_status_on_call_back: When set to true, statusCode, output and error in callback
         request body will be consumed by activity. The activity can be marked as failed by setting
         statusCode >= 400 in callback request. Default is false. Type: boolean (or Expression with
         resultType boolean).
        :paramtype report_status_on_call_back: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            name=name,
            description=description,
            state=state,
            on_inactive_mark_as=on_inactive_mark_as,
            depends_on=depends_on,
            user_properties=user_properties,
            **kwargs
        )
        self.type: str = "WebHook"
        self.method = method
        self.url = url
        self.timeout = timeout
        self.headers = headers
        self.body = body
        self.authentication = authentication
        self.report_status_on_call_back = report_status_on_call_back


class WebLinkedService(LinkedService):
    """Web linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar type_properties: Web linked service properties. Required.
    :vartype type_properties: ~azure.synapse.artifacts.models.WebLinkedServiceTypeProperties
    """

    _validation = {
        "type": {"required": True},
        "type_properties": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "type_properties": {"key": "typeProperties", "type": "WebLinkedServiceTypeProperties"},
    }

    def __init__(
        self,
        *,
        type_properties: "_models.WebLinkedServiceTypeProperties",
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword type_properties: Web linked service properties. Required.
        :paramtype type_properties: ~azure.synapse.artifacts.models.WebLinkedServiceTypeProperties
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Web"
        self.type_properties = type_properties


class WebSource(CopySource):
    """A copy activity source for web page table.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "WebSource"
        self.additional_columns = additional_columns


class WebTableDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """The dataset points to a HTML table in the web page.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar index: The zero-based index of the table in the web page. Type: integer (or Expression
     with resultType integer), minimum: 0. Required.
    :vartype index: JSON
    :ivar path: The relative URL to the web page from the linked service URL. Type: string (or
     Expression with resultType string).
    :vartype path: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
        "index": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "index": {"key": "typeProperties.index", "type": "object"},
        "path": {"key": "typeProperties.path", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        index: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        path: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword index: The zero-based index of the table in the web page. Type: integer (or Expression
         with resultType integer), minimum: 0. Required.
        :paramtype index: JSON
        :keyword path: The relative URL to the web page from the linked service URL. Type: string (or
         Expression with resultType string).
        :paramtype path: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "WebTable"
        self.index = index
        self.path = path


class Workspace(TrackedResource):  # pylint: disable=too-many-instance-attributes
    """A workspace.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.  # pylint: disable=line-too-long
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar identity: Identity of the workspace.
    :vartype identity: ~azure.synapse.artifacts.models.ManagedIdentity
    :ivar default_data_lake_storage: Workspace default data lake storage account details.
    :vartype default_data_lake_storage:
     ~azure.synapse.artifacts.models.DataLakeStorageAccountDetails
    :ivar sql_administrator_login_password: SQL administrator login password.
    :vartype sql_administrator_login_password: str
    :ivar managed_resource_group_name: Workspace managed resource group. The resource group name
     uniquely identifies the resource group within the user subscriptionId. The resource group name
     must be no longer than 90 characters long, and must be alphanumeric characters
     (Char.IsLetterOrDigit()) and '-', '_', '(', ')' and'.'. Note that the name cannot end with '.'.
    :vartype managed_resource_group_name: str
    :ivar provisioning_state: Resource provisioning state.
    :vartype provisioning_state: str
    :ivar sql_administrator_login: Login for workspace SQL active directory administrator.
    :vartype sql_administrator_login: str
    :ivar virtual_network_profile: Virtual Network profile.
    :vartype virtual_network_profile: ~azure.synapse.artifacts.models.VirtualNetworkProfile
    :ivar connectivity_endpoints: Connectivity endpoints.
    :vartype connectivity_endpoints: dict[str, str]
    :ivar managed_virtual_network: Setting this to 'default' will ensure that all compute for this
     workspace is in a virtual network managed on behalf of the user.
    :vartype managed_virtual_network: str
    :ivar private_endpoint_connections: Private endpoint connections to the workspace.
    :vartype private_endpoint_connections:
     list[~azure.synapse.artifacts.models.PrivateEndpointConnection]
    :ivar encryption: The encryption details of the workspace.
    :vartype encryption: ~azure.synapse.artifacts.models.EncryptionDetails
    :ivar workspace_uid: The workspace unique identifier.
    :vartype workspace_uid: str
    :ivar extra_properties: Workspace level configs and feature flags.
    :vartype extra_properties: dict[str, JSON]
    :ivar managed_virtual_network_settings: Managed Virtual Network Settings.
    :vartype managed_virtual_network_settings:
     ~azure.synapse.artifacts.models.ManagedVirtualNetworkSettings
    :ivar workspace_repository_configuration: Git integration settings.
    :vartype workspace_repository_configuration:
     ~azure.synapse.artifacts.models.WorkspaceRepositoryConfiguration
    :ivar purview_configuration: Purview Configuration.
    :vartype purview_configuration: ~azure.synapse.artifacts.models.PurviewConfiguration
    :ivar adla_resource_id: The ADLA resource ID.
    :vartype adla_resource_id: str
    """

    _validation = {
        "id": {"readonly": True},
        "name": {"readonly": True},
        "type": {"readonly": True},
        "location": {"required": True},
        "provisioning_state": {"readonly": True},
        "workspace_uid": {"readonly": True},
        "extra_properties": {"readonly": True},
        "adla_resource_id": {"readonly": True},
    }

    _attribute_map = {
        "id": {"key": "id", "type": "str"},
        "name": {"key": "name", "type": "str"},
        "type": {"key": "type", "type": "str"},
        "tags": {"key": "tags", "type": "{str}"},
        "location": {"key": "location", "type": "str"},
        "identity": {"key": "identity", "type": "ManagedIdentity"},
        "default_data_lake_storage": {
            "key": "properties.defaultDataLakeStorage",
            "type": "DataLakeStorageAccountDetails",
        },
        "sql_administrator_login_password": {"key": "properties.sqlAdministratorLoginPassword", "type": "str"},
        "managed_resource_group_name": {"key": "properties.managedResourceGroupName", "type": "str"},
        "provisioning_state": {"key": "properties.provisioningState", "type": "str"},
        "sql_administrator_login": {"key": "properties.sqlAdministratorLogin", "type": "str"},
        "virtual_network_profile": {"key": "properties.virtualNetworkProfile", "type": "VirtualNetworkProfile"},
        "connectivity_endpoints": {"key": "properties.connectivityEndpoints", "type": "{str}"},
        "managed_virtual_network": {"key": "properties.managedVirtualNetwork", "type": "str"},
        "private_endpoint_connections": {
            "key": "properties.privateEndpointConnections",
            "type": "[PrivateEndpointConnection]",
        },
        "encryption": {"key": "properties.encryption", "type": "EncryptionDetails"},
        "workspace_uid": {"key": "properties.workspaceUID", "type": "str"},
        "extra_properties": {"key": "properties.extraProperties", "type": "{object}"},
        "managed_virtual_network_settings": {
            "key": "properties.managedVirtualNetworkSettings",
            "type": "ManagedVirtualNetworkSettings",
        },
        "workspace_repository_configuration": {
            "key": "properties.workspaceRepositoryConfiguration",
            "type": "WorkspaceRepositoryConfiguration",
        },
        "purview_configuration": {"key": "properties.purviewConfiguration", "type": "PurviewConfiguration"},
        "adla_resource_id": {"key": "properties.adlaResourceId", "type": "str"},
    }

    def __init__(
        self,
        *,
        location: str,
        tags: Optional[Dict[str, str]] = None,
        identity: Optional["_models.ManagedIdentity"] = None,
        default_data_lake_storage: Optional["_models.DataLakeStorageAccountDetails"] = None,
        sql_administrator_login_password: Optional[str] = None,
        managed_resource_group_name: Optional[str] = None,
        sql_administrator_login: Optional[str] = None,
        virtual_network_profile: Optional["_models.VirtualNetworkProfile"] = None,
        connectivity_endpoints: Optional[Dict[str, str]] = None,
        managed_virtual_network: Optional[str] = None,
        private_endpoint_connections: Optional[List["_models.PrivateEndpointConnection"]] = None,
        encryption: Optional["_models.EncryptionDetails"] = None,
        managed_virtual_network_settings: Optional["_models.ManagedVirtualNetworkSettings"] = None,
        workspace_repository_configuration: Optional["_models.WorkspaceRepositoryConfiguration"] = None,
        purview_configuration: Optional["_models.PurviewConfiguration"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword tags: Resource tags.
        :paramtype tags: dict[str, str]
        :keyword location: The geo-location where the resource lives. Required.
        :paramtype location: str
        :keyword identity: Identity of the workspace.
        :paramtype identity: ~azure.synapse.artifacts.models.ManagedIdentity
        :keyword default_data_lake_storage: Workspace default data lake storage account details.
        :paramtype default_data_lake_storage:
         ~azure.synapse.artifacts.models.DataLakeStorageAccountDetails
        :keyword sql_administrator_login_password: SQL administrator login password.
        :paramtype sql_administrator_login_password: str
        :keyword managed_resource_group_name: Workspace managed resource group. The resource group name
         uniquely identifies the resource group within the user subscriptionId. The resource group name
         must be no longer than 90 characters long, and must be alphanumeric characters
         (Char.IsLetterOrDigit()) and '-', '_', '(', ')' and'.'. Note that the name cannot end with '.'.
        :paramtype managed_resource_group_name: str
        :keyword sql_administrator_login: Login for workspace SQL active directory administrator.
        :paramtype sql_administrator_login: str
        :keyword virtual_network_profile: Virtual Network profile.
        :paramtype virtual_network_profile: ~azure.synapse.artifacts.models.VirtualNetworkProfile
        :keyword connectivity_endpoints: Connectivity endpoints.
        :paramtype connectivity_endpoints: dict[str, str]
        :keyword managed_virtual_network: Setting this to 'default' will ensure that all compute for
         this workspace is in a virtual network managed on behalf of the user.
        :paramtype managed_virtual_network: str
        :keyword private_endpoint_connections: Private endpoint connections to the workspace.
        :paramtype private_endpoint_connections:
         list[~azure.synapse.artifacts.models.PrivateEndpointConnection]
        :keyword encryption: The encryption details of the workspace.
        :paramtype encryption: ~azure.synapse.artifacts.models.EncryptionDetails
        :keyword managed_virtual_network_settings: Managed Virtual Network Settings.
        :paramtype managed_virtual_network_settings:
         ~azure.synapse.artifacts.models.ManagedVirtualNetworkSettings
        :keyword workspace_repository_configuration: Git integration settings.
        :paramtype workspace_repository_configuration:
         ~azure.synapse.artifacts.models.WorkspaceRepositoryConfiguration
        :keyword purview_configuration: Purview Configuration.
        :paramtype purview_configuration: ~azure.synapse.artifacts.models.PurviewConfiguration
        """
        super().__init__(tags=tags, location=location, **kwargs)
        self.identity = identity
        self.default_data_lake_storage = default_data_lake_storage
        self.sql_administrator_login_password = sql_administrator_login_password
        self.managed_resource_group_name = managed_resource_group_name
        self.provisioning_state = None
        self.sql_administrator_login = sql_administrator_login
        self.virtual_network_profile = virtual_network_profile
        self.connectivity_endpoints = connectivity_endpoints
        self.managed_virtual_network = managed_virtual_network
        self.private_endpoint_connections = private_endpoint_connections
        self.encryption = encryption
        self.workspace_uid = None
        self.extra_properties = None
        self.managed_virtual_network_settings = managed_virtual_network_settings
        self.workspace_repository_configuration = workspace_repository_configuration
        self.purview_configuration = purview_configuration
        self.adla_resource_id = None


class WorkspaceIdentity(_serialization.Model):
    """Identity properties of the workspace resource.

    Variables are only populated by the server, and will be ignored when sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar type: The identity type. Currently the only supported type is 'SystemAssigned'. Required.
     Default value is "SystemAssigned".
    :vartype type: str
    :ivar principal_id: The principal id of the identity.
    :vartype principal_id: str
    :ivar tenant_id: The client tenant id of the identity.
    :vartype tenant_id: str
    """

    _validation = {
        "type": {"required": True, "constant": True},
        "principal_id": {"readonly": True},
        "tenant_id": {"readonly": True},
    }

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "principal_id": {"key": "principalId", "type": "str"},
        "tenant_id": {"key": "tenantId", "type": "str"},
    }

    type = "SystemAssigned"

    def __init__(self, **kwargs: Any) -> None:
        """ """
        super().__init__(**kwargs)
        self.principal_id = None
        self.tenant_id = None


class WorkspaceKeyDetails(_serialization.Model):
    """Details of the customer managed key associated with the workspace.

    :ivar name: Workspace Key sub-resource name.
    :vartype name: str
    :ivar key_vault_url: Workspace Key sub-resource key vault url.
    :vartype key_vault_url: str
    """

    _attribute_map = {
        "name": {"key": "name", "type": "str"},
        "key_vault_url": {"key": "keyVaultUrl", "type": "str"},
    }

    def __init__(self, *, name: Optional[str] = None, key_vault_url: Optional[str] = None, **kwargs: Any) -> None:
        """
        :keyword name: Workspace Key sub-resource name.
        :paramtype name: str
        :keyword key_vault_url: Workspace Key sub-resource key vault url.
        :paramtype key_vault_url: str
        """
        super().__init__(**kwargs)
        self.name = name
        self.key_vault_url = key_vault_url


class WorkspaceRepositoryConfiguration(_serialization.Model):  # pylint: disable=too-many-instance-attributes
    """Git integration settings.

    :ivar type: Type of workspace repositoryID configuration. Example WorkspaceVSTSConfiguration,
     WorkspaceGitHubConfiguration.
    :vartype type: str
    :ivar host_name: GitHub Enterprise host name. For example: https://github.mydomain.com.
    :vartype host_name: str
    :ivar account_name: Account name.
    :vartype account_name: str
    :ivar project_name: VSTS project name.
    :vartype project_name: str
    :ivar repository_name: Repository name.
    :vartype repository_name: str
    :ivar collaboration_branch: Collaboration branch.
    :vartype collaboration_branch: str
    :ivar root_folder: Root folder to use in the repository.
    :vartype root_folder: str
    :ivar last_commit_id: The last commit ID.
    :vartype last_commit_id: str
    :ivar tenant_id: The VSTS tenant ID.
    :vartype tenant_id: str
    :ivar client_id: GitHub bring your own app client id.
    :vartype client_id: str
    :ivar client_secret: GitHub bring your own app client secret information.
    :vartype client_secret: ~azure.synapse.artifacts.models.GitHubClientSecret
    """

    _attribute_map = {
        "type": {"key": "type", "type": "str"},
        "host_name": {"key": "hostName", "type": "str"},
        "account_name": {"key": "accountName", "type": "str"},
        "project_name": {"key": "projectName", "type": "str"},
        "repository_name": {"key": "repositoryName", "type": "str"},
        "collaboration_branch": {"key": "collaborationBranch", "type": "str"},
        "root_folder": {"key": "rootFolder", "type": "str"},
        "last_commit_id": {"key": "lastCommitId", "type": "str"},
        "tenant_id": {"key": "tenantId", "type": "str"},
        "client_id": {"key": "clientId", "type": "str"},
        "client_secret": {"key": "clientSecret", "type": "GitHubClientSecret"},
    }

    def __init__(
        self,
        *,
        type: Optional[str] = None,
        host_name: Optional[str] = None,
        account_name: Optional[str] = None,
        project_name: Optional[str] = None,
        repository_name: Optional[str] = None,
        collaboration_branch: Optional[str] = None,
        root_folder: Optional[str] = None,
        last_commit_id: Optional[str] = None,
        tenant_id: Optional[str] = None,
        client_id: Optional[str] = None,
        client_secret: Optional["_models.GitHubClientSecret"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword type: Type of workspace repositoryID configuration. Example
         WorkspaceVSTSConfiguration, WorkspaceGitHubConfiguration.
        :paramtype type: str
        :keyword host_name: GitHub Enterprise host name. For example: https://github.mydomain.com.
        :paramtype host_name: str
        :keyword account_name: Account name.
        :paramtype account_name: str
        :keyword project_name: VSTS project name.
        :paramtype project_name: str
        :keyword repository_name: Repository name.
        :paramtype repository_name: str
        :keyword collaboration_branch: Collaboration branch.
        :paramtype collaboration_branch: str
        :keyword root_folder: Root folder to use in the repository.
        :paramtype root_folder: str
        :keyword last_commit_id: The last commit ID.
        :paramtype last_commit_id: str
        :keyword tenant_id: The VSTS tenant ID.
        :paramtype tenant_id: str
        :keyword client_id: GitHub bring your own app client id.
        :paramtype client_id: str
        :keyword client_secret: GitHub bring your own app client secret information.
        :paramtype client_secret: ~azure.synapse.artifacts.models.GitHubClientSecret
        """
        super().__init__(**kwargs)
        self.type = type
        self.host_name = host_name
        self.account_name = account_name
        self.project_name = project_name
        self.repository_name = repository_name
        self.collaboration_branch = collaboration_branch
        self.root_folder = root_folder
        self.last_commit_id = last_commit_id
        self.tenant_id = tenant_id
        self.client_id = client_id
        self.client_secret = client_secret


class WorkspaceUpdateParameters(_serialization.Model):
    """Parameters for updating a workspace resource.

    :ivar tags: The resource tags.
    :vartype tags: dict[str, str]
    :ivar identity: Managed service identity of the workspace.
    :vartype identity: ~azure.synapse.artifacts.models.WorkspaceIdentity
    """

    _attribute_map = {
        "tags": {"key": "tags", "type": "{str}"},
        "identity": {"key": "identity", "type": "WorkspaceIdentity"},
    }

    def __init__(
        self,
        *,
        tags: Optional[Dict[str, str]] = None,
        identity: Optional["_models.WorkspaceIdentity"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword tags: The resource tags.
        :paramtype tags: dict[str, str]
        :keyword identity: Managed service identity of the workspace.
        :paramtype identity: ~azure.synapse.artifacts.models.WorkspaceIdentity
        """
        super().__init__(**kwargs)
        self.tags = tags
        self.identity = identity


class XeroLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Xero Service linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to Xero. It is mutually exclusive with
     any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar host: The endpoint of the Xero server. (i.e. api.xero.com). Required.
    :vartype host: JSON
    :ivar consumer_key: The consumer key associated with the Xero application.
    :vartype consumer_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar private_key: The private key from the .pem file that was generated for your Xero private
     application. You must include all the text from the .pem file, including the Unix line endings(
     ).
    :vartype private_key: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "host": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "host": {"key": "typeProperties.host", "type": "object"},
        "consumer_key": {"key": "typeProperties.consumerKey", "type": "SecretBase"},
        "private_key": {"key": "typeProperties.privateKey", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        host: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        consumer_key: Optional["_models.SecretBase"] = None,
        private_key: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to Xero. It is mutually exclusive
         with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword host: The endpoint of the Xero server. (i.e. api.xero.com). Required.
        :paramtype host: JSON
        :keyword consumer_key: The consumer key associated with the Xero application.
        :paramtype consumer_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword private_key: The private key from the .pem file that was generated for your Xero
         private application. You must include all the text from the .pem file, including the Unix line
         endings(
         ).
        :paramtype private_key: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Xero"
        self.connection_properties = connection_properties
        self.host = host
        self.consumer_key = consumer_key
        self.private_key = private_key
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class XeroObjectDataset(Dataset):
    """Xero Service dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "XeroObject"
        self.table_name = table_name


class XeroSource(TabularSource):
    """A copy activity Xero Service source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "XeroSource"
        self.query = query


class XmlDataset(Dataset):  # pylint: disable=too-many-instance-attributes
    """Xml dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar location: The location of the json data storage.
    :vartype location: ~azure.synapse.artifacts.models.DatasetLocation
    :ivar encoding_name: The code page name of the preferred encoding. If not specified, the
     default value is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column
     of the table in the following link to set supported values:
     https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
     resultType string).
    :vartype encoding_name: JSON
    :ivar null_value: The null value string. Type: string (or Expression with resultType string).
    :vartype null_value: JSON
    :ivar compression: The data compression method used for the json dataset.
    :vartype compression: ~azure.synapse.artifacts.models.DatasetCompression
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "location": {"key": "typeProperties.location", "type": "DatasetLocation"},
        "encoding_name": {"key": "typeProperties.encodingName", "type": "object"},
        "null_value": {"key": "typeProperties.nullValue", "type": "object"},
        "compression": {"key": "typeProperties.compression", "type": "DatasetCompression"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        location: Optional["_models.DatasetLocation"] = None,
        encoding_name: Optional[JSON] = None,
        null_value: Optional[JSON] = None,
        compression: Optional["_models.DatasetCompression"] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword location: The location of the json data storage.
        :paramtype location: ~azure.synapse.artifacts.models.DatasetLocation
        :keyword encoding_name: The code page name of the preferred encoding. If not specified, the
         default value is UTF-8, unless BOM denotes another Unicode encoding. Refer to the name column
         of the table in the following link to set supported values:
         https://msdn.microsoft.com/library/system.text.encoding.aspx. Type: string (or Expression with
         resultType string).
        :paramtype encoding_name: JSON
        :keyword null_value: The null value string. Type: string (or Expression with resultType
         string).
        :paramtype null_value: JSON
        :keyword compression: The data compression method used for the json dataset.
        :paramtype compression: ~azure.synapse.artifacts.models.DatasetCompression
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "Xml"
        self.location = location
        self.encoding_name = encoding_name
        self.null_value = null_value
        self.compression = compression


class XmlReadSettings(FormatReadSettings):
    """Xml read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The read setting type. Required.
    :vartype type: str
    :ivar compression_properties: Compression settings.
    :vartype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
    :ivar validation_mode: Indicates what validation method is used when reading the xml files.
     Allowed values: 'none', 'xsd', or 'dtd'. Type: string (or Expression with resultType string).
    :vartype validation_mode: JSON
    :ivar detect_data_type: Indicates whether type detection is enabled when reading the xml files.
     Type: boolean (or Expression with resultType boolean).
    :vartype detect_data_type: JSON
    :ivar namespaces: Indicates whether namespace is enabled when reading the xml files. Type:
     boolean (or Expression with resultType boolean).
    :vartype namespaces: JSON
    :ivar namespace_prefixes: Namespace uri to prefix mappings to override the prefixes in column
     names when namespace is enabled, if no prefix is defined for a namespace uri, the prefix of xml
     element/attribute name in the xml data file will be used. Example:
     "{"http://www.example.com/xml":"prefix"}" Type: object (or Expression with resultType object).
    :vartype namespace_prefixes: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "compression_properties": {"key": "compressionProperties", "type": "CompressionReadSettings"},
        "validation_mode": {"key": "validationMode", "type": "object"},
        "detect_data_type": {"key": "detectDataType", "type": "object"},
        "namespaces": {"key": "namespaces", "type": "object"},
        "namespace_prefixes": {"key": "namespacePrefixes", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        compression_properties: Optional["_models.CompressionReadSettings"] = None,
        validation_mode: Optional[JSON] = None,
        detect_data_type: Optional[JSON] = None,
        namespaces: Optional[JSON] = None,
        namespace_prefixes: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword compression_properties: Compression settings.
        :paramtype compression_properties: ~azure.synapse.artifacts.models.CompressionReadSettings
        :keyword validation_mode: Indicates what validation method is used when reading the xml files.
         Allowed values: 'none', 'xsd', or 'dtd'. Type: string (or Expression with resultType string).
        :paramtype validation_mode: JSON
        :keyword detect_data_type: Indicates whether type detection is enabled when reading the xml
         files. Type: boolean (or Expression with resultType boolean).
        :paramtype detect_data_type: JSON
        :keyword namespaces: Indicates whether namespace is enabled when reading the xml files. Type:
         boolean (or Expression with resultType boolean).
        :paramtype namespaces: JSON
        :keyword namespace_prefixes: Namespace uri to prefix mappings to override the prefixes in
         column names when namespace is enabled, if no prefix is defined for a namespace uri, the prefix
         of xml element/attribute name in the xml data file will be used. Example:
         "{"http://www.example.com/xml":"prefix"}" Type: object (or Expression with resultType object).
        :paramtype namespace_prefixes: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "XmlReadSettings"
        self.compression_properties = compression_properties
        self.validation_mode = validation_mode
        self.detect_data_type = detect_data_type
        self.namespaces = namespaces
        self.namespace_prefixes = namespace_prefixes


class XmlSource(CopySource):
    """A copy activity Xml source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar store_settings: Xml store settings.
    :vartype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
    :ivar format_settings: Xml format settings.
    :vartype format_settings: ~azure.synapse.artifacts.models.XmlReadSettings
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "store_settings": {"key": "storeSettings", "type": "StoreReadSettings"},
        "format_settings": {"key": "formatSettings", "type": "XmlReadSettings"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        store_settings: Optional["_models.StoreReadSettings"] = None,
        format_settings: Optional["_models.XmlReadSettings"] = None,
        additional_columns: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword store_settings: Xml store settings.
        :paramtype store_settings: ~azure.synapse.artifacts.models.StoreReadSettings
        :keyword format_settings: Xml format settings.
        :paramtype format_settings: ~azure.synapse.artifacts.models.XmlReadSettings
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            **kwargs
        )
        self.type: str = "XmlSource"
        self.store_settings = store_settings
        self.format_settings = format_settings
        self.additional_columns = additional_columns


class ZendeskLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Linked service for Zendesk.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar authentication_type: The authentication type to use. Required. Known values are: "Basic"
     and "Token".
    :vartype authentication_type: str or ~azure.synapse.artifacts.models.ZendeskAuthenticationType
    :ivar url: The url to connect Zendesk source. Type: string (or Expression with resultType
     string). Required.
    :vartype url: JSON
    :ivar user_name: The username of the Zendesk source. Type: string (or Expression with
     resultType string).
    :vartype user_name: JSON
    :ivar password: The password of the Zendesk source.
    :vartype password: ~azure.synapse.artifacts.models.SecretBase
    :ivar api_token: The api token for the Zendesk source.
    :vartype api_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "authentication_type": {"required": True},
        "url": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "authentication_type": {"key": "typeProperties.authenticationType", "type": "str"},
        "url": {"key": "typeProperties.url", "type": "object"},
        "user_name": {"key": "typeProperties.userName", "type": "object"},
        "password": {"key": "typeProperties.password", "type": "SecretBase"},
        "api_token": {"key": "typeProperties.apiToken", "type": "SecretBase"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        authentication_type: Union[str, "_models.ZendeskAuthenticationType"],
        url: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        user_name: Optional[JSON] = None,
        password: Optional["_models.SecretBase"] = None,
        api_token: Optional["_models.SecretBase"] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword authentication_type: The authentication type to use. Required. Known values are:
         "Basic" and "Token".
        :paramtype authentication_type: str or
         ~azure.synapse.artifacts.models.ZendeskAuthenticationType
        :keyword url: The url to connect Zendesk source. Type: string (or Expression with resultType
         string). Required.
        :paramtype url: JSON
        :keyword user_name: The username of the Zendesk source. Type: string (or Expression with
         resultType string).
        :paramtype user_name: JSON
        :keyword password: The password of the Zendesk source.
        :paramtype password: ~azure.synapse.artifacts.models.SecretBase
        :keyword api_token: The api token for the Zendesk source.
        :paramtype api_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Zendesk"
        self.authentication_type = authentication_type
        self.url = url
        self.user_name = user_name
        self.password = password
        self.api_token = api_token
        self.encrypted_credential = encrypted_credential


class ZipDeflateReadSettings(CompressionReadSettings):
    """The ZipDeflate compression read settings.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: The Compression setting type. Required.
    :vartype type: str
    :ivar preserve_zip_file_name_as_folder: Preserve the zip file name as folder path. Type:
     boolean (or Expression with resultType boolean).
    :vartype preserve_zip_file_name_as_folder: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "preserve_zip_file_name_as_folder": {"key": "preserveZipFileNameAsFolder", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        preserve_zip_file_name_as_folder: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword preserve_zip_file_name_as_folder: Preserve the zip file name as folder path. Type:
         boolean (or Expression with resultType boolean).
        :paramtype preserve_zip_file_name_as_folder: JSON
        """
        super().__init__(additional_properties=additional_properties, **kwargs)
        self.type: str = "ZipDeflateReadSettings"
        self.preserve_zip_file_name_as_folder = preserve_zip_file_name_as_folder


class ZohoLinkedService(LinkedService):  # pylint: disable=too-many-instance-attributes
    """Zoho server linked service.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of linked service. Required.
    :vartype type: str
    :ivar version: Version of the linked service.
    :vartype version: str
    :ivar connect_via: The integration runtime reference.
    :vartype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
    :ivar description: Linked service description.
    :vartype description: str
    :ivar parameters: Parameters for linked service.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the linked service.
    :vartype annotations: list[JSON]
    :ivar connection_properties: Properties used to connect to Zoho. It is mutually exclusive with
     any other properties in the linked service. Type: object.
    :vartype connection_properties: JSON
    :ivar endpoint: The endpoint of the Zoho server. (i.e. crm.zoho.com/crm/private). Required.
    :vartype endpoint: JSON
    :ivar access_token: The access token for Zoho authentication.
    :vartype access_token: ~azure.synapse.artifacts.models.SecretBase
    :ivar use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted using
     HTTPS. The default value is true.
    :vartype use_encrypted_endpoints: JSON
    :ivar use_host_verification: Specifies whether to require the host name in the server's
     certificate to match the host name of the server when connecting over SSL. The default value is
     true.
    :vartype use_host_verification: JSON
    :ivar use_peer_verification: Specifies whether to verify the identity of the server when
     connecting over SSL. The default value is true.
    :vartype use_peer_verification: JSON
    :ivar encrypted_credential: The encrypted credential used for authentication. Credentials are
     encrypted using the integration runtime credential manager. Type: string (or Expression with
     resultType string).
    :vartype encrypted_credential: JSON
    """

    _validation = {
        "type": {"required": True},
        "endpoint": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "version": {"key": "version", "type": "str"},
        "connect_via": {"key": "connectVia", "type": "IntegrationRuntimeReference"},
        "description": {"key": "description", "type": "str"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "connection_properties": {"key": "typeProperties.connectionProperties", "type": "object"},
        "endpoint": {"key": "typeProperties.endpoint", "type": "object"},
        "access_token": {"key": "typeProperties.accessToken", "type": "SecretBase"},
        "use_encrypted_endpoints": {"key": "typeProperties.useEncryptedEndpoints", "type": "object"},
        "use_host_verification": {"key": "typeProperties.useHostVerification", "type": "object"},
        "use_peer_verification": {"key": "typeProperties.usePeerVerification", "type": "object"},
        "encrypted_credential": {"key": "typeProperties.encryptedCredential", "type": "object"},
    }

    def __init__(
        self,
        *,
        endpoint: JSON,
        additional_properties: Optional[Dict[str, JSON]] = None,
        version: Optional[str] = None,
        connect_via: Optional["_models.IntegrationRuntimeReference"] = None,
        description: Optional[str] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        connection_properties: Optional[JSON] = None,
        access_token: Optional["_models.SecretBase"] = None,
        use_encrypted_endpoints: Optional[JSON] = None,
        use_host_verification: Optional[JSON] = None,
        use_peer_verification: Optional[JSON] = None,
        encrypted_credential: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword version: Version of the linked service.
        :paramtype version: str
        :keyword connect_via: The integration runtime reference.
        :paramtype connect_via: ~azure.synapse.artifacts.models.IntegrationRuntimeReference
        :keyword description: Linked service description.
        :paramtype description: str
        :keyword parameters: Parameters for linked service.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the linked service.
        :paramtype annotations: list[JSON]
        :keyword connection_properties: Properties used to connect to Zoho. It is mutually exclusive
         with any other properties in the linked service. Type: object.
        :paramtype connection_properties: JSON
        :keyword endpoint: The endpoint of the Zoho server. (i.e. crm.zoho.com/crm/private). Required.
        :paramtype endpoint: JSON
        :keyword access_token: The access token for Zoho authentication.
        :paramtype access_token: ~azure.synapse.artifacts.models.SecretBase
        :keyword use_encrypted_endpoints: Specifies whether the data source endpoints are encrypted
         using HTTPS. The default value is true.
        :paramtype use_encrypted_endpoints: JSON
        :keyword use_host_verification: Specifies whether to require the host name in the server's
         certificate to match the host name of the server when connecting over SSL. The default value is
         true.
        :paramtype use_host_verification: JSON
        :keyword use_peer_verification: Specifies whether to verify the identity of the server when
         connecting over SSL. The default value is true.
        :paramtype use_peer_verification: JSON
        :keyword encrypted_credential: The encrypted credential used for authentication. Credentials
         are encrypted using the integration runtime credential manager. Type: string (or Expression
         with resultType string).
        :paramtype encrypted_credential: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            version=version,
            connect_via=connect_via,
            description=description,
            parameters=parameters,
            annotations=annotations,
            **kwargs
        )
        self.type: str = "Zoho"
        self.connection_properties = connection_properties
        self.endpoint = endpoint
        self.access_token = access_token
        self.use_encrypted_endpoints = use_encrypted_endpoints
        self.use_host_verification = use_host_verification
        self.use_peer_verification = use_peer_verification
        self.encrypted_credential = encrypted_credential


class ZohoObjectDataset(Dataset):
    """Zoho server dataset.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Type of dataset. Required.
    :vartype type: str
    :ivar description: Dataset description.
    :vartype description: str
    :ivar structure: Columns that define the structure of the dataset. Type: array (or Expression
     with resultType array), itemType: DatasetDataElement.
    :vartype structure: JSON
    :ivar schema: Columns that define the physical type schema of the dataset. Type: array (or
     Expression with resultType array), itemType: DatasetSchemaDataElement.
    :vartype schema: JSON
    :ivar linked_service_name: Linked service reference. Required.
    :vartype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
    :ivar parameters: Parameters for dataset.
    :vartype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
    :ivar annotations: List of tags that can be used for describing the Dataset.
    :vartype annotations: list[JSON]
    :ivar folder: The folder that this Dataset is in. If not specified, Dataset will appear at the
     root level.
    :vartype folder: ~azure.synapse.artifacts.models.DatasetFolder
    :ivar table_name: The table name. Type: string (or Expression with resultType string).
    :vartype table_name: JSON
    """

    _validation = {
        "type": {"required": True},
        "linked_service_name": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "description": {"key": "description", "type": "str"},
        "structure": {"key": "structure", "type": "object"},
        "schema": {"key": "schema", "type": "object"},
        "linked_service_name": {"key": "linkedServiceName", "type": "LinkedServiceReference"},
        "parameters": {"key": "parameters", "type": "{ParameterSpecification}"},
        "annotations": {"key": "annotations", "type": "[object]"},
        "folder": {"key": "folder", "type": "DatasetFolder"},
        "table_name": {"key": "typeProperties.tableName", "type": "object"},
    }

    def __init__(
        self,
        *,
        linked_service_name: "_models.LinkedServiceReference",
        additional_properties: Optional[Dict[str, JSON]] = None,
        description: Optional[str] = None,
        structure: Optional[JSON] = None,
        schema: Optional[JSON] = None,
        parameters: Optional[Dict[str, "_models.ParameterSpecification"]] = None,
        annotations: Optional[List[JSON]] = None,
        folder: Optional["_models.DatasetFolder"] = None,
        table_name: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword description: Dataset description.
        :paramtype description: str
        :keyword structure: Columns that define the structure of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetDataElement.
        :paramtype structure: JSON
        :keyword schema: Columns that define the physical type schema of the dataset. Type: array (or
         Expression with resultType array), itemType: DatasetSchemaDataElement.
        :paramtype schema: JSON
        :keyword linked_service_name: Linked service reference. Required.
        :paramtype linked_service_name: ~azure.synapse.artifacts.models.LinkedServiceReference
        :keyword parameters: Parameters for dataset.
        :paramtype parameters: dict[str, ~azure.synapse.artifacts.models.ParameterSpecification]
        :keyword annotations: List of tags that can be used for describing the Dataset.
        :paramtype annotations: list[JSON]
        :keyword folder: The folder that this Dataset is in. If not specified, Dataset will appear at
         the root level.
        :paramtype folder: ~azure.synapse.artifacts.models.DatasetFolder
        :keyword table_name: The table name. Type: string (or Expression with resultType string).
        :paramtype table_name: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            description=description,
            structure=structure,
            schema=schema,
            linked_service_name=linked_service_name,
            parameters=parameters,
            annotations=annotations,
            folder=folder,
            **kwargs
        )
        self.type: str = "ZohoObject"
        self.table_name = table_name


class ZohoSource(TabularSource):
    """A copy activity Zoho server source.

    All required parameters must be populated in order to send to Azure.

    :ivar additional_properties: Unmatched properties from the message are deserialized to this
     collection.
    :vartype additional_properties: dict[str, JSON]
    :ivar type: Copy source type. Required.
    :vartype type: str
    :ivar source_retry_count: Source retry count. Type: integer (or Expression with resultType
     integer).
    :vartype source_retry_count: JSON
    :ivar source_retry_wait: Source retry wait. Type: string (or Expression with resultType
     string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype source_retry_wait: JSON
    :ivar max_concurrent_connections: The maximum concurrent connection count for the source data
     store. Type: integer (or Expression with resultType integer).
    :vartype max_concurrent_connections: JSON
    :ivar query_timeout: Query timeout. Type: string (or Expression with resultType string),
     pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
    :vartype query_timeout: JSON
    :ivar additional_columns: Specifies the additional columns to be added to source data. Type:
     array of objects(AdditionalColumns) (or Expression with resultType array of objects).
    :vartype additional_columns: JSON
    :ivar query: A query to retrieve data from source. Type: string (or Expression with resultType
     string).
    :vartype query: JSON
    """

    _validation = {
        "type": {"required": True},
    }

    _attribute_map = {
        "additional_properties": {"key": "", "type": "{object}"},
        "type": {"key": "type", "type": "str"},
        "source_retry_count": {"key": "sourceRetryCount", "type": "object"},
        "source_retry_wait": {"key": "sourceRetryWait", "type": "object"},
        "max_concurrent_connections": {"key": "maxConcurrentConnections", "type": "object"},
        "query_timeout": {"key": "queryTimeout", "type": "object"},
        "additional_columns": {"key": "additionalColumns", "type": "object"},
        "query": {"key": "query", "type": "object"},
    }

    def __init__(
        self,
        *,
        additional_properties: Optional[Dict[str, JSON]] = None,
        source_retry_count: Optional[JSON] = None,
        source_retry_wait: Optional[JSON] = None,
        max_concurrent_connections: Optional[JSON] = None,
        query_timeout: Optional[JSON] = None,
        additional_columns: Optional[JSON] = None,
        query: Optional[JSON] = None,
        **kwargs: Any
    ) -> None:
        """
        :keyword additional_properties: Unmatched properties from the message are deserialized to this
         collection.
        :paramtype additional_properties: dict[str, JSON]
        :keyword source_retry_count: Source retry count. Type: integer (or Expression with resultType
         integer).
        :paramtype source_retry_count: JSON
        :keyword source_retry_wait: Source retry wait. Type: string (or Expression with resultType
         string), pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype source_retry_wait: JSON
        :keyword max_concurrent_connections: The maximum concurrent connection count for the source
         data store. Type: integer (or Expression with resultType integer).
        :paramtype max_concurrent_connections: JSON
        :keyword query_timeout: Query timeout. Type: string (or Expression with resultType string),
         pattern: ((\d+).)?(\d\d):(60|([0-5][0-9])):(60|([0-5][0-9])).
        :paramtype query_timeout: JSON
        :keyword additional_columns: Specifies the additional columns to be added to source data. Type:
         array of objects(AdditionalColumns) (or Expression with resultType array of objects).
        :paramtype additional_columns: JSON
        :keyword query: A query to retrieve data from source. Type: string (or Expression with
         resultType string).
        :paramtype query: JSON
        """
        super().__init__(
            additional_properties=additional_properties,
            source_retry_count=source_retry_count,
            source_retry_wait=source_retry_wait,
            max_concurrent_connections=max_concurrent_connections,
            query_timeout=query_timeout,
            additional_columns=additional_columns,
            **kwargs
        )
        self.type: str = "ZohoSource"
        self.query = query
