> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# S3 Unload

export const m_runner = "Maia runner";

export const maia = "Maia";

export const ComponentMetadata = ({warehouses, unsupportedWarehouses = [], componentType, connectionInputs, connectionOutputs}) => {
  const allWarehouses = [...warehouses.map(w => ({
    name: w,
    supported: true
  })), ...unsupportedWarehouses.map(w => ({
    name: w,
    supported: false
  }))];
  return <div style={{
    background: 'var(--colors-background-light, #f9fafb)',
    border: '1px solid var(--colors-border-default, #e5e7eb)',
    borderRadius: '12px',
    padding: '20px 28px',
    marginBottom: '28px',
    boxShadow: '0 1px 4px rgba(0,0,0,0.10)'
  }}>
      <table style={{
    width: '100%',
    borderCollapse: 'collapse'
  }}>
        <tbody>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle',
    width: '180px'
  }}>Project Availability</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>
              <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '8px'
  }}>
                {allWarehouses.map((w, i) => <span key={i} style={{
    background: w.supported ? '#dcfce7' : '#fee2e2',
    color: w.supported ? '#15803d' : '#b91c1c',
    border: `1px solid ${w.supported ? '#bbf7d0' : '#fca5a5'}`,
    borderRadius: '9999px',
    padding: '3px 12px',
    fontSize: '0.85rem',
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
                    {w.name} {w.supported ? '✅' : '❌'}
                  </span>)}
              </div>
            </td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Component Type</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{componentType}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Inputs</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{connectionInputs}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Outputs</td>
            <td style={{
    verticalAlign: 'middle'
  }}>{connectionOutputs}</td>
          </tr>
        </tbody>
      </table>
    </div>;
};

<ComponentMetadata warehouses={["Snowflake", "Databricks", "Amazon Redshift"]} unsupportedWarehouses={["Google BigQuery"]} componentType="Connector, Orchestration" connectionInputs="One" connectionOutputs="Unlimited" />

S3 Unload is an orchestration component that creates files on a specified S3 bucket and populates those files by copying data from a designated table or view.

To access an S3 bucket from a different AWS account, read [Background: Cross-account permissions and using IAM roles](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example4.html#access-policies-walkthrough-example4-overview).

<Warning>
  We have identified issues when using the S3 Unload component for AWS Databricks with [Serverless SQL warehouses](https://docs.databricks.com/aws/en/compute/sql-warehouse/#what-is-serverless-sql/) or [Classic SQL warehouses](https://docs.databricks.com/aws/en/compute/sql-warehouse/). Our team is actively investigating these issues to improve the component's functionality. In the meantime, we recommend using an [All-purpose compute](https://docs.databricks.com/aws/en/compute/use-compute/) as a temporary workaround.
</Warning>

If the component requires access to a cloud provider (AWS, Azure, or Google Cloud), it will use credentials as follows:

* If using [Matillion Full SaaS](/docs/guides/runner-overview#matillion-full-saas): The component will use the [cloud credentials](/docs/guides/cloud-credentials) associated with your environment to access resources.
* If using [Hybrid SaaS](/docs/guides/runner-overview#hybrid-saas): By default the component will inherit the agent's execution role (service account role). However, if there are [cloud credentials](/docs/guides/cloud-credentials) associated to your environment, these will overwrite the role.

<Note>
  If you're using a Matillion Full SaaS solution, you may need to [allow these IP address ranges](/docs/security/network-access-and-ip-allowlist-requirements#full-saas) from which Full SaaS {m_runner}s will call out to their source systems or to cloud data platforms.
</Note>

***

## Properties

<ResponseField name="Name" type="string" required>
  A human-readable name for the component.
</ResponseField>

<Tabs>
  <Tab title="Snowflake">
    {/* <!-- param-start:[stage] | warehouses: [snowflake] --> */}

    <ResponseField name="Stage" type="drop-down" required>
      Select a predefined stage for your data. These stages must be created from your Snowflake account console. Otherwise, "Custom" can be chosen for the staging to be based on the component's Storage Integration and S3 Object Prefix parameters.
    </ResponseField>

    {/* <!-- param-end:[stage] --> */}

    {/* <!-- param-start:[authentication] | warehouses: [snowflake] --> */}

    <ResponseField name="Authentication" type="drop-down" required>
      Select the authentication method. You can select either:

      * **Credentials:** Uses AWS security credentials.
      * **Storage Integration:** Use a Snowflake storage integration. A storage integration is a Snowflake object that stores a generated identity and access management (IAM) entity for your external cloud storage, along with an optional set of permitted or blocked storage locations (Amazon S3, Google Cloud Storage, or Microsoft Azure Blob Storage). For more information, read [CREATE STORAGE INTEGRATION](https://docs.snowflake.com/en/sql-reference/sql/create-storage-integration.html).
    </ResponseField>

    {/* <!-- param-end:[authentication] --> */}

    {/* <!-- param-start:[storageIntegration] | warehouses: [snowflake] --> */}

    <ResponseField name="Storage Integration" type="drop-down" required>
      Select the storage integration. Storage integrations are required to permit Snowflake to read data from and write to a cloud storage location. Integrations must be set up in advance of selecting them. Storage integrations can be configured to support Amazon S3, Google Cloud Storage, or Microsoft Azure Blob Storage, regardless of the cloud provider that hosts your Snowflake account.
    </ResponseField>

    {/* <!-- param-end:[storageIntegration] --> */}

    {/* <!-- param-start:[s3ObjectPrefix] | warehouses: [snowflake] --> */}

    <ResponseField name="S3 Object Prefix" type="file explorer" required>
      To retrieve the intended files, use the file explorer to enter the container path where the S3 bucket is located, or select from the list of S3 buckets.

      This must have the format `S3://<bucket>/<path>`.
    </ResponseField>

    {/* <!-- param-end:[s3ObjectPrefix] --> */}

    {/* <!-- param-start:[filePrefix] | warehouses: [snowflake] --> */}

    <ResponseField name="File Prefix" type="string" required>
      Filename prefix for unloaded data to be named on the S3 bucket. Each file will be named as the prefix followed by a number denoting which node this was unloaded from. All unloads are parallel and will use the maximum number of nodes available at the time.
    </ResponseField>

    {/* <!-- param-end:[filePrefix] --> */}

    {/* <!-- param-start:[encryption] | warehouses: [snowflake] --> */}

    <ResponseField name="Encryption" type="drop-down" required>
      Decide how the files are encrypted inside the S3 bucket. This property is available when using an existing Amazon S3 location for staging.

      * **None:** No encryption.
      * **Client Side Encryption:** Encrypt the data according to a client-side master key. Read [Protecting data using client-side encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) to learn more.
      * **SSE KMS:** Encrypt the data according to a key stored on KMS. Read [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) to learn more.
      * **SSE S3:** Encrypt the data according to a key stored on an S3 bucket. Read [Using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) to learn more.
    </ResponseField>

    {/* <!-- param-end:[encryption] --> */}

    {/* <!-- param-start:[kmsKeyId] | warehouses: [snowflake] --> */}

    <ResponseField name="KMS Key ID" type="drop-down" required>
      The ID of the KMS encryption key you have chosen to use in the **Encryption** property.

      Only available when encryption is set to **KMS Encryption**.
    </ResponseField>

    {/* <!-- param-end:[kmsKeyId] --> */}

    {/* <!-- param-start:[masterKey] | warehouses: [snowflake] --> */}

    <ResponseField name="Master Key" type="drop-down" required>
      The [secret definition](/docs/guides/secrets-and-secret-definitions) denoting your master key for client-side encryption. Your password should be saved as a secret definition before using this component.

      Only available when encryption is set to **Client Side Encryption**.
    </ResponseField>

    {/* <!-- param-end:[masterKey] --> */}

    {/* <!-- param-start:[warehouse] | warehouses: [snowflake] --> */}

    <ResponseField name="Warehouse" type="drop-down" required>
      The Snowflake warehouse used to run the queries. The special value `[Environment Default]` uses the warehouse defined in the environment. Read [Overview of Warehouses](https://docs.snowflake.com/en/user-guide/warehouses-overview.html) to learn more.
    </ResponseField>

    {/* <!-- param-end:[warehouse] --> */}

    {/* <!-- param-start:[database] | warehouses: [snowflake] --> */}

    <ResponseField name="Database" type="drop-down" required>
      The Snowflake database. The special value `[Environment Default]` uses the database defined in the environment. Read [Databases, Tables and Views - Overview](https://docs.snowflake.com/en/guides-overview-db) to learn more.
    </ResponseField>

    {/* <!-- param-end:[database] --> */}

    {/* <!-- param-start:[schema] | warehouses: [snowflake] --> */}

    <ResponseField name="Schema" type="drop-down" required>
      The Snowflake schema. The special value `[Environment Default]` uses the schema defined in the environment. Read [Database, Schema, and Share DDL](https://docs.snowflake.com/en/sql-reference/ddl-database.html) to learn more.
    </ResponseField>

    {/* <!-- param-end:[schema] --> */}

    {/* <!-- param-start:[targetTable] | warehouses: [snowflake] --> */}

    <ResponseField name="Target Table" type="drop-down" required>
      Select an existing table. The tables available for selection depend on the chosen schema.
    </ResponseField>

    {/* <!-- param-end:[targetTable] --> */}

    {/* <!-- param-start:[format] | warehouses: [snowflake] --> */}

    <ResponseField name="Format" type="drop-down" required>
      Select a pre-made file format that will automatically set many of the S3 Load component properties. These formats can be created through the [Create File Format](/docs/components/create-file-format) component.
    </ResponseField>

    {/* <!-- param-end:[format] --> */}

    {/* <!-- param-start:[fileType] | warehouses: [snowflake] --> */}

    <ResponseField name="File Type" type="drop-down" required>
      Select the following file type: **CSV**, **JSON**, or **Parquet**.

      Some file types may require additional formatting—this is explained in the [Snowflake documentation](https://docs.snowflake.com/en/sql-reference/sql/show-file-formats). Component properties will change to reflect the selected file type.
    </ResponseField>

    {/* <!-- param-end:[fileType] --> */}

    {/* <!-- param-start:[compression] | warehouses: [snowflake] --> */}

    <ResponseField name="Compression" type="drop-down" required>
      Select the compression method if you wish to compress your data. If you do not wish to compress at all, select NONE. The default setting is AUTO.
    </ResponseField>

    {/* <!-- param-end:[compression] --> */}

    {/* <!-- param-start:[nestColumns] | warehouses: [snowflake] --> */}

    <ResponseField name="Nest Columns" type="drop-down" required>
      JSON only. When True, the table columns should be nested into a single JSON object so that the file can be configured correctly. A table with a single variant column will not require this setting to be True. Default is False.
    </ResponseField>

    {/* <!-- param-end:[nestColumns] --> */}

    {/* <!-- param-start:[recordDelimiter] | warehouses: [snowflake] --> */}

    <ResponseField name="Record Delimiter" type="string">
      CSV only. Input a delimiter for records. This can be one or more single-byte or multi-byte characters that separate records in an input file.

      Accepted values include: leaving the field empty; a newline character `\` or its hex equivalent `0x0a`; a carriage return `\\r` or its hex equivalent `0x0d`. Also accepts a value of NONE.

      If you set the **Skip Header** to a value such as 1, then you should use a record delimiter that includes a line feed or carriage return, such as `\` or `\\r`. Otherwise, your entire file will be interpreted as the header row, and no data will be loaded.

      The specified delimiter must be a valid UTF-8 character and not a random sequence of bytes.

      Do not specify characters used for other file type options such as Escape or Escape Unenclosed Field.

      The default (if the field is left blank) is a newline character.
    </ResponseField>

    {/* <!-- param-end:[recordDelimiter] --> */}

    {/* <!-- param-start:[fieldDelimiter] | warehouses: [snowflake] --> */}

    <ResponseField name="Field Delimiter" type="string">
      CSV only. Input a delimiter for fields. This can be one or more single-byte or multibyte characters that separate fields in an input file.

      Accepted characters include common escape sequences, octal values (prefixed by \\), or hex values (prefixed by 0x). Also accepts a value of NONE.

      This delimiter is limited to a maximum of 20 characters.

      While multi-character delimiters are supported, the field delimiter cannot be a substring of the record delimiter, and vice versa. For example, if the field delimiter is "aa", the record delimiter cannot be "aabb".

      The specified delimiter must be a valid UTF-8 character and not a random sequence of bytes.

      Do not specify characters used for other file type options such as **Escape** or **Escape Unenclosed Field**.

      The default setting is a comma: `,`.
    </ResponseField>

    {/* <!-- param-end:[fieldDelimiter] --> */}

    {/* <!-- param-start:[dateFormat] | warehouses: [snowflake] --> */}

    <ResponseField name="Date Format" type="string">
      CSV only. Define the format of date values in the data files to be loaded. If a value is not specified or is AUTO, the value for the DATE\_INPUT\_FORMAT session parameter is used. The default setting is AUTO.
    </ResponseField>

    {/* <!-- param-end:[dateFormat] --> */}

    {/* <!-- param-start:[timeFormat] | warehouses: [snowflake] --> */}

    <ResponseField name="Time Format" type="string">
      CSV only. Define the format of time values in the data files to be loaded. If a value is not specified or is AUTO, the value for the TIME\_INPUT\_FORMAT session parameter is used. The default setting is AUTO.
    </ResponseField>

    {/* <!-- param-end:[timeFormat] --> */}

    {/* <!-- param-start:[timestampFormat] | warehouses: [snowflake] --> */}

    <ResponseField name="Timestamp Format" type="string">
      CSV only. Define the format of timestamp values in the data files to be loaded. If a value is not specified or is AUTO, the value for the TIMESTAMP\_INPUT\_FORMAT session parameter is used.
    </ResponseField>

    {/* <!-- param-end:[timestampFormat] --> */}

    {/* <!-- param-start:[escape] | warehouses: [snowflake] --> */}

    <ResponseField name="Escape" type="string">
      CSV only. Specify a single character to be used as the escape character for field values that are enclosed. Default is NONE.
    </ResponseField>

    {/* <!-- param-end:[escape] --> */}

    {/* <!-- param-start:[escapeUnenclosedField] | warehouses: [snowflake] --> */}

    <ResponseField name="Escape Unenclosed Field" type="string">
      CSV only. Specify a single character to be used as the escape character for unenclosed field values only. Default is `\\`. If you have set a value in the property **Field Optionally Enclosed**, all fields will become enclosed, rendering the **Escape Unenclosed Field** property redundant, in which case, it will be ignored.
    </ResponseField>

    {/* <!-- param-end:[escapeUnenclosedField] --> */}

    {/* <!-- param-start:[fieldOptionallyEnclosed] | warehouses: [snowflake] --> */}

    <ResponseField name="Field Optionally Enclosed" type="string">
      CSV only. Specify a character used to enclose strings. The value can be NONE, single quote character `'`, or double quote character `"`. To use the single quote character, use the octal or hex representation `0x27` or the double single-quoted escape `''`. Default is NONE.

      When a field contains one of these characters, escape the field using the same character. For example, to escape a string like this: 1 "2" 3, use double quotation to escape, like this: 1 ""2"" 3.
    </ResponseField>

    {/* <!-- param-end:[fieldOptionallyEnclosed] --> */}

    {/* <!-- param-start:[nullIf, nullIf1, nullIf2, nullIf3, nullIf4] | warehouses: [snowflake] --> */}

    <ResponseField name="Null If" type="editor">
      Use the **Null If** property to specify a plain string that represents NULL values during an S3 unload. The property does not require a strict format—common examples include `NULL`, `N/A`, or `\N`, depending on the null markers used in your data. When the field is empty, empty strings are treated as null values. When your null string includes special characters such as quotation marks, escape them by doubling the character (for example, represent `1 "2" 3` as `1 ""2"" 3`).

      If you are working with delimited file types, consider setting the **Escape** property to a single character (for example, `\\`) to escape special characters in field values, which helps preserve data integrity.
    </ResponseField>

    {/* <!-- param-end:[nullIf, nullIf1, nullIf2, nullIf3, nullIf4] --> */}

    {/* <!-- param-start:[trimSpace, trimSpace1, trimSpace2, trimSpace3] | warehouses: [snowflake] --> */}

    <ResponseField name="Trim Space" type="boolean" required>
      When True, removes whitespace from fields. Default setting is False.
    </ResponseField>

    {/* <!-- param-end:[trimSpace, trimSpace1, trimSpace2, trimSpace3] --> */}

    {/* <!-- param-start:[overwrite] | warehouses: [snowflake] --> */}

    <ResponseField name="Overwrite" type="drop-down" required>
      If the target file already exists, overwrite data instead of generating an error.
    </ResponseField>

    {/* <!-- param-end:[overwrite] --> */}

    {/* <!-- param-start:[singleFile] | warehouses: [snowflake] --> */}

    <ResponseField name="Single File" type="boolean" required>
      When True, the unload will work in serial rather than parallel. This results in a slower unload but a single, complete file. The default setting is False.

      When True, no file extension is used in the output filename (regardless of the file type, and regardless of whether or not the file is compressed). When False, a filename prefix must be included in the path.

      When True, the `Max File Size` property isn't applicable.
    </ResponseField>

    {/* <!-- param-end:[singleFile] --> */}

    {/* <!-- param-start:[maxFileSize] | warehouses: [snowflake] --> */}

    <ResponseField name="Max File Size" type="integer">
      The maximum size (in bytes) of each file generated, per thread. Default is 16000000 bytes (16 MB) and Snowflake has a 6.2 GB file limit for copy-into-location operations. Files that exceed the stated maximum will be split into multiple size-abiding parts.
    </ResponseField>

    {/* <!-- param-end:[maxFileSize] --> */}

    {/* <!-- param-start:[includeHeaders] | warehouses: [snowflake] --> */}

    <ResponseField name="Include Headers" type="boolean" required>
      When True, write column names as headers at the top of the unloaded files.
    </ResponseField>

    {/* <!-- param-end:[includeHeaders] --> */}
  </Tab>

  <Tab title="Databricks">
    {/* <!-- param-start:[catalog] | warehouses: [databricks] --> */}

    <ResponseField name="Catalog" type="drop-down" required>
      Select a [Databricks Unity Catalog](https://docs.databricks.com/en/data-governance/unity-catalog/index.html). The special value `[Environment Default]` uses the catalog defined in the environment. Selecting a catalog will determine which databases are available in the next parameter.
    </ResponseField>

    {/* <!-- param-end:[catalog] --> */}

    {/* <!-- param-start:[schema] | warehouses: [databricks] --> */}

    <ResponseField name="Schema (Database)" type="drop-down" required>
      The Databricks schema. The special value `[Environment Default]` uses the schema defined in the environment. Read [Create and manage schemas](https://docs.databricks.com/en/data-governance/unity-catalog/create-schemas.html) to learn more.
    </ResponseField>

    {/* <!-- param-end:[schema] --> */}

    {/* <!-- param-start:[targetTable,tableName] | warehouses: [databricks] --> */}

    <ResponseField name="Table Name" type="drop-down" required>
      The table to unload to S3.
    </ResponseField>

    {/* <!-- param-end:[targetTable,tableName] --> */}

    {/* <!-- param-start:[s3urlLocation, s3UrlLocation] | warehouses: [databricks] --> */}

    <ResponseField name="S3 URL Location" type="URL" required>
      The folder path in a private or public S3 bucket where the data will be loaded.
    </ResponseField>

    {/* <!-- param-end:[s3urlLocation, s3UrlLocation] --> */}

    {/* <!-- param-start:[encryption] | warehouses: [databricks] --> */}

    <ResponseField name="Encryption" type="drop-down">
      Decide how the files are encrypted inside the S3 bucket.

      * **Client Side Encryption:** Encrypt the data according to a client-side master key. For more information, read [Protecting data using client-side encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html).
      * **KMS Encryption:** Encrypt the data according to a key stored on KMS. For more information, read [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).
      * **S3 Encryption:** Encrypt the data according to a key stored on an S3 bucket. For more information, read [Using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html).
    </ResponseField>

    {/* <!-- param-end:[encryption] --> */}

    {/* <!-- param-start:[kmsKeyId] | warehouses: [databricks] --> */}

    <ResponseField name="KMS Key Id" type="drop-down" required>
      Select the KMS Key Id you want to use after selecting **KMS Encryption** from the `Encryption` property drop-down.
    </ResponseField>

    {/* <!-- param-end:[kmsKeyId] --> */}

    {/* <!-- param-start:[masterKey] | warehouses: [databricks] --> */}

    <ResponseField name="Master Key" type="drop-down" required>
      Select the Master Key you want to use after selecting **Client Side Encryption** from the `Encryption` property drop-down.
    </ResponseField>

    {/* <!-- param-end:[masterKey] --> */}

    {/* <!-- param-start:[fileType] | warehouses: [databricks] --> */}

    <ResponseField name="File Type" type="drop-down" required>
      Select the file type. Available types include **AVRO**, **CSV**, **JSON**, and **PARQUET**. The following properties will change to reflect the selected file type.
    </ResponseField>

    {/* <!-- param-end:[fileType] --> */}

    {/* <!-- param-start:[compression] | warehouses: [databricks] --> */}

    <ResponseField name="Compression" type="drop-down">
      Set the compression type. The default is **NONE**.

      This setting doesn't apply to **AVRO**.
    </ResponseField>

    {/* <!-- param-end:[compression] --> */}

    {/* <!-- param-start:[recordDelimiter] | warehouses: [databricks] --> */}

    <ResponseField name="Record Delimiter" type="string">
      (**CSV** only) A delimiter character used in delimited text formats. The default is a comma.
    </ResponseField>

    {/* <!-- param-end:[recordDelimiter] --> */}

    {/* <!-- param-start:[quote] | warehouses: [databricks] --> */}

    <ResponseField name="Quote" type="string">
      (**CSV** only) Sets the quote character for delimited text formats to enclose values containing the delimiter character. The default is `"`.
    </ResponseField>

    {/* <!-- param-end:[quote] --> */}

    {/* <!-- param-start:[dateFormat] | warehouses: [databricks] --> */}

    <ResponseField name="Date Format" type="string">
      (**CSV** and **JSON** only) Manually set a date format. If none is set, the default is `yyyy-MM-dd`.
    </ResponseField>

    {/* <!-- param-end:[dateFormat] --> */}

    {/* <!-- param-start:[timestampFormat] | warehouses: [databricks] --> */}

    <ResponseField name="Timestamp Format" type="string">
      (**CSV** and **JSON** only) Manually set a timestamp format. If none is set, the default is `yyyy-MM-dd'T'HH:mm:ss.[SSS][XXX]`.
    </ResponseField>

    {/* <!-- param-end:[timestampFormat] --> */}

    {/* <!-- param-start:[escape, escapeChar] | warehouses: [databricks] --> */}

    <ResponseField name="Escape" type="string">
      (**CSV** only) Sets the escape character used in delimited text formats to escape special characters. The default is `\`.
    </ResponseField>

    {/* <!-- param-end:[escape, escapeChar] --> */}

    {/* <!-- param-start:[nullValue] | warehouses: [databricks] --> */}

    <ResponseField name="Null Value" type="string">
      (**CSV** only) Sets the string representation of a null value in the input data. The default value is an empty string.
    </ResponseField>

    {/* <!-- param-end:[nullValue] --> */}

    {/* <!-- param-start:[header] | warehouses: [databricks] --> */}

    <ResponseField name="Header" type="boolean" required>
      (**CSV** only) Specify whether the input data has a header row. The default is "False".
    </ResponseField>

    {/* <!-- param-end:[header] --> */}

    {/* <!-- param-start:[escapeQuotes] | warehouses: [databricks] --> */}

    <ResponseField name="Escape Quotes" type="boolean" required>
      (**CSV** only) Specify whether to escape quote characters. The default is "True".
    </ResponseField>

    {/* <!-- param-end:[escapeQuotes] --> */}

    {/* <!-- param-start:[writeMode] | warehouses: [databricks] --> */}

    <ResponseField name="Write Mode" type="drop-down" required>
      When unloading data to an S3 bucket, choose from the following options:

      * **APPEND:** Add the new file to the existing directory.
      * **OVERWRITE:** Completely clear the directory before adding a new file.
    </ResponseField>

    {/* <!-- param-end:[writeMode] --> */}
  </Tab>

  <Tab title="Amazon Redshift">
    {/* <!-- param-start:[schema] | warehouses: [redshift] --> */}

    <ResponseField name="Schema" type="drop-down" required>
      Select the table schema. The special value `[Environment Default]` uses the schema defined in the environment. For more information on using multiple schemas, read [Schemas](https://docs.aws.amazon.com/redshift/latest/dg/r_Schemas_and_tables.html).
    </ResponseField>

    {/* <!-- param-end:[schema] --> */}

    {/* <!-- param-start:[targetTable,tableName] | warehouses: [redshift] --> */}

    <ResponseField name="Table Name" type="string" required>
      The table or view to unload to S3.
    </ResponseField>

    {/* <!-- param-end:[targetTable,tableName] --> */}

    {/* <!-- param-start:[s3urlLocation, s3UrlLocation] | warehouses: [redshift] --> */}

    <ResponseField name="S3 URL Location" type="string" required>
      The URL of the S3 bucket to unload the data into.

      <Note>
        This component can unload to any accessible bucket, regardless of region. When you enter a forward slash character `/` after a folder name, the file path is validated.
      </Note>
    </ResponseField>

    {/* <!-- param-end:[s3urlLocation, s3UrlLocation] --> */}

    {/* <!-- param-start:[s3ObjectPrefix] | warehouses: [redshift] --> */}

    <ResponseField name="S3 Object Prefix" type="string" required>
      Create data files in S3 beginning with this prefix. The format of the output is

      ```
      <prefix><slice-number>_part_<file-number>
      ```

      Where `prefix` is the string you've entered here, `slice-number` is the number of the slice in your cluster, and `file-number` denotes the file number range. For example, if a slice has 50 MB of data, and you've chosen a maximum file size of 10 MB, then the file numbers will range from 001 -> 005.
    </ResponseField>

    {/* <!-- param-end:[s3ObjectPrefix] --> */}

    {/* <!-- param-start:[encryption] | warehouses: [redshift] --> */}

    <ResponseField name="Encryption" type="drop-down">
      Decide how the files are encrypted inside the S3 bucket. This property is available when using an existing Amazon S3 location for staging.

      * **SSE S3:** Encrypt the data according to a key stored on an S3 bucket. Read [Using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) to learn more.
      * **SSE KMS:** Encrypt the data according to a key stored on KMS. Read [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) to learn more.
    </ResponseField>

    {/* <!-- param-end:[encryption] --> */}

    {/* <!-- param-start:[kmsKeyId] | warehouses: [redshift] --> */}

    <ResponseField name="KMS Key ID" type="drop-down">
      The ID of the KMS encryption key you have chosen to use in the **Encryption** property.
    </ResponseField>

    {/* <!-- param-end:[kmsKeyId] --> */}

    {/* <!-- param-start:[manifest, generateManifest] | warehouses: [redshift] --> */}

    <ResponseField name="Manifest" type="drop-down">
      Whether or not to generate a manifest file detailing the files that were added.

      <Note>
        Selecting the option **Yes (Verbose)** will create a manifest file that explicitly lists details for the data files created by the **Unload** process. For more information, read the [Redshift documentation](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html).
      </Note>
    </ResponseField>

    {/* <!-- param-end:[manifest, generateManifest] --> */}

    {/* <!-- param-start:[dataFileType] | warehouses: [redshift] --> */}

    <ResponseField name="Data File Type" type="drop-down" required>
      Select the following file type: **CSV**, **Delimited**, **Fixed Width**, or **Parquet**. Component properties will change to reflect the selected file type.
    </ResponseField>

    {/* <!-- param-end:[dataFileType] --> */}

    {/* <!-- param-start:[delimiter] | warehouses: [redshift] --> */}

    <ResponseField name="Delimiter" type="string" required>
      The delimiter that separates columns. The default is a comma. A \[TAB] character can be specified as "\ ".

      This property is available when `Data File Type` is set to **Delimited**.
    </ResponseField>

    {/* <!-- param-end:[delimiter] --> */}

    {/* <!-- param-start:[fixedWidthSpec] | warehouses: [redshift] --> */}

    <ResponseField name="Fixed Width Spec" type="string" required>
      Loads the data from a file where each column width is a fixed length, rather than separated by a delimiter. Each column is described by a name and length, separated by a colon. Each described column is then separated by a comma.

      For example, we have four columns: name, id, age, state. These columns have the respective lengths: 12,8,2,2.

      The written description to convert this data into a table using fixed-width columns would then be:

      ```
      name:12,id:8,age:2,state:2_
      ```

      Note that the columns can have any plaintext name. For more information on fixed width inputs, read the [AWS documentation](https://docs.aws.amazon.com/redshift/latest/dg/t_loading_fixed_width_data.html).

      This property is available when `Data File Type` is set to **Fixed Width**.
    </ResponseField>

    {/* <!-- param-end:[fixedWidthSpec] --> */}

    {/* <!-- param-start:[compressData] | warehouses: [redshift] --> */}

    <ResponseField name="Compress Data" type="drop-down" required>
      Whether or not the resultant files are to be compressed.

      This property is available when `Data File Type` is set to **CSV**, **Delimited**, or **Fixed Width**.
    </ResponseField>

    {/* <!-- param-end:[compressData] --> */}

    {/* <!-- param-start:[compressionType] | warehouses: [redshift] --> */}

    <ResponseField name="Compression Type" type="drop-down" required>
      If **Compress Data** is set to **Yes**, select either **GZIP** or **BZIP2** as the compression method.
    </ResponseField>

    {/* <!-- param-end:[compressionType] --> */}

    {/* <!-- param-start:[nullAs] | warehouses: [redshift] --> */}

    <ResponseField name="NULL As" type="string">
      This option replaces the specified string with null in the output table. Use this if your data has a particular representation of missing data.

      Use the **NULL As** property to specify a plain string that represents NULL values during an S3 unload. The property does not require a strict format—common examples include `NULL`, `N/A`, or `\N`, depending on the null markers used in your data. When your null string includes special characters such as quotation marks, escape them by doubling the character (for example, represent `1 "2" 3` as `1 ""2"" 3`). Do not use `\n` as a null string, because it is reserved as a line delimiter and may produce unexpected results.

      If you set `Data File Type` to **Delimited**, consider enabling the **Escape** property. This option prefixes special characters with a backslash, which helps preserve data integrity and ensures compatibility if you reload the data later using the COPY command.

      This property is available when `Data File Type` is set to **CSV**, **Delimited**, or **Fixed Width**.
    </ResponseField>

    {/* <!-- param-end:[nullAs] --> */}

    {/* <!-- param-start:[escape] | warehouses: [redshift] --> */}

    <ResponseField name="Escape" type="drop-down" required>
      Whether or not to insert backslashes to escape special characters. This is often a good idea if you intend to reload the data back into a table later, since the COPY also supports this option.

      This property is available when `Data File Type` is set to **Delimited**.
    </ResponseField>

    {/* <!-- param-end:[escape] --> */}

    {/* <!-- param-start:[allowOverwrites] | warehouses: [redshift] --> */}

    <ResponseField name="Allow Overwrites" type="drop-down">
      If the target file already exists, overwrite data instead of generating an error.
    </ResponseField>

    {/* <!-- param-end:[allowOverwrites] --> */}

    {/* <!-- param-start:[parallel] | warehouses: [redshift] --> */}

    <ResponseField name="Parallel" type="drop-down">
      If set to **Yes**, the unload will work in parallel, creating multiple files (one for each slice of the cluster). Disabling parallel will result in a slower unload but a single, complete file.

      <Note>
        Files are only split if parallel is set to **No**, and they are split based on what you specify in the **Max File Size** parameter.
      </Note>
    </ResponseField>

    {/* <!-- param-end:[parallel] --> */}

    {/* <!-- param-start:[addQuotes] | warehouses: [redshift] --> */}

    <ResponseField name="Add Quotes" type="drop-down" required>
      If set, quotation marks are added to the data.

      This property is available when `Data File Type` is set to **Delimited**.
    </ResponseField>

    {/* <!-- param-end:[addQuotes] --> */}

    {/* <!-- param-start:[iamRoleArn] | warehouses: [redshift] --> */}

    <ResponseField name="IAM Role ARN" type="drop-down">
      Select an IAM role [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) that is already attached to your Redshift cluster, and that has the necessary permissions to access S3.

      This setting is optional, since without this style of setup, the credentials of the environment (instance credentials or manually entered access keys) will be used.

      Read the [Redshift documentation](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) for more information about using a role ARN with Redshift.
    </ResponseField>

    {/* <!-- param-end:[iamRoleArn] --> */}

    {/* <!-- param-start:[maxFileSize] | warehouses: [redshift] --> */}

    <ResponseField name="Max File Size" type="string">
      The maximum size (in MB) of each file generated, per thread. Default is [16 MB and AWS has a 6.2GB file limit for Unload operations](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html). Files that exceed the stated maximum will be split into multiple size-abiding parts.
    </ResponseField>

    {/* <!-- param-end:[maxFileSize] --> */}

    {/* <!-- param-start:[includeHeader] | warehouses: [redshift] --> */}

    <ResponseField name="Include Header" type="drop-down">
      If set to **Yes**, {maia} will write column names as headers at the top of unloaded files.

      This property is available when `Data File Type` is set to **CSV** or **Delimited**.
    </ResponseField>

    {/* <!-- param-end:[includeHeader] --> */}

    {/* <!-- param-start:[s3BucketRegion, s3Region] | warehouses: [redshift] --> */}

    <ResponseField name="S3 Bucket Region" type="drop-down">
      The Amazon S3 region hosting the S3 bucket. This is not normally required and can be left as "None" (default) if the bucket is in the same region as your Redshift cluster.
    </ResponseField>

    {/* <!-- param-end:[s3BucketRegion, s3Region] --> */}
  </Tab>
</Tabs>
