{
  "tagging" : {
    "permissions" : [ "quicksight:TagResource", "quicksight:UntagResource", "quicksight:ListTagsForResource" ],
    "taggable" : true,
    "tagOnCreate" : true,
    "tagUpdatable" : true,
    "tagProperty" : "/properties/Tags",
    "cloudFormationSystemTags" : true
  },
  "typeName" : "AWS::QuickSight::DataSource",
  "readOnlyProperties" : [ "/properties/Arn", "/properties/CreatedTime", "/properties/LastUpdatedTime", "/properties/Status" ],
  "description" : "Definition of the AWS::QuickSight::DataSource Resource Type.",
  "createOnlyProperties" : [ "/properties/AwsAccountId", "/properties/DataSourceId", "/properties/Type" ],
  "primaryIdentifier" : [ "/properties/AwsAccountId", "/properties/DataSourceId" ],
  "required" : [ "Name", "Type" ],
  "sourceUrl" : "https://github.com/aws-cloudformation/aws-cloudformation-resource-providers-quicksight",
  "handlers" : {
    "read" : {
      "permissions" : [ "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:ListTagsForResource" ]
    },
    "create" : {
      "permissions" : [ "quicksight:CreateDataSource", "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:TagResource", "quicksight:ListTagsForResource", "quicksight:CreateFolderMembership", "quicksight:DeleteFolderMembership", "quicksight:ListFoldersForResource" ]
    },
    "update" : {
      "permissions" : [ "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:UpdateDataSource", "quicksight:UpdateDataSourcePermissions", "quicksight:CreateFolderMembership", "quicksight:DeleteFolderMembership", "quicksight:ListFoldersForResource", "quicksight:TagResource", "quicksight:UntagResource", "quicksight:ListTagsForResource" ]
    },
    "list" : {
      "permissions" : [ "quicksight:DescribeDataSource", "quicksight:ListDataSources" ]
    },
    "delete" : {
      "permissions" : [ "quicksight:DescribeDataSource", "quicksight:DescribeDataSourcePermissions", "quicksight:DeleteDataSource", "quicksight:ListTagsForResource" ]
    }
  },
  "writeOnlyProperties" : [ "/properties/Credentials", "/properties/FolderArns" ],
  "additionalProperties" : false,
  "definitions" : {
    "ImpalaParameters" : {
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "type" : "number",
          "minimum" : 1
        },
        "Host" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 256
        },
        "SqlEndpointPath" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 4096
        }
      },
      "required" : [ "Host", "Port", "SqlEndpointPath" ]
    },
    "S3TablesParameters" : {
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "TableBucketArn" : {
          "pattern" : "^(arn:aws[-a-z0-9]*:[a-z0-9]+:[-a-z0-9]*:[0-9]{12}:bucket/[a-zA-Z0-9-_]{3,63})$",
          "type" : "string"
        }
      }
    },
    "AuroraPostgreSqlParameters" : {
      "description" : "<p>Parameters for Amazon Aurora PostgreSQL-Compatible Edition.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>The port that Amazon Aurora PostgreSQL is listening on.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>The Amazon Aurora PostgreSQL database to connect to.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>The Amazon Aurora PostgreSQL-Compatible host to connect to.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "DataSourceCredentials" : {
      "description" : "<p>Data source credentials. This is a variant type structure. For this structure to be\n            valid, only one of the attributes can be non-null.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "SecretArn" : {
          "minLength" : 1,
          "pattern" : "^arn:[-a-z0-9]*:secretsmanager:[-a-z0-9]*:[0-9]{12}:secret:.+$",
          "description" : "<p>The Amazon Resource Name (ARN) of the secret associated with the data source in Amazon Secrets Manager.</p>",
          "type" : "string",
          "maxLength" : 2048
        },
        "CopySourceArn" : {
          "pattern" : "^arn:[-a-z0-9]*:quicksight:[-a-z0-9]*:[0-9]{12}:datasource/.+$",
          "description" : "<p>The Amazon Resource Name (ARN) of a data source that has the credential pair that you\n            want to use. When <code>CopySourceArn</code> is not null, the credential pair from the\n            data source in the ARN is used as the credentials for the\n            <code>DataSourceCredentials</code> structure.</p>",
          "type" : "string"
        },
        "CredentialPair" : {
          "$ref" : "#/definitions/CredentialPair"
        },
        "KeyPairCredentials" : {
          "$ref" : "#/definitions/KeyPairCredentials"
        }
      }
    },
    "KeyPairCredentials" : {
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "KeyPairUsername" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 64
        },
        "PrivateKey" : {
          "minLength" : 1600,
          "pattern" : "^-{5}BEGIN (ENCRYPTED )?PRIVATE KEY-{5}\\u000D?\\u000A([A-Za-z0-9/+]{64}\\u000D?\\u000A)*[A-Za-z0-9/+]{1,64}={0,2}\\u000D?\\u000A-{5}END (ENCRYPTED )?PRIVATE KEY-{5}(\\u000D?\\u000A)?$",
          "type" : "string",
          "maxLength" : 8000
        },
        "PrivateKeyPassphrase" : {
          "minLength" : 0,
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "KeyPairUsername", "PrivateKey" ]
    },
    "ManifestFileLocation" : {
      "description" : "<p>Amazon S3 manifest file location.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Bucket" : {
          "minLength" : 1,
          "description" : "<p>Amazon S3 bucket.</p>",
          "type" : "string",
          "maxLength" : 1024
        },
        "Key" : {
          "minLength" : 1,
          "description" : "<p>Amazon S3 key that identifies an object.</p>",
          "type" : "string",
          "maxLength" : 1024
        }
      },
      "required" : [ "Bucket", "Key" ]
    },
    "StarburstParameters" : {
      "description" : "<p>The parameters that are required to connect to a Starburst data source.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>The port for the Starburst data source.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "DatabaseAccessControlRole" : {
          "minLength" : 0,
          "type" : "string",
          "maxLength" : 128
        },
        "ProductType" : {
          "$ref" : "#/definitions/StarburstProductType"
        },
        "OAuthParameters" : {
          "$ref" : "#/definitions/OAuthParameters"
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>The host name of the Starburst data source.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "Catalog" : {
          "minLength" : 0,
          "description" : "<p>The catalog name for the Starburst data source.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "AuthenticationType" : {
          "$ref" : "#/definitions/AuthenticationType"
        }
      },
      "required" : [ "Catalog", "Host", "Port" ]
    },
    "RedshiftParameters" : {
      "description" : "<p>The parameters for Amazon Redshift. The <code>ClusterId</code> field can be blank if\n            <code>Host</code> and <code>Port</code> are both set. The <code>Host</code> and <code>Port</code> fields can be blank if the <code>ClusterId</code> field is set.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "IAMParameters" : {
          "$ref" : "#/definitions/RedshiftIAMParameters"
        },
        "ClusterId" : {
          "minLength" : 1,
          "description" : "<p>Cluster ID. This field can be blank if the <code>Host</code> and <code>Port</code> are\n            provided.</p>",
          "type" : "string",
          "maxLength" : 64
        },
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port. This field can be blank if the <code>ClusterId</code> is provided.</p>",
          "type" : "number",
          "minimum" : 0
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host. This field can be blank if <code>ClusterId</code> is provided.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "IdentityCenterConfiguration" : {
          "$ref" : "#/definitions/IdentityCenterConfiguration"
        }
      },
      "required" : [ "Database" ]
    },
    "VpcConnectionProperties" : {
      "description" : "<p>VPC connection properties.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "VpcConnectionArn" : {
          "description" : "<p>The Amazon Resource Name (ARN) for the VPC connection.</p>",
          "type" : "string"
        }
      },
      "required" : [ "VpcConnectionArn" ]
    },
    "SnowflakeParameters" : {
      "description" : "<p>The parameters for Snowflake.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Warehouse" : {
          "minLength" : 0,
          "description" : "<p>Warehouse.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "DatabaseAccessControlRole" : {
          "minLength" : 0,
          "type" : "string",
          "maxLength" : 128
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "OAuthParameters" : {
          "$ref" : "#/definitions/OAuthParameters"
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "AuthenticationType" : {
          "$ref" : "#/definitions/AuthenticationType"
        }
      },
      "required" : [ "Database", "Host", "Warehouse" ]
    },
    "DataSourceType" : {
      "type" : "string",
      "enum" : [ "ADOBE_ANALYTICS", "AMAZON_ELASTICSEARCH", "AMAZON_OPENSEARCH", "ATHENA", "AURORA", "AURORA_POSTGRESQL", "AWS_IOT_ANALYTICS", "DATABRICKS", "DENODO", "DREMIO", "DYNAMODB", "SAPHANA", "DB2_AS400", "EXASOL", "FILE", "FULLY_MANAGED_KNOWLEDGE_BASE", "GITHUB", "INTERNATIONAL_DATA_CORPORATION", "JIRA", "MARIADB", "MYSQL", "ORACLE", "POSTGRESQL", "PRESTO", "QBUSINESS", "REDSHIFT", "S3", "S3_TABLES", "S3_KNOWLEDGE_BASE", "SALESFORCE", "SERVICENOW", "SNOWFLAKE", "SPARK", "SPICE", "SQLSERVER", "TERADATA", "TIMESTREAM", "TWITTER", "BIGQUERY", "GOOGLE_ANALYTICS", "TRINO", "STARBURST", "MONGO", "MONGO_ATLAS", "DOCUMENTDB", "APPFLOW", "IMPALA", "GLUE", "GOOGLE_DRIVE", "CONFLUENCE", "SHAREPOINT", "ONE_DRIVE", "WEB_CRAWLER", "BOX", "GOOGLESHEETS" ]
    },
    "OAuthParameters" : {
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "TokenProviderUrl" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 2048
        },
        "OAuthScope" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 128
        },
        "IdentityProviderVpcConnectionProperties" : {
          "$ref" : "#/definitions/VpcConnectionProperties"
        },
        "IdentityProviderResourceUri" : {
          "minLength" : 1,
          "type" : "string",
          "maxLength" : 2048
        }
      },
      "required" : [ "TokenProviderUrl" ]
    },
    "AmazonElasticsearchParameters" : {
      "description" : "<p>The parameters for OpenSearch.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Domain" : {
          "minLength" : 1,
          "description" : "<p>The OpenSearch domain.</p>",
          "type" : "string",
          "maxLength" : 64
        }
      },
      "required" : [ "Domain" ]
    },
    "AmazonOpenSearchParameters" : {
      "description" : "<p>The parameters for OpenSearch.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Domain" : {
          "minLength" : 1,
          "description" : "<p>The OpenSearch domain.</p>",
          "type" : "string",
          "maxLength" : 64
        }
      },
      "required" : [ "Domain" ]
    },
    "ResourceStatus" : {
      "type" : "string",
      "enum" : [ "CREATION_IN_PROGRESS", "CREATION_SUCCESSFUL", "CREATION_FAILED", "UPDATE_IN_PROGRESS", "UPDATE_SUCCESSFUL", "UPDATE_FAILED", "PENDING_UPDATE", "DELETED" ]
    },
    "AuroraParameters" : {
      "description" : "<p>Parameters for Amazon Aurora.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "S3Parameters" : {
      "description" : "<p>The parameters for S3.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "ManifestFileLocation" : {
          "$ref" : "#/definitions/ManifestFileLocation"
        },
        "RoleArn" : {
          "minLength" : 20,
          "description" : "<p>Use the <code>RoleArn</code> structure to override an account-wide role for a specific S3 data source. For example, say an account administrator has turned off all S3 access with an account-wide role. The administrator can then use <code>RoleArn</code> to bypass the account-wide role and allow S3 access for the single S3 data source that is specified in the structure, even if the account-wide role forbidding S3 access is still active.</p>",
          "type" : "string",
          "maxLength" : 2048
        }
      },
      "required" : [ "ManifestFileLocation" ]
    },
    "IdentityCenterConfiguration" : {
      "description" : "<p>The parameters for an IAM Identity Center configuration.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "EnableIdentityPropagation" : {
          "default" : null,
          "description" : "<p>A Boolean option that controls whether Trusted Identity Propagation should be used.</p>",
          "type" : "boolean"
        }
      }
    },
    "SslProperties" : {
      "description" : "<p>Secure Socket Layer (SSL) properties that apply when Amazon QuickSight connects to your\n            underlying data source.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "DisableSsl" : {
          "default" : false,
          "description" : "<p>A Boolean option to control whether SSL should be disabled.</p>",
          "type" : "boolean"
        }
      }
    },
    "DataSourceErrorInfoType" : {
      "type" : "string",
      "enum" : [ "ACCESS_DENIED", "COPY_SOURCE_NOT_FOUND", "TIMEOUT", "ENGINE_VERSION_NOT_SUPPORTED", "UNKNOWN_HOST", "GENERIC_SQL_FAILURE", "CONFLICT", "UNKNOWN" ]
    },
    "ResourcePermission" : {
      "description" : "<p>Permission for the resource.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Actions" : {
          "minItems" : 1,
          "maxItems" : 30,
          "description" : "<p>The IAM action to grant or revoke permissions on.</p>",
          "type" : "array",
          "items" : {
            "type" : "string"
          }
        },
        "Resource" : {
          "type" : "string"
        },
        "Principal" : {
          "minLength" : 1,
          "description" : "<p>The Amazon Resource Name (ARN) of the principal. This can be one of the\n            following:</p>\n         <ul>\n            <li>\n               <p>The ARN of an Amazon QuickSight user or group associated with a data source or dataset. (This is common.)</p>\n            </li>\n            <li>\n               <p>The ARN of an Amazon QuickSight user, group, or namespace associated with an analysis, dashboard, template, or theme. (This is common.)</p>\n            </li>\n            <li>\n               <p>The ARN of an Amazon Web Services account root: This is an IAM ARN rather than a QuickSight\n                    ARN. Use this option only to share resources (templates) across Amazon Web Services accounts.\n                    (This is less common.) </p>\n            </li>\n         </ul>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Actions", "Principal" ]
    },
    "AuthenticationType" : {
      "type" : "string",
      "enum" : [ "PASSWORD", "TOKEN", "X509", "KEYPAIR" ]
    },
    "DataSourceErrorInfo" : {
      "description" : "<p>Error information for the data source creation or update.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Type" : {
          "$ref" : "#/definitions/DataSourceErrorInfoType"
        },
        "Message" : {
          "description" : "<p>Error message.</p>",
          "type" : "string"
        }
      }
    },
    "TeradataParameters" : {
      "description" : "<p>The parameters for Teradata.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "RdsParameters" : {
      "description" : "<p>The parameters for Amazon RDS.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "InstanceId" : {
          "minLength" : 1,
          "description" : "<p>Instance ID.</p>",
          "type" : "string",
          "maxLength" : 64
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "Database", "InstanceId" ]
    },
    "AthenaParameters" : {
      "description" : "<p>Parameters for Amazon Athena.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "WorkGroup" : {
          "minLength" : 1,
          "description" : "<p>The workgroup that Amazon Athena uses.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "IdentityCenterConfiguration" : {
          "$ref" : "#/definitions/IdentityCenterConfiguration"
        },
        "RoleArn" : {
          "minLength" : 20,
          "description" : "<p>Use the <code>RoleArn</code> structure to override an account-wide role for a specific Athena data source. For example, say an account administrator has turned off all Athena access with an account-wide role. The administrator can then use <code>RoleArn</code> to bypass the account-wide role and allow Athena access for the single Athena data source that is specified in the structure, even if the account-wide role forbidding Athena access is still active.</p>",
          "type" : "string",
          "maxLength" : 2048
        }
      }
    },
    "SparkParameters" : {
      "description" : "<p>The parameters for Spark.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Host", "Port" ]
    },
    "MariaDbParameters" : {
      "description" : "<p>The parameters for MariaDB.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "OracleParameters" : {
      "description" : "<p>The parameters for Oracle.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "UseServiceName" : {
          "default" : false,
          "type" : "boolean"
        },
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>The port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>The database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>An Oracle host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "PrestoParameters" : {
      "description" : "<p>The parameters for Presto.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "Catalog" : {
          "minLength" : 0,
          "description" : "<p>Catalog.</p>",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "Catalog", "Host", "Port" ]
    },
    "AwsIotAnalyticsParameters" : {
      "description" : "<p>The parameters for IoT Analytics.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "DataSetName" : {
          "minLength" : 1,
          "description" : "<p>Dataset name.</p>",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "DataSetName" ]
    },
    "StarburstProductType" : {
      "type" : "string",
      "enum" : [ "GALAXY", "ENTERPRISE" ]
    },
    "DataSourceParameters" : {
      "description" : "<p>The parameters that Amazon QuickSight uses to connect to your underlying data source.\n            This is a variant type structure. For this structure to be valid, only one of the\n            attributes can be non-null.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "S3TablesParameters" : {
          "$ref" : "#/definitions/S3TablesParameters"
        },
        "AuroraPostgreSqlParameters" : {
          "$ref" : "#/definitions/AuroraPostgreSqlParameters"
        },
        "TeradataParameters" : {
          "$ref" : "#/definitions/TeradataParameters"
        },
        "RdsParameters" : {
          "$ref" : "#/definitions/RdsParameters"
        },
        "AthenaParameters" : {
          "$ref" : "#/definitions/AthenaParameters"
        },
        "SparkParameters" : {
          "$ref" : "#/definitions/SparkParameters"
        },
        "MariaDbParameters" : {
          "$ref" : "#/definitions/MariaDbParameters"
        },
        "OracleParameters" : {
          "$ref" : "#/definitions/OracleParameters"
        },
        "PrestoParameters" : {
          "$ref" : "#/definitions/PrestoParameters"
        },
        "StarburstParameters" : {
          "$ref" : "#/definitions/StarburstParameters"
        },
        "RedshiftParameters" : {
          "$ref" : "#/definitions/RedshiftParameters"
        },
        "MySqlParameters" : {
          "$ref" : "#/definitions/MySqlParameters"
        },
        "SqlServerParameters" : {
          "$ref" : "#/definitions/SqlServerParameters"
        },
        "SnowflakeParameters" : {
          "$ref" : "#/definitions/SnowflakeParameters"
        },
        "AmazonElasticsearchParameters" : {
          "$ref" : "#/definitions/AmazonElasticsearchParameters"
        },
        "AmazonOpenSearchParameters" : {
          "$ref" : "#/definitions/AmazonOpenSearchParameters"
        },
        "PostgreSqlParameters" : {
          "$ref" : "#/definitions/PostgreSqlParameters"
        },
        "AuroraParameters" : {
          "$ref" : "#/definitions/AuroraParameters"
        },
        "S3Parameters" : {
          "$ref" : "#/definitions/S3Parameters"
        },
        "TrinoParameters" : {
          "$ref" : "#/definitions/TrinoParameters"
        },
        "DatabricksParameters" : {
          "$ref" : "#/definitions/DatabricksParameters"
        }
      }
    },
    "MySqlParameters" : {
      "description" : "<p>The parameters for MySQL.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "RedshiftIAMParameters" : {
      "description" : "<p>A structure that grants Amazon QuickSight access to your cluster and make a call to the <code>redshift:GetClusterCredentials</code> API. For more information on the <code>redshift:GetClusterCredentials</code> API, see <a href=\"https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html\">\n               <code>GetClusterCredentials</code>\n            </a>.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "AutoCreateDatabaseUser" : {
          "default" : false,
          "description" : "<p>Automatically creates a database user. If your database doesn't have a <code>DatabaseUser</code>, set this parameter to <code>True</code>. If there is no <code>DatabaseUser</code>, Amazon QuickSight can't connect to your cluster. The <code>RoleArn</code> that you use for this operation must grant access to <code>redshift:CreateClusterUser</code> to successfully create the user.</p>",
          "type" : "boolean"
        },
        "DatabaseUser" : {
          "minLength" : 1,
          "description" : "<p>The user whose permissions and group memberships will be used by Amazon QuickSight to access the cluster. If this user already exists in your database, Amazon QuickSight is granted the same permissions that the user has. If the user doesn't exist, set the value of <code>AutoCreateDatabaseUser</code> to <code>True</code> to create a new user with PUBLIC permissions.</p>",
          "type" : "string",
          "maxLength" : 64
        },
        "RoleArn" : {
          "minLength" : 20,
          "description" : "<p>Use the <code>RoleArn</code> structure to allow Amazon QuickSight to call <code>redshift:GetClusterCredentials</code> on your cluster. The calling principal must have <code>iam:PassRole</code> access to pass the role to Amazon QuickSight. The role's trust policy must allow the Amazon QuickSight service principal to assume the role.</p>",
          "type" : "string",
          "maxLength" : 2048
        },
        "DatabaseGroups" : {
          "minItems" : 1,
          "maxItems" : 50,
          "description" : "<p>A list of groups whose permissions will be granted to Amazon QuickSight to access the cluster. These permissions are combined with the permissions granted to Amazon QuickSight by the <code>DatabaseUser</code>. If you choose to include this parameter, the <code>RoleArn</code> must grant access to <code>redshift:JoinGroup</code>.</p>",
          "type" : "array",
          "items" : {
            "minLength" : 1,
            "type" : "string",
            "maxLength" : 64
          }
        }
      },
      "required" : [ "RoleArn" ]
    },
    "SqlServerParameters" : {
      "description" : "<p>The parameters for SQL Server.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "CredentialPair" : {
      "description" : "<p>The combination of user name and password that are used as credentials.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "AlternateDataSourceParameters" : {
          "minItems" : 1,
          "maxItems" : 50,
          "description" : "<p>A set of alternate data source parameters that you want to share for these\n            credentials. The credentials are applied in tandem with the data source parameters when\n            you copy a data source by using a create or update request. The API operation compares\n            the <code>DataSourceParameters</code> structure that's in the request with the\n            structures in the <code>AlternateDataSourceParameters</code> allow list. If the\n            structures are an exact match, the request is allowed to use the new data source with\n            the existing credentials. If the <code>AlternateDataSourceParameters</code> list is\n            null, the <code>DataSourceParameters</code> originally used with these\n                <code>Credentials</code> is automatically allowed.</p>",
          "type" : "array",
          "items" : {
            "$ref" : "#/definitions/DataSourceParameters"
          }
        },
        "Username" : {
          "minLength" : 1,
          "description" : "<p>User name.</p>",
          "type" : "string",
          "maxLength" : 64
        },
        "Password" : {
          "minLength" : 1,
          "description" : "<p>Password.</p>",
          "type" : "string",
          "maxLength" : 1024
        }
      },
      "required" : [ "Password", "Username" ]
    },
    "PostgreSqlParameters" : {
      "description" : "<p>The parameters for PostgreSQL.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>Port.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Database" : {
          "minLength" : 1,
          "description" : "<p>Database.</p>",
          "type" : "string",
          "maxLength" : 128
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>Host.</p>",
          "type" : "string",
          "maxLength" : 256
        }
      },
      "required" : [ "Database", "Host", "Port" ]
    },
    "Tag" : {
      "description" : "<p>The key or keys of the key-value pairs for the resource tag or tags assigned to the\n            resource.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Value" : {
          "minLength" : 1,
          "description" : "<p>Tag value.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "Key" : {
          "minLength" : 1,
          "description" : "<p>Tag key.</p>",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "Key", "Value" ]
    },
    "TrinoParameters" : {
      "description" : "<p>The parameters that are required to connect to a Trino data source.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>The port for the Trino data source.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>The host name of the Trino data source.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "Catalog" : {
          "minLength" : 0,
          "description" : "<p>The catalog name for the Trino data source.</p>",
          "type" : "string",
          "maxLength" : 128
        }
      },
      "required" : [ "Catalog", "Host", "Port" ]
    },
    "DatabricksParameters" : {
      "description" : "<p>The parameters that are required to connect to a Databricks data source.</p>",
      "additionalProperties" : false,
      "type" : "object",
      "properties" : {
        "Port" : {
          "default" : 0,
          "maximum" : 65535,
          "description" : "<p>The port for the Databricks data source.</p>",
          "type" : "number",
          "minimum" : 1
        },
        "Host" : {
          "minLength" : 1,
          "description" : "<p>The host name of the Databricks data source.</p>",
          "type" : "string",
          "maxLength" : 256
        },
        "SqlEndpointPath" : {
          "minLength" : 1,
          "description" : "<p>The HTTP path of the Databricks data source.</p>",
          "type" : "string",
          "maxLength" : 4096
        }
      },
      "required" : [ "Host", "Port", "SqlEndpointPath" ]
    }
  },
  "properties" : {
    "Status" : {
      "$ref" : "#/definitions/ResourceStatus"
    },
    "CreatedTime" : {
      "format" : "date-time",
      "description" : "<p>The time that this data source was created.</p>",
      "type" : "string"
    },
    "ErrorInfo" : {
      "$ref" : "#/definitions/DataSourceErrorInfo"
    },
    "LastUpdatedTime" : {
      "format" : "date-time",
      "description" : "<p>The last time that this data source was updated.</p>",
      "type" : "string"
    },
    "FolderArns" : {
      "minItems" : 0,
      "maxItems" : 10,
      "type" : "array",
      "items" : {
        "type" : "string"
      }
    },
    "Name" : {
      "minLength" : 1,
      "type" : "string",
      "maxLength" : 128
    },
    "DataSourceParameters" : {
      "$ref" : "#/definitions/DataSourceParameters"
    },
    "Type" : {
      "$ref" : "#/definitions/DataSourceType"
    },
    "VpcConnectionProperties" : {
      "$ref" : "#/definitions/VpcConnectionProperties"
    },
    "AlternateDataSourceParameters" : {
      "minItems" : 1,
      "maxItems" : 50,
      "description" : "<p>A set of alternate data source parameters that you want to share for the credentials\n            stored with this data source. The credentials are applied in tandem with the data source\n            parameters when you copy a data source by using a create or update request. The API\n            operation compares the <code>DataSourceParameters</code> structure that's in the request\n            with the structures in the <code>AlternateDataSourceParameters</code> allow list. If the\n            structures are an exact match, the request is allowed to use the credentials from this\n            existing data source. If the <code>AlternateDataSourceParameters</code> list is null,\n            the <code>Credentials</code> originally used with this <code>DataSourceParameters</code>\n            are automatically allowed.</p>",
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/DataSourceParameters"
      }
    },
    "AwsAccountId" : {
      "minLength" : 12,
      "pattern" : "^[0-9]{12}$",
      "type" : "string",
      "maxLength" : 12
    },
    "Permissions" : {
      "minItems" : 1,
      "maxItems" : 64,
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/ResourcePermission"
      }
    },
    "Arn" : {
      "description" : "<p>The Amazon Resource Name (ARN) of the data source.</p>",
      "type" : "string"
    },
    "SslProperties" : {
      "$ref" : "#/definitions/SslProperties"
    },
    "Credentials" : {
      "$ref" : "#/definitions/DataSourceCredentials"
    },
    "DataSourceId" : {
      "type" : "string"
    },
    "Tags" : {
      "minItems" : 1,
      "maxItems" : 200,
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Tag"
      }
    }
  }
}