> ## 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.

# CSV Load

export const filetype_0 = ".csv"

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", "Google BigQuery"]} unsupportedWarehouses={["Amazon Redshift"]} componentType="Connector, Orchestration, Test" connectionInputs="One" connectionOutputs="Unlimited" />

The CSV Load orchestration component loads data into a table from one or more CSV files. The component automatically infers the schema from the structure of the selected file(s), creates the corresponding table, and then loads the data into the table.

## Use cases

CSV Load suits a range of data ingestion scenarios. For example, you can use this component to:

* Load daily sales or transaction exports from a CRM or ERP system to make them available for downstream reporting.
* Ingest historical records from a legacy system as part of a migration to a cloud data warehouse.
* Load partner-supplied reference data—such as product catalogs, pricing lists, or exchange rate tables—delivered as recurring flat files.
* Load survey or form response exports into a staging table to combine with existing customer data for analysis.
* Process batch files deposited into cloud storage on a schedule, such as nightly inventory snapshots or weekly fulfillment reports.

You can authorize this component using either of these two methods:

* **Cloud Provider Credentials**: By default, explicit [Cloud Provider Credentials](/docs/guides/cloud-credentials) are used to facilitate cross-account or cross-cloud data loads.
* **Agent Identity**: If cloud provider credentials are not specified, the component attempts to use the Matillion Agent's native service identity to access the source data.

***

## Properties

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

### Connect

