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

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

The Assert External Table component empowers users to confirm that an external table has been created with the correct metadata. This component asserts a row count using various methods such as "Equal to", "Greater than", "Less than", and "Range"; these comparator options allow users to set the upper and lower values of row counts.

## Properties

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

{/* <!-- param-start:[database] | warehouses: [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>

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

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

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

<ResponseField name="Table Name" type="drop-down" required>
  Select the table to assert.
</ResponseField>

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

<ResponseField name="Exists" type="drop-down" required>
  This property asserts that the table exists within the database.
</ResponseField>

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

<ResponseField name="Table Metadata" type="column editor">
  Enter the following details for each table column.

  **Column Name:** The name of the new column.

  **Data Type:** Select one of:

  * **Varchar:** This type is suitable for numbers and letters. A varchar or Variable Character Field is a set of character data of indeterminate length. [More...](https://docs.snowflake.com/en/sql-reference/functions/as_char-varchar.html).
  * **Number:** This type is suitable for numeric types, with or without decimals. [More...](https://docs.snowflake.com/en/sql-reference/data-types-numeric.html).
  * **Float:** This type of values are approximate numeric values with fractional components. [More...](https://docs.snowflake.com/en/sql-reference/data-types-numeric#data-types-for-floating-point-numbers).
  * **Boolean:** This type is suitable for data that is either "true" or "false". [More...](https://docs.snowflake.com/en/sql-reference/operators-logical.html).
  * **Date:** This type is suitable for dates without times. [More...](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#date).
  * **Time:** This type is suitable for time, independent of a specific date and timezone. [More...](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#time).
  * **Timestamp:** This type is a timestamp left unformatted (exists as Unix/Epoch Time). [More...](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#timestamp).
  * **Variant:** Variant is a tagged universal type that can hold up to 16 MB of any data type supported by Snowflake. [More...](https://docs.snowflake.com/en/sql-reference/functions/to_variant.html).

  **Size:** For Text types, this is the maximum length. This is a limit on the number of bytes, not characters. For Numeric types, this is the total number of digits allowed, whether before or after the decimal point.

  **Precision:** The precision of the data in the column. Will be 0 (zero) for non-applicable types.
</ResponseField>

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

<ResponseField name="Row Count Comparison Type" type="drop-down" required>
  Select how row count values are compared. Possible comparison operators include:

  * **Equal to:** The value in the Input Column must be equal to that specified in the Value Column. This is the default comparison operator.
  * **Greater than or equal to:** The value in the Input Column must be greater than or equal to the value in the Value Column.
  * **Less than or equal to:** The value in the Input Column must be less than or equal to the value in the Value Column.
  * **Range:** This allows users to specify the range for the value of the row counts.

  Not all data sources support all comparison operators; thus, it is likely that only a subset of the above comparison operators will be available to choose from.
</ResponseField>

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

<ResponseField name="Lower Value" type="integer">
  Set the lower value. This property is only applicable when Row Count Comparison Type is set to "Range".
</ResponseField>

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

<ResponseField name="Upper Value" type="integer">
  Set the upper value. This property is only applicable when Row Count Comparison Type is set to "Range".
</ResponseField>

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

<ResponseField name="Row Count Value" type="integer">
  Specify the number of rows.
</ResponseField>
