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

# Unite

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", "Google BigQuery"]} componentType="Transformation" connectionInputs="Unlimited" connectionOutputs="Unlimited" />

The **Unite** transformation component lets you combine two or more datasets. You can choose whether to combine all columns, or only the columns that appear in all datasets.

For columns with the same name, the data from one dataset is appended to the data in the other dataset(s). Columns that don't exist in one or more datasets will contain null values in their rows in these datasets.

### Use case

This component is useful if you need to combine two or more datasets without using a more complex [Join](/docs/components/join) operation, particularly when the datasets are similar. For example, you could use it to combine the same sales data for multiple retail stores, to analyze all your sales data in one dataset.

***

## Properties

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

{/* <!-- param-start:[method] | warehouses: [snowflake, databricks, redshift, bigquery] --> */}

<ResponseField name="Method" type="drop-down" required>
  * **All Columns:** All columns from all inputs are included in the output. Columns that do not exist in one of the input sources will have the SQL NULL value on any rows that come from that source.
  * **Overlapping Columns:** Only columns that appear in all input sources are included in the output. Columns that do not exist in all of the input sources are dropped.
</ResponseField>

{/* <!-- param-start:[castTypes] | warehouses: [snowflake, databricks, redshift, bigquery] --> */}

<ResponseField name="Cast types" type="boolean" required>
  * **Yes:** If the same-named columns from multiple inputs have differing input types, attempts to cast them to a common type. This is not guaranteed to work, so you should check your data carefully.
  * **No:** If the same-named columns from multiple inputs have differing input types, reports an error and will not continue.
</ResponseField>

{/* <!-- param-start:[addSourceComponentColumn] | warehouses: [snowflake, databricks, redshift, bigquery] --> */}

<ResponseField name="Add source component column" type="boolean" required>
  * **Yes:** Adds a column called "source\_table" with the value of the input component name that provided each row of output.
  * **No:** Do not add an additional column to identify the input component name.
</ResponseField>

{/* <!-- param-start:[removeDuplicates] | warehouses: [snowflake, databricks, redshift, bigquery] --> */}

<ResponseField name="Remove duplicates" type="boolean" required>
  * **Yes:** Remove (merge) duplicate rows so that only one of the duplicate rows remains and all resulting rows are unique.
  * **No:** Do not remove duplicate rows. Allow duplicate rows to exist in the output table.
</ResponseField>