<Tabs>
  <Tab title="Snowflake">
    <ResponseField name="Type" type="drop-down" required>
      * **Snowflake Managed:** Load your file from a Snowflake internal stage.
      * **S3:** Load your file from an S3 bucket.
      * **Google Cloud Storage:** Load your file from a Google Cloud Storage bucket.
      * **Azure Blob Storage:** Load your file from an Azure Blob Storage container.
    </ResponseField>

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

    <ResponseField name="Stage" type="drop-down" required>
      Select a staging area for the data. The special value \[New Stage] will create a temporary stage to be used for loading the data when the corresponding parameter values are provided.

      The options in this drop-down menu depend on the values you select for the `Database` and `Schema` parameters. If you change these values, the list of available options updates automatically, and the previously selected option may become invalid.

      When \[New Stage] is selected, the component uses the [cloud credentials](/docs/guides/cloud-credentials) configured for your environment to access the required resources.

      <Tabs>
        <Tab title="Snowflake Managed">
          <ResponseField name="Staged file path" type="string">
            A stage may include directories. The user has the option to browse and select files from a specific directory path, for example, `/Example/Path`.

            If this is left blank, and if the **Pattern** parameter is also empty, all files from the stage will be loaded.
          </ResponseField>
        </Tab>

        <Tab title="S3">
          <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-start:[source.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.

            * **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 [Using server-side encryption with AWS KMS keys](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.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).
            * **None:** No encryption.
          </ResponseField>

          {/* <!-- param-start:[source.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-start:[source.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>
        </Tab>

        <Tab title="Google Cloud Storage">
          <ResponseField name="Storage integration" type="drop-down" required>
            Select the storage integration. Storage integrations are required to permit Snowflake to read from and write to a cloud storage location. Integrations must be set up in advance and configured to support Google Cloud Storage. For more information, read [Create storage integration](https://docs.snowflake.com/en/sql-reference/sql/create-storage-integration).
          </ResponseField>

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

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

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

        <Tab title="Azure Blob Storage">
          <ResponseField name="Azure storage location" type="file explorer" required>
            To retrieve the intended files, use the file explorer to enter the container path where the Azure Storage account is located, or select from the list of storage accounts.

            This must have the format `azure://<STORAGEACCOUNT>/<path>`.
          </ResponseField>
        </Tab>
      </Tabs>
    </ResponseField>

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

    <ResponseField name="Pattern" type="string">
      A valid regular expression (regex) to match part of a file's path or name. Files that match the pattern will be included in the load.

      If this parameter is left empty, the component automatically uses the pattern `*`, which matches all files within the specified `Staged file path` or `Stage` parameters. The pattern applies to the entire file path, not just the directory defined in `Staged file path`.

      The subfolder containing the object to load must be included here.

      <Note>
        * Only CSV files are supported.
        * Ensure that the pattern entered correctly targets the files you intend to load.
      </Note>
    </ResponseField>
  </Tab>

  <Tab title="Databricks">
    <ResponseField name="Type" type="drop-down" required>
      * **S3:** Load your file from an S3 bucket.
      * **Google Cloud Storage:** Load your file from a Google Cloud Storage bucket.
      * **Azure Blob Storage:** Load your file from an Azure Blob Storage container.

      <Tabs>
        <Tab title="S3">
          {/* <!-- param-start:[source.s3ObjectPrefix] | warehouses: [databricks] --> */}

          <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:[source.s3ObjectPrefix] --> */}
        </Tab>

        <Tab title="Google Cloud Storage">
          {/* <!-- param-start:[source.googleStorageURLLocation] | warehouses: [databricks] --> */}

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

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

            For this to work, an external location with access to the specified location must be configured. For more information, read [External Locations | Databricks on AWS](https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-external-locations).
          </ResponseField>

          {/* <!-- param-end:[source.googleStorageURLLocation] --> */}
        </Tab>

        <Tab title="Azure Blob Storage">
          {/* <!-- param-start:[source.azureStorageLocation] | warehouses: [databricks] --> */}

          <ResponseField name="Azure storage location" type="file explorer" required>
            To retrieve the intended files, use the file explorer to enter the container path where the Azure Storage account is located, or select from the list of storage accounts.

            This must have the format `azure://<STORAGEACCOUNT>/<path>`.
          </ResponseField>

          {/* <!-- param-end:[source.azureStorageLocation] --> */}
        </Tab>
      </Tabs>
    </ResponseField>

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

    <ResponseField name="Glob pattern" type="string">
      A valid glob pattern to match part of a file's path or name. Files that match the pattern will be included in the load.

      If this parameter is left empty, the component automatically uses the pattern `*`, which matches all files within the specified location parameters. The pattern applies to the entire file path, not just the directory defined in the location parameter.

      <Note>
        * Only CSV files are supported.
        * Ensure that the pattern entered correctly targets the files you intend to load.
      </Note>
    </ResponseField>
  </Tab>

  <Tab title="Google BigQuery">
    <ResponseField name="Type" type="drop-down" required>
      Select **Google Cloud Storage** to load your file from a Google Cloud Storage bucket.
    </ResponseField>

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

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

    <ResponseField name="File filter" type="string">
      Filter for specific files by their file name, including their file extension. You can use wildcards in the file name, for example `prefix_*{filetype}`.

      If this field is left empty, all {filetype_0} files at the specified Google Storage URL location are loaded.

      If the specified Google Storage URL location contains a `*`, you can't apply a file filter.
    </ResponseField>
  </Tab>
</Tabs>

### Configure

