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

# Volume to Delta Table

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

The Volume to Delta Table component lets users transfer data from a pre-existing [volume](https://docs.databricks.com/en/connect/unity-catalog/volumes.html) in Databricks into a [Delta Lake](https://docs.databricks.com/en/delta/index.html) table without replacing or deleting any existing data.

<Warning>
  If you have selected `hive_metastore` as your default catalog, limitations can't be used, [volumes](https://docs.databricks.com/en/sql/language-manual/sql-ref-volumes.html) can't be created, and the feature won't be available to you. This component only supports Unity Catalog.
</Warning>

<Warning>
  You must use a SQL data warehouse or a cluster running [Databricks Runtime 13.3 LTS](https://docs.databricks.com/en/release-notes/runtime/13.3lts.html) or above, otherwise unexpected behavior in the component can occur.
</Warning>

## Properties

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

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

<ResponseField name="Source" type="drop-down" required>
  The file location to load the data from.

  Files in this location must have the specified `FILEFORMAT`. Accepted encryption options are `TYPE = 'AWS_SSE_C'`, and `MASTER_KEY` for AWS S3.
</ResponseField>

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

<ResponseField name="Pattern" type="string" required>
  Files in the specified location will only be loaded if their names match the pattern you specify here. You can use wildcards in the pattern. Enter `.*` to match all files in the location.
</ResponseField>

{/* <!-- 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.

  <Warning>
    If you have selected `hive_metastore` as your default catalog, limitations can't be used, [volumes](https://docs.databricks.com/en/sql/language-manual/sql-ref-volumes.html) can't be created, and the feature won't be available to you. This component only supports Unity Catalog.
  </Warning>

  <Note>
    You must have appropriate permissions and access rights to the source volume and destination Delta table.
  </Note>
</ResponseField>

{/* <!-- 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-start:[table] | warehouses: [databricks] --> */}

<ResponseField name="Table" type="string" required>
  The name of the Delta table. This table will be recreated and will drop any existing table of the same name.
</ResponseField>

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

<ResponseField name="Load Columns" type="dual listbox">
  Choose the columns to load. If you leave this parameter empty, all columns will be loaded.
</ResponseField>

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

<ResponseField name="File Type" type="drop-down" required>
  The format of the source files to load. Available file types are **CSV**, **JSON**, **PARQUET**, and **AVRO**.

  Component properties will change to reflect the selected file type. Click one of the tabs below for properties applicable to that file type.
</ResponseField>

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

    <ResponseField name="Header" type="boolean">
      Select **Yes** to use the first line of the file as column names. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Field Delimiter" type="string" required>
      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. If none is specified, the default is a comma.

      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.

      <Note>
        A **TAB** character can be specified as "".
      </Note>
    </ResponseField>

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

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

    <ResponseField name="Date Format" type="string">
      Manually set a date format in the data files to be loaded. If none is specified, the default is `yyyy-MM-dd`.
    </ResponseField>

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

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

    <ResponseField name="Timestamp Format" type="string">
      Manually set a timestamp format in the CSV files to be loaded. If none is specified, the default is `yyyy-MM-dd'T'HH:mm:ss.[SSS][XXX]`.
    </ResponseField>

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

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

    <ResponseField name="Encoding Type" type="string">
      The encoding type to use when decoding the CSV files. If none is specified, the default is `UTF-8`.
    </ResponseField>

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

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

    <ResponseField name="Ignore Leading Whitespace" type="boolean">
      When **Yes**, skips any leading whitespaces. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Ignore Trailing Whitespace" type="boolean">
      When **Yes**, skips any trailing whitespaces. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Infer Schema" type="boolean">
      If **Yes**, will attempt to determine the input schema automatically from the data contained in the CSV file. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Multi Line" type="boolean">
      If **Yes**, will parse records which may span multiple lines. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Null Value" type="string">
      Sets the string representation of a null value. If not specified, the default value is an empty string.
    </ResponseField>

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

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

    <ResponseField name="Empty Value" type="string">
      Sets the string representation of an empty value. If not specified, the default value is an empty string.
    </ResponseField>

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

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

    <ResponseField name="Recursive File Lookup" type="boolean">
      If **Yes**, partition inference is disabled. If not specified, the default is **No**. To control which files are loaded, use the **Pattern** property instead.
    </ResponseField>

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

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

    <ResponseField name="Force Load" type="boolean">
      If **Yes**, files are loaded regardless of whether they've been loaded before. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Date Format" type="string">
      Manually set a date format in the data files to be loaded. If none is specified, the default is `yyyy-MM-dd`.
    </ResponseField>

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

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

    <ResponseField name="Timestamp Format" type="string">
      Manually set a timestamp format in the data files to be loaded. If none is specified, the default is `yyyy-MM-dd'T'HH:mm:ss.[SSS][XXX]`.
    </ResponseField>

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

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

    <ResponseField name="Encoding Type" type="string">
      The encoding type to use when decoding the CSV files. If none is specified, the default is `UTF-8`.
    </ResponseField>

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

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

    <ResponseField name="Multi Line" type="boolean">
      If **Yes**, will parse records which may span multiple lines. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Primitives As String" type="boolean">
      If **Yes**, primitive data types are interpreted as strings in JSON files. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Prefers Decimals" type="boolean">
      If **Yes**, all floating-point values will be treated as a decimal type in JSON files. If the values don't fit in decimal, then they're inferred as doubles. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Comments" type="boolean">
      If **Yes**, will allow JAVA/C++ comments in JSON records. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Unquoted Field Names" type="boolean">
      If **Yes**, will allow unquoted JSON field names. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Single Quotes" type="boolean">
      If **Yes**, will allow single quotes in addition to double quotes in JSON records. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Numeric Leading Zeros" type="boolean">
      If **Yes**, will allow leading zeros in numbers in JSON records. For example, `00019`. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Backslash Escaping Any Character" type="boolean">
      If **Yes**, will allow the quoting of all characters using the backslash quoting mechanism in JSON records. For example, `\`. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Allow Unquoted Control Chars" type="boolean">
      If **Yes**, will allow JSON strings to include unquoted control characters (ASCII characters where their value is less than 32, including Tab and line feed characters) in JSON records. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Drop Field If All Null" type="boolean">
      If **Yes**, will ignore columns that contain only null values or empty arrays/structs in JSON records based on the **Schema (Database)** you select. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Recursive File Lookup" type="boolean">
      If **Yes**, partition inference is disabled. If not specified, the default is **No**. To control which files are loaded, use the **Pattern** property instead.
    </ResponseField>

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

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

    <ResponseField name="Force Load" type="boolean">
      If **Yes**, files are loaded regardless of whether they've been loaded before. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Merge Schema" type="boolean">
      If **Yes**, will merge schema from all **PARQUET** part-files. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Recursive File Lookup" type="boolean">
      If **Yes**, partition inference is disabled. If not specified, the default is **No**. To control which files are loaded, use the **Pattern** property instead.
    </ResponseField>

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

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

    <ResponseField name="Force Load" type="boolean">
      If **Yes**, files are loaded regardless of whether they've been loaded before. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Merge Schema" type="boolean">
      If **Yes**, will merge schema from all **AVRO** part-files. If not specified, the default is **No**.
    </ResponseField>

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

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

    <ResponseField name="Recursive File Lookup" type="boolean">
      If **Yes**, partition inference is disabled. If not specified, the default is **No**. To control which files are loaded, use the **Pattern** property instead.
    </ResponseField>

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

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

    <ResponseField name="Force Load" type="boolean">
      If **Yes**, files are loaded regardless of whether they've been loaded before. If not specified, the default is **No**.
    </ResponseField>

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