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

# MariaDB Unload

export const ComponentMetadata = ({warehouses, unsupportedWarehouses = [], componentType, connectionInputs, connectionOutputs, driverVersion, driverVersionUrl}) => {
  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',
    paddingBottom: driverVersion ? '14px' : '0',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Connection Outputs</td>
            <td style={{
    paddingBottom: driverVersion ? '14px' : '0',
    verticalAlign: 'middle'
  }}>{connectionOutputs}</td>
          </tr>
          {driverVersion && <tr>
              <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Driver Version</td>
              <td style={{
    verticalAlign: 'middle'
  }}>
                {driverVersionUrl ? <a href={driverVersionUrl} target="_blank" rel="noopener noreferrer">{driverVersion}</a> : driverVersion}
              </td>
            </tr>}
        </tbody>
      </table>
    </div>;
};

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

The MariaDB Unload orchestration component lets you write data from your data warehouse to a target MariaDB database.

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 with your environment, these will overwrite the role.

***

## Properties

Reference material is provided below for the Source and Destination properties.

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

### Source

<Tabs>
  <Tab title="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>

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

    <ResponseField name="Table" type="drop-down" required>
      Select the table to unload to the target MariaDB database. The tables available for selection depend on the chosen schema.
    </ResponseField>
  </Tab>

  <Tab title="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>

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

    <ResponseField name="Table" type="drop-down" required>
      Select the table to unload to the target MariaDB database. The tables available for selection depend on the chosen schema.
    </ResponseField>
  </Tab>

  <Tab title="Amazon 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>

    <ResponseField name="Table" type="drop-down" required>
      Select the table to unload to the target MariaDB database. The tables available for selection depend on the chosen schema.
    </ResponseField>
  </Tab>

  <Tab title="Google BigQuery">
    <ResponseField name="GCP Project ID" type="drop-down" required>
      The Google Cloud project that owns the BigQuery dataset. The special value `[Environment Default]` uses the Google Cloud project defined in the environment. For more information, read [Creating projects](https://docs.cloud.google.com/resource-manager/docs/creating-managing-projects).
    </ResponseField>

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

    <ResponseField name="Table" type="drop-down" required>
      Select the table to unload to the target MariaDB database. The tables available for selection depend on the chosen dataset.
    </ResponseField>
  </Tab>
</Tabs>

<ResponseField name="Columns" type="object selector">
  Select columns to return from the table.
</ResponseField>

<ResponseField name="Primary Keys" type="object selector">
  Select one or more columns to use as the table's primary key. The component uses the primary key to identify matching rows in the target table when determining the update strategy.

  If you select multiple columns, the component creates a composite primary key using the combination of the selected columns.

  Leave this blank to load all rows without duplicate checking.
</ResponseField>

<ResponseField name="Limit" type="integer">
  Set a numeric value to limit the number of rows that are unloaded. The default is an empty field, which unloads all rows.
</ResponseField>

<ResponseField name="Filter Conditions" type="column editor">
  Define one or more filter conditions that each row of data must meet to be unloaded.

  * **Input Column:** Select an input column. The available input columns vary depending upon the selected table.
  * **Qualifier:**
    * **Is:** Compares the column to the value using the comparator.
    * **Not:** Reverses the effect of the comparison, so "Equals" becomes "Not equals", "Less than" becomes "Greater than or equal to", etc.
  * **Comparator:** Choose a method of comparing the column to the value. Possible comparators include: "Equal to", "Greater than", "Less than", "Greater than or equal to", "Less than or equal to", "Like", "Null". Not all column types support all comparators.
  * **Value:** The value to be compared.

  Click the **Text Mode** toggle at the bottom of the **Filter Conditions** dialog to open a multi-line editor that lets you add items in a single block. For more information, read [Text mode](/docs/guides/components-overview#component-properties).
</ResponseField>

<ResponseField name="Combine Condition" type="drop-down">
  The filter conditions you have defined can be combined using either **And** or **Or** logic. If **And**, then all filter conditions must be satisfied to unload the data row. If **Or**, then only a single filter condition must be satisfied. The default is **And**.

  If you have only one filter condition, or no filter conditions, this parameter is essentially ignored.
</ResponseField>

### Destination

<ResponseField name="Connection" type="drop-down" required>
  Select a [Connection](/docs/guides/connections). This connection defines all credentials needed to connect to the service.

  If the required connection doesn't yet exist, you can create it here by selecting **Add Connection** in the drop-down. Read [Add a connection](/docs/guides/connections#add-a-connection) for further details, following that process from step 4 onwards. A connection created here is visible in the **Connections** tab and available for other connectors to use.
</ResponseField>

<ResponseField name="Connection Options" type="column editor">
  * **Parameter:** A JDBC parameter supported by the database driver. The available parameters are explained in the data model. Manual setup is not usually required, since sensible defaults are assumed.
  * **Value:** A value for the given parameter.

  Toggle **Text mode** on at the bottom of the dialog to open a multi-line editor that lets you add items in a single block. For more information, read [Text mode](/docs/guides/components-overview#text-mode).
</ResponseField>

<ResponseField name="Table" type="string" required>
  A name for the target table in the MariaDB database. If the named table does not already exist, it is created.
</ResponseField>

<ResponseField name="Write Mode" type="drop-down" required>
  Define what happens if the target table already exists in the specified MariaDB database.

  * **Replace:** If the specified table already exists, that table is destroyed and replaced by the table created during this pipeline run.
  * **Truncate and Insert:** If the specified table already exists, all rows within that table are removed and new rows are inserted during this pipeline run.
  * **Append:** If the specified table already exists, new rows are appended to that existing table.

  In each case, if the specified table doesn't already exist, a new table is created.
</ResponseField>

<ResponseField name="Update Strategy" type="drop-down" required>
  If **Write Mode** is **Append** and **Primary Keys** have been specified, this property determines the behavior if there are existing rows with the same primary keys as an appended row.

  * **Ignore:** Existing rows with the same primary key values are ignored. This is the default behavior.
  * **Replace:** Existing rows with the same primary key values are replaced.
</ResponseField>