<Tabs>
  <Tab title="Snowflake">
    <ResponseField name="File format" type="drop-down" required>
      The default value is set to `[New File Format]`. Specify a file format, and a temporary format with those settings will be used when the component runs. Alternatively, select a pre-made file format.
    </ResponseField>

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

    <ResponseField name="Compression" type="drop-down" required>
      Select the compression algorithm used on the file being loaded.

      The default setting is AUTO.
    </ResponseField>

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

    <ResponseField name="Record delimiter" type="string">
      Input a delimiter for records. This can be one or more single-byte or multibyte 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-start:[csvFormat.fieldDelimiter] | warehouses: [snowflake] --> */}

    <ResponseField name="Field delimiter" type="string">
      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-start:[csvFormat.parseHeader] | warehouses: [snowflake] --> */}

    <ResponseField name="Parse header" type="boolean" required>
      Specify whether the first row header should be used to define the column names of the resulting table. For this option to work, the **Match by column name** parameter must be set to either `CASE_SENSITIVE` or `CASE_INSENSITIVE`.

      The **Skip Header** option isn't supported if this parameter is set to true.

      The default setting is false.
    </ResponseField>

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

    <ResponseField name="Skip header" type="integer" required>
      Specify the number of rows to skip. The default is 0.

      If **Skip header** is used, the value of the record delimiter will not be used to determine where the header line is. Instead, the specified number of CRLF will be skipped. For example, if the value of **Skip header** = 1, skips to the first CRLF that it finds. If you have set the **Field delimiter** property to be a single character without a CRLF, then skips to the end of the file (treating the entire file as a header).
    </ResponseField>

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

    <ResponseField name="Skip blank lines" type="boolean" required>
      When **True**, ignores blank lines that only contain a line feed in a data file and does not try to load them. Default setting is **False**.
    </ResponseField>

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

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

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

    <ResponseField name="Escape unenclosed field" type="string">
      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-start:[csvFormat.trimSpace] | warehouses: [snowflake] --> */}

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

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

    <ResponseField name="Field optionally enclosed" type="string">
      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-start:[csvFormat.nullIf] | warehouses: [snowflake] --> */}

    <ResponseField name="Null if" type="editor">
      Specify one or more strings (one string per row of the table) to convert to NULL values. When one of these strings is encountered in the file, it is replaced with an SQL NULL value for that field in the loaded table. Click + to add a string.
    </ResponseField>

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

    <ResponseField name="Error on column count mismatch" type="boolean" required>
      When True, generates an error if the number of delimited columns in an input file does not match the number of columns in the corresponding table. When False (default), an error is not generated and the load continues. If the file is successfully loaded in this case:

      * Where the input file contains records with more fields than columns in the table, the matching fields are loaded in order of occurrence in the file, and the remaining fields are not loaded.
      * Where the input file contains records with fewer fields than columns in the table, the non-matching columns in the table are loaded with NULL values.
    </ResponseField>

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

    <ResponseField name="Empty field as null" type="boolean" required>
      When True, inserts NULL values for empty fields in an input file. This is the default setting.
    </ResponseField>

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

    <ResponseField name="Replace invalid characters" type="boolean" required>
      Snowflake replaces invalid UTF-8 characters with the Unicode replacement character. When False (default), the load operation produces an error when invalid UTF-8 character encoding is detected.
    </ResponseField>

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

    <ResponseField name="Encoding type" type="drop-down" required>
      Select the string that specifies the character set of the source data when loading data into a table. Refer to the Snowflake documentation for more information.
    </ResponseField>
  </Tab>

  <Tab title="Databricks">
    <ResponseField name="Escape" type="char">
      Specify a single character that is used to escape special characters within a field value during parsing.
    </ResponseField>

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

    <ResponseField name="Ignore corrupt files" type="boolean">
      When set to Yes, corrupt input files are skipped and not included in the load.
    </ResponseField>

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

    <ResponseField name="Ignore missing files" type="boolean">
      When set to Yes, files that cannot be found are ignored during the load process.
    </ResponseField>

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

    <ResponseField name="Modified after" type="string">
      An optional timestamp as a filter to only ingest files that have a modification timestamp **after** the provided timestamp.
    </ResponseField>

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

    <ResponseField name="Modified before" type="string">
      An optional timestamp as a filter to only ingest files that have a modification timestamp **before** the provided timestamp.
    </ResponseField>

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

    <ResponseField name="Recursive file lookup" type="boolean">
      When set to **Yes**, files are read recursively from all subdirectories under the specified path. When enabled, partition inference is disabled. To control which files are loaded, use the **Glob pattern** property instead.
    </ResponseField>

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

    <ResponseField name="Bad records path" type="string">
      Enter a location where information about bad or malformed CSV records should be written.
    </ResponseField>

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

    <ResponseField name="Char to escape quote escaping" type="string">
      Define a single character used to escape the escape character for quoted values.
    </ResponseField>

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

    <ResponseField name="Comment" type="string">
      Define a line-comment character. When this character appears at the start of a line, the line is ignored. Use `\0` to disable comment handling.
    </ResponseField>

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

    <ResponseField name="Date format" type="string">
      Describe the format of date values in the data files to be loaded. For example, `yyyy-MM-dd`.
    </ResponseField>

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

    <ResponseField name="Empty value" type="string">
      Specify the string representation of an empty value in the input data.
    </ResponseField>

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

    <ResponseField name="Encoding" type="string">
      Select the character encoding to use when reading the input files.
    </ResponseField>

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

    <ResponseField name="Enforce schema" type="boolean">
      When set to **Yes**, the defined or inferred schema is enforced while reading the CSV data.
    </ResponseField>

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

    <ResponseField name="Header" type="boolean">
      Select **Yes** to use the first line of the file as column names.
    </ResponseField>

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

    <ResponseField name="Ignore leading whitespace" type="boolean">
      When **Yes**, removes whitespace from the beginning of fields.
    </ResponseField>

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

    <ResponseField name="Ignore trailing whitespace" type="boolean">
      When **Yes**, removes whitespace from the end of fields.
    </ResponseField>

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

    <ResponseField name="Line separator" type="string">
      Specify the character or sequence of characters used to separate individual records (rows) in the CSV file.
    </ResponseField>

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

    <ResponseField name="Locale" type="string">
      Sets the locale for date and timestamp parsing. The locale should be in BCP 47 language tag format (e.g., `en-US`).
    </ResponseField>

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

    <ResponseField name="Max chars per column" type="integer">
      Defines the maximum number of characters allowed for any given value being read.
    </ResponseField>

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

    <ResponseField name="Max columns" type="integer">
      Defines the maximum number of columns a CSV record can have.
    </ResponseField>

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

    <ResponseField name="Merge schema" type="boolean">
      When set to Yes, schemas from all input files are merged during the load.
    </ResponseField>

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

    <ResponseField name="Mode" type="drop-down">
      Controls how the parser handles corrupt or malformed records. Options include:

      * **PERMISSIVE:** Tries to parse all lines; nulls are inserted for missing tokens and extra tokens are ignored.
      * **DROPMALFORMED:** Drops lines that contain malformed records.
      * **FAILFAST:** Throws an exception when it encounters a corrupted record.
    </ResponseField>

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

    <ResponseField name="Multi line" type="boolean">
      If **Yes**, will parse records which may span multiple lines.
    </ResponseField>

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

    <ResponseField name="NaN value" type="string">
      Sets the string representation of a non-number (NaN) value.
    </ResponseField>

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

    <ResponseField name="Negative inf" type="string">
      Sets the string representation of negative infinity.
    </ResponseField>

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

    <ResponseField name="Null value" type="string">
      Sets the string representation of a null value.
    </ResponseField>

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

    <ResponseField name="Positive inf" type="string">
      Sets the string representation of positive infinity.
    </ResponseField>

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

    <ResponseField name="Prefer date" type="boolean">
      If **Yes**, attempts to infer date columns instead of timestamp columns during schema inference.
    </ResponseField>

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

    <ResponseField name="Quote" type="string">
      Sets a single character used for escaping quoted values where the separator can be part of the value.
    </ResponseField>

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

    <ResponseField name="Reader case sensitive" type="boolean">
      If **Yes**, column names will be case-sensitive during parsing.
    </ResponseField>

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

    <ResponseField name="Separator" type="string">
      Enter the delimiter character used to separate fields in the CSV file. 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`). This delimiter is limited to a maximum of 20 characters. The specified delimiter must be a valid UTF-8 character and not a random sequence of bytes.
    </ResponseField>

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

    <ResponseField name="Skip rows" type="integer">
      Enter the number of rows to skip at the beginning of each file before parsing starts.
    </ResponseField>

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

    <ResponseField name="Timestamp format" type="string">
      Describe the format of timestamp values in the data files to be loaded.
    </ResponseField>

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

    <ResponseField name="Time zone" type="string">
      Sets the timezone to use when parsing timestamps.
    </ResponseField>

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

    <ResponseField name="Unescaped quote handling" type="drop-down">
      Select how unescaped quotes are handled during parsing.

      * **STOP\_AT\_CLOSING\_QUOTE:** Stops parsing at the first closing quote encountered.
      * **BACK\_TO\_DELIMITER:** Returns to the delimiter to parse the value.
      * **STOP\_AT\_DELIMITER:** Stops at the delimiter.
      * **SKIP\_VALUE:** Skips the value.
      * **RAISE\_ERROR:** Raises an error.
    </ResponseField>
  </Tab>

  <Tab title="Google BigQuery">
    <ResponseField name="Field delimiter" type="string">
      The character used to separate fields in the CSV file. For example, use `,` for comma-separated files or `\t` for tab-delimited files.
    </ResponseField>

    <ResponseField name="Date format" type="string">
      Define how date values are formatted in your files, for example `MM/DD/YYYY`.

      If you leave this blank, the default format `YY-MM-DD` is used.
    </ResponseField>

    <ResponseField name="Datetime format" type="string">
      Define how date values are formatted in your files, for example `MM/DD/YYYY HH24:MI:SS.FF3`.

      If you leave this blank, the default format `YYYY-MM-DD HH:MM:SS[.SSSSSS]` is used.
    </ResponseField>

    <ResponseField name="Time format" type="string">
      Define how time values are formatted in your files, for example `HH24:MI:SS.FF3`.

      If you leave this blank, the default format `HH:MM:SS[.SSSSSS]` is used.
    </ResponseField>

    <ResponseField name="Timestamp format" type="string">
      Define how timestamp values are formatted in your files, for example `MM/DD/YYYY HH24:MI:SS.FF3`.

      If you leave this blank, Google BigQuery attempts to parse timestamp values automatically.
    </ResponseField>

    <ResponseField name="Encoding" type="drop-down" required>
      Select how characters are encoded in your file.
    </ResponseField>

    <ResponseField name="Skip leading rows" type="string">
      The number of rows at the top of the file to skip before reading data. For example, enter `1` to skip a header row.

      If you leave this blank, no rows are skipped.
    </ResponseField>

    <ResponseField name="CSV quoter" type="string">
      The character used to enclose field values in the CSV file.

      If your data contains quoted newline characters, set **Allow quoted newlines** to **Yes**.
    </ResponseField>

    <ResponseField name="Null marker" type="string">
      The string that represents NULL values in your file, for example, `\N` or `NULL`.
    </ResponseField>

    <ResponseField name="Allow quoted newlines" type="boolean">
      When set to **Yes**, allows newline characters within quoted string fields in CSV files.
    </ResponseField>

    <ResponseField name="Allow jagged rows" type="boolean">
      When set to **Yes**, rows that are missing trailing optional columns are accepted. Missing values are treated as NULL.
    </ResponseField>

    <ResponseField name="Time zone" type="string">
      The default time zone to apply when parsing timestamp values that do not include a specific time zone. For example, `America/New_York` or `UTC+05:30`.

      If you leave this blank, UTC is used.
    </ResponseField>

    <ResponseField name="Max bad records" type="string">
      The maximum number of bad records to ignore before returning an error. A record is considered bad if it cannot be parsed. For example, enter `10` to allow up to 10 unparseable rows before the load fails.

      If you leave this blank, the load will fail if there are any bad records.
    </ResponseField>

    <ResponseField name="Ignore unknown values" type="boolean">
      When set to **Yes**, extra fields in the file that are not present in the table schema are silently ignored.

      When set to **No**, extra fields cause the load to fail.
    </ResponseField>

    <ResponseField name="Match columns by" type="drop-down">
      Select how columns in the source file are matched to columns in the destination table.

      * **Position:** Columns are matched by their position in the file and the table schema. This assumes that the columns are in the same order in the file and table schema.
      * **Name:** Columns are matched by their name. This assumes that the header row contains column names. The column order in the file does not need to match the table schema.
    </ResponseField>

    <ResponseField name="Column name policy" type="drop-down">
      Controls the naming rules applied to columns when loading data.

      * **Strict:** Column names must conform to standard Google BigQuery [column naming](https://docs.cloud.google.com/bigquery/docs/schemas#column_names) rules.
      * **Allow flexible names:** Allows [flexible column names](https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names) that would otherwise be invalid, such as names containing spaces or special characters.
    </ResponseField>
  </Tab>
</Tabs>

### Destination

<Tabs>
  <Tab title="Snowflake">
    <ResponseField name="Warehouse" type="drop-down" required>
      <SnowflakeWarehouseQuery />
    </ResponseField>

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

    <ResponseField name="Database" type="drop-down" required>
      <SnowflakeDatabase />
    </ResponseField>

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

    <ResponseField name="Schema" type="drop-down" required>
      <SnowflakeSchema />
    </ResponseField>

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

    <ResponseField name="Target table name" type="string" required>
      Specify the name of the newly created or existing table to load data into. The table will be created according to the `Load strategy` you select below.
    </ResponseField>

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

    <ResponseField name="Load strategy" type="drop-down" required>
      * **Replace:** If the specified table name already exists, that table will be destroyed and replaced by the table created during this pipeline run.
      * **Truncate and Insert:** Each time the pipeline runs, two operations are performed: first, the table is truncated, meaning all existing rows are deleted. Then, your new rows are inserted. The table itself is never destroyed and recreated.
      * **Fail if Exists:** If the specified table name already exists, this pipeline will fail to run, and no data will be copied to the table.
      * **Append:** If the specified table name already exists, then the data is inserted without altering or deleting the existing data in the table. It's appended onto the end of the existing data in the table. If the specified table name doesn't exist, then an error message will appear and the table is not created. You must **always** provide a table name.
    </ResponseField>
  </Tab>

  <Tab title="Databricks">
    <ResponseField name="Catalog" type="drop-down" required>
      <DatabricksCatalog />
    </ResponseField>

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

    <ResponseField name="Schema (database)" type="drop-down" required>
      <DatabricksSchema />
    </ResponseField>

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

    <ResponseField name="Target table name" type="string" required>
      The name of the table to be created. The table will be created according to the `Load strategy` you select below.
    </ResponseField>

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

    <ResponseField name="Load strategy" type="drop-down" required>
      * **Replace:** If the specified table name already exists, that table will be destroyed and replaced by the table created during this pipeline run.
      * **Truncate and Insert:** Each time the pipeline runs, two operations are performed: first, the table is truncated, meaning all existing rows are deleted. Then, your new rows are inserted. The table itself is never destroyed and recreated.
      * **Fail if Exists:** If the specified table name already exists, this pipeline will fail to run, and no data will be copied to the table.
      * **Append:** If the specified table name already exists, then the data is inserted without altering or deleting the existing data in the table. It's appended onto the end of the existing data in the table. If the specified table name doesn't exist, then an error message will appear and the table is not created. You must **always** provide a table name.

      If not specified, the default is **Fail if Exists**.

      <Note>
        Databricks uses `COPY INTO`, which is idempotent. This means it tracks which source files have already been loaded into the target Delta table and skips them on subsequent runs.

        Enabling **Force load** overrides this behavior for the **Truncate and Insert** and **Append** load strategies, causing all matching source files to be reprocessed.
      </Note>
    </ResponseField>
  </Tab>

  <Tab title="Google BigQuery">
    <ResponseField name="Project" type="drop-down" required>
      Select the ID of the Google Cloud Platform project to load data into. The special value `[Environment Default]` uses the project defined in the environment.
    </ResponseField>

    <ResponseField name="Dataset" type="drop-down" required>
      Select the Google BigQuery dataset to load data into. The special value `[Environment Default]` uses the dataset defined in the environment.
    </ResponseField>

    <ResponseField name="Target table name" type="string" required>
      The name of the table to be created in your Google BigQuery project. You can use a [Table Input](/docs/components/table-input) component in a transformation pipeline to access and transform this data after it has been loaded.
    </ResponseField>

    <ResponseField name="Load strategy" type="drop-down" required>
      Define what happens if the table name already exists in the specified destination.

      * **Replace:** If the specified table name already exists, that table will be destroyed and replaced by the table created during this pipeline run.
      * **Truncate and Insert:** Each time the pipeline runs, two operations are performed: first, the table is truncated, meaning all existing rows are deleted. Then, your new rows are inserted. The table itself is never destroyed and recreated.
      * **Fail if Exists:** If the specified table name already exists, this pipeline will fail to run.
      * **Append:** If the specified table name already exists, then the data is inserted without altering or deleting the existing data in the table. It's appended onto the end of the existing data in the table. If the specified table name doesn't exist, then the table will be created, and your data will be inserted into the table.
    </ResponseField>
  </Tab>
</Tabs>

### Advanced Settings

<Tabs>
  <Tab title="Snowflake">
    <OnError />

    <ResponseField name="N" type="integer" required>
      Specify the number of errors or the percentage of errors required to skip the file. This parameter only accepts integer characters. `%` is not accepted. Specify percentages as a number only.

      This parameter is only available when `On Error` is set to either **Skip File When n Errors** or **Skip File When n% Errors**.
    </ResponseField>

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

    <ResponseField name="Size limit (in bytes)" type="integer">
      Specify the maximum size, in bytes, of data to be loaded for a given COPY statement. If the maximum is exceeded, the COPY operation discontinues loading files. For more information, refer to the Snowflake documentation.
    </ResponseField>

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

    <ResponseField name="Purge files" type="boolean" required>
      When True, purges data files after the data is successfully loaded. Default setting is False.
    </ResponseField>

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

    <ResponseField name="Match by column name" type="drop-down" required>
      Specify whether to load semi-structured data into columns in the target table that match corresponding columns represented in the data.

      * **Case Insensitive:** Load semi-structured data into columns in the target table that match corresponding columns represented in the data. Column names should be case-insensitive.
      * **Case Sensitive:** Load semi-structured data into columns in the target table that match corresponding columns represented in the data. Column names should be case-sensitive.
      * **None:** The COPY operation loads the semi-structured data into a variant column or, if a query is included in the COPY statement, transforms the data.
    </ResponseField>

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

    <ResponseField name="Truncate columns" type="boolean" required>
      When True, strings are automatically truncated to the target column length. When False (default), the COPY statement produces an error if a loaded string exceeds the target column length.
    </ResponseField>

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

    <ResponseField name="Force load" type="boolean" required>
      When True, loads all files, regardless of whether they have been loaded previously and haven't changed since they were loaded. Default setting is False.

      When set to True, this option reloads files and can lead to duplicated data in a table.
    </ResponseField>
  </Tab>

  <Tab title="Databricks">
    <ResponseField name="Force load" type="boolean" required>
      When True, loads all files, regardless of whether they have been loaded previously and haven't changed since they were loaded. Default setting is False.

      When set to True, this option reloads files and can lead to duplicated data in a table. The `Load strategy` in the destination needs to be **Truncate and Insert** or **Append** for this to work.
    </ResponseField>
  </Tab>

  <Tab title="Google BigQuery">
    <ResponseField name="Default rounding mode" type="drop-down">
      Select the rounding mode to use when storing numeric data types. For more information, read the Google BigQuery [RoundingMode](https://docs.cloud.google.com/bigquery/docs/schemas#rounding_mode) documentation.

      * `ROUND_HALF_AWAY_FROM_ZERO` rounds half values away from zero.
      * `ROUND_HALF_EVEN` rounds half values to the nearest even value.
    </ResponseField>
  </Tab>
</Tabs>
