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

# Create File Format

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

Creates a named file format that can be used for bulk loading data into (and unloading data out of) Snowflake tables. This format can then be used in other components to simplify the component's options and use the custom file format.

***

## Properties

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

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

<ResponseField name="Create/Replace" type="drop-down" required>
  Select one of these options:

  * **Create:** The default option. Creates a new file format. This will generate an error if a file format with the same name already exists, but will never destroy existing data.
  * **Create if not exists:** This will only create a new format if one of the same name does not already exist.
  * **Drop:** Drop the file format of the given name. This is useful for deleting file formats. This will fail if a file format of the given name does not exist.
  * **Drop if exists:** Drop the file format of the given name. This is useful for deleting file formats. This will succeed even if a file format of the given name does not exist.
  * **Replace:** Creates a new format and replaces any format of the same name, overwriting it.
</ResponseField>

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

<ResponseField name="Database" type="drop-down" required>
  The Snowflake database that the newly created file format will be stored in. 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-start:[schema] | warehouses: [snowflake] --> */}

<ResponseField name="Schema" type="drop-down" required>
  The Snowflake schema that the newly created file format will be stored in. 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-start:[fileFormatName] | warehouses: [snowflake] --> */}

<ResponseField name="File Format Name" type="string" required>
  The name of the file format being created.
</ResponseField>

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

<ResponseField name="Compression" type="drop-down" required>
  Whether the input file is compressed in gzip format, BROTLI, BZ2, DEFLATE, RAW\_DEFLATE, ZSTD, or not compressed at all.
</ResponseField>

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

<ResponseField name="Record Delimiter" type="string">
  The delimiter to be used that separates records (rows) in the file. Defaults to newline. \ can also signify a newline. \\\r can signify a carriage return.
</ResponseField>

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

<ResponseField name="Field Delimiter" type="string">
  The delimiter to be used that separates fields (columns) in the file.
</ResponseField>

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

<ResponseField name="Skip Header" type="integer">
  The number of rows at the top of the file to ignore. Defaults to **0**.
</ResponseField>

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

<ResponseField name="Skip Blank Lines" type="boolean" required>
  By default, blank lines encountered in data files produce an end-of-record error. Set this property to True to skip blank lines without producing an error.
</ResponseField>

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

<ResponseField name="Date Format" type="string">
  Defaults to **auto**. This can be used to manually specify a date format.
</ResponseField>

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

<ResponseField name="Time Format" type="string">
  Defaults to **auto**. This can be used to manually specify a time format.
</ResponseField>

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

<ResponseField name="Timestamp Format" type="string">
  Defaults to **auto**. This can be used to manually specify a time format.
</ResponseField>

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

<ResponseField name="Escape" type="string">
  Single character string used as the escape character for any field values. Accepts common escape sequences, octal values, or hex values. Also accepts a value of NONE (default).
</ResponseField>

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

<ResponseField name="Escape Unenclosed Field" type="string">
  Single character string used as the escape character for unenclosed field values. Accepts common escape sequences, octal values, or hex values. Also accepts a value of NONE (default). If a character is specified in the **Escape** field, it will override this field.
</ResponseField>

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

<ResponseField name="Trim Space" type="boolean" required>
  If True, removes trailing and leading whitespace from the input data.
</ResponseField>

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

<ResponseField name="Field Optionally Enclosed" type="string">
  A character that is used to enclose strings. Can be single quote (') or double quote (") or NONE. The default is NONE. Note that the character chosen can be escaped by that same character.
</ResponseField>

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

<ResponseField name="Null If" type="listbox">
  Enter one or more strings that will be replaced with NULL if found in the source. Only applies to columns that are nullable.
</ResponseField>

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

<ResponseField name="Error On Column Count Mismatch" type="boolean" required>
  If **True**, generate an error if the number of delimited columns in the input does not match that of the table. If **False**, extra columns are not loaded into the table and missing columns are recorded as NULL in the table.
</ResponseField>

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

<ResponseField name="Empty Field as Null" type="boolean" required>
  If **True**, cast empty fields as NULL. If **False**, cast empty fields as the corresponding column type with blank data.
</ResponseField>

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

<ResponseField name="Replace Invalid Characters" type="boolean" required>
  If **True**, will replace invalid UTF-8 characters with the Unicode replacement character.

  If **False** (the default), the load operation produces an error when invalid UTF-8 character encoding is detected.
</ResponseField>

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

<ResponseField name="Encoding Type" type="drop-down">
  Select the character set of the source data when loading data into a table.
</ResponseField>
