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

# Table Input

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="None" connectionOutputs="Unlimited" />

The **Table Input** transformation component lets you select columns from a table in your cloud data warehouse, including external tables, and makes the data available for use by the pipeline's downstream components. You can add this component to your canvas by clicking the **Add component** icon and using the **Warehouse data** tab.

In SQL terms, the component performs a SELECT FROM on the designated table. No filtering is performed as part of the Table Input, but the output can be passed to other components for further transformation operations.

Table Input supports Snowflake [Dynamic tables](https://docs.snowflake.com/en/user-guide/dynamic-tables-about) and Databricks [Delta Live tables](https://docs.databricks.com/aws/en/tables/delta-table) as input sources, in addition to regular tables. No specific additional configuration is needed to use these table types in the component.

### Use case

Some common uses for Table Input include:

* Extracting source data for transformation. Table Input reads data directly from the specified table and acts as the starting point of your transformation pipeline.
* Joining data from multiple tables. Multiple Table Input components can feed into a [Join](/docs/components/join) component to combine the data into a single output. Note that in some scenarios it may be more efficient to do this with a [Multi Table Input](/docs/components/multi-table-input) component rather than multiple Table Input components.

***

## Properties

<Tabs>
  <Tab title="Snowflake">
    <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:[targetTable] | warehouses: [snowflake] --> */}

    <ResponseField name="Target table" type="drop-down" required>
      The name of the input table or view. The tables and views found in the currently selected environment are provided to select from.
    </ResponseField>

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

    <ResponseField name="Column names" type="dual listbox" required>
      The columns to include in the input. If you wish to rename the column names, consider using the [Rename](/docs/components/rename) component to change them.
    </ResponseField>

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

    <ResponseField name="Time offset" type="integer">
      Offsets the table contents by the number of specified seconds. This is a function of Snowflake's [Time Travel](https://docs.snowflake.com/en/user-guide/data-time-travel.html) feature, allowing you to see a table as it was X seconds ago.
    </ResponseField>
  </Tab>

  <Tab title="Databricks">
    <ResponseField name="Name" type="string" required>
      A human-readable name for the component.
    </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.
    </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:[targetTable] | warehouses: [databricks] --> */}

    <ResponseField name="Target table" type="drop-down" required>
      The name of the input table or view. The tables and views found in the currently selected environment are provided to select from.
    </ResponseField>

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

    <ResponseField name="Column names" type="dual listbox" required>
      The columns to include in the input. If you wish to rename the column names, consider using the [Rename](/docs/components/rename) component to change them.
    </ResponseField>

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

    <ResponseField name="Offset type" type="drop-down" required>
      Select how the table contents will be offset. Options are:

      * **None:** No offset.
      * **Timestamp:** Unlocks the **Timestamp offset** property.
      * **Version:** Unlocks the **Version offset** property.
    </ResponseField>

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

    <ResponseField name="Timestamp offset" type="integer" required>
      Enter a number of seconds to offset the table by. This is a function of Databricks Delta Lake's [Time Travel](https://databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html) feature, allowing you to see a table as it was `X` seconds ago.
    </ResponseField>

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

    <ResponseField name="Version offset" type="string" required>
      Enter the table version to offset to. This is a function of Databricks Delta Lake's [Time Travel](https://databricks.com/blog/2019/02/04/introducing-delta-time-travel-for-large-scale-data-lakes.html) feature, allowing you to see a table as it was at a defined version.
    </ResponseField>
  </Tab>

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

    {/* <!-- param-start:[databaseRs] | warehouses: [redshift] --> */}

    <ResponseField name="Database" type="drop-down">
      Cross-query two databases. Specify a separate database to the one selected in the connection (that uses the environment default database). For more information, read [Querying data across databases](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html). There are limitations as to whether an additional database can be queried. For more information, read [Considerations and Limitations](https://docs.aws.amazon.com/redshift/latest/dg/cross-database_usage.html). These limitations will prevent cross database connections, and any deviation from the environment default database will fail.

      <Note>
        * You will need to be connected to either an RA3 or Serverless Redshift cluster type for a cross database connection to work.
        * On RA3 or Serverless Redshift clusters, you will also need the necessary permissions to view schemas and tables outside of your environment's default database.
      </Note>
    </ResponseField>

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

    {/* <!-- param-start:[targetTable] | warehouses: [redshift] --> */}

    <ResponseField name="Target table" type="drop-down" required>
      The name of the input table or view. The tables and views found in the currently selected environment are provided to select from.
    </ResponseField>

    {/* <!-- param-start:[columnNames] | warehouses: [redshift] --> */}

    <ResponseField name="Column names" type="dual listbox" required>
      The columns to include in the input. If you wish to rename the column names, consider using the [Rename](/docs/components/rename) component to change them.
    </ResponseField>

    {/* <!-- param-start:[trimColumns] | warehouses: [redshift] --> */}

    <ResponseField name="Trim columns" type="drop-down" required>
      Wraps the column names in a BTRIM function, which will strip out all the leading and trailing spaces. Read the [Amazon Redshift documentation](https://docs.aws.amazon.com/redshift/latest/dg/r_BTRIM.html) for details.
    </ResponseField>
  </Tab>

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

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

    {/* <!-- param-start:[dataset] | warehouses: [bigquery] --> */}

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

    {/* <!-- param-start:[targetTable] | warehouses: [bigquery] --> */}

    <ResponseField name="Target table" type="drop-down" required>
      The name of the input table or view. The tables and views found in the currently selected environment are provided to select from.
    </ResponseField>

    {/* <!-- param-start:[columnNames] | warehouses: [bigquery] --> */}

    <ResponseField name="Column names" type="dual listbox" required>
      The columns to include in the input. If you wish to rename the column names, consider using the [Rename](/docs/components/rename) component to change them.
    </ResponseField>

    {/* <!-- param-start:[includePartitionTime] | warehouses: [bigquery] --> */}

    <ResponseField name="Include partition time column" type="boolean" optional>
      Choose whether to include the `_PARTITIONTIME` pseudo-column from the partitioned table, which holds timestamps for the data in the table.
    </ResponseField>

    {/* <!-- param-start:[partitionTimeAlias] | warehouses: [bigquery] --> */}

    <ResponseField name="Partition time alias" type="string">
      A name for a new column that will take on the `_PARTITIONTIME` pseudo-column data. This name can't be the same as another column already in the table. This property is only available when the **Include partition time column** property is set to **Yes**.
    </ResponseField>
  </Tab>
</Tabs>
