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

# Create Table

export const designer = "Designer";

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="Orchestration, Test" connectionInputs="One" connectionOutputs="Unlimited" />

Create Table is an orchestration component that creates or replaces a table. It generates the necessary DDL to handle an existing table with the same name, followed by a `CREATE TABLE` statement.

<Warning>
  This component is potentially destructive. Take care when running this component as it may remove existing data.
</Warning>

***

## Properties

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

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

    <ResponseField name="Create method" type="drop-down" required>
      Select one of:

      * **Create:** This is the default option. This option creates a new table. Creating a new table will generate an error if a table with the same name already exists. However, existing data will **not** be destroyed.
      * **Create if not exists:** This option will only create a new table when a table of the same name does **not** already exist. This option will **not** destroy existing data. If the schema of the existing table does **not** match the schema defined in this component, no attempt is made to fix or correct the schema, which could lead to errors later on in the pipeline if:
        * Users did not expect a table to already exist.
        * Users did not expect to have a different schema to the one defined in this component.
      * **Replace:** If a table with the name you specify in the `Table` property already exists, the existing table is replaced by a new table when the pipeline finishes. Selecting this option guarantees that after the component succeeds, the table matches the schema defined in this component. However, any data from the existing table (to be replaced) will be lost.

      This component uses the **CREATE OR REPLACE** clause. When using the **REPLACE** clause, it also applies the **COPY GRANTS** clause. When you clone or create a new object (such as a table, view, schema, or database) from an existing one, the new object doesn't automatically inherit the original's grants (privileges). However, with the **COPY GRANTS** clause, you can seamlessly transfer object-level privileges from the source object to the new one. This helps maintain consistent access control and simplifies permission management when cloning or recreating objects. For more information, read [Snowflake COPY GRANTS](https://docs.snowflake.com/en/sql-reference/sql/create-table#label-create-table-copy-grants).
    </ResponseField>

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

    <ResponseField name="Database" type="drop-down" required>
      The Snowflake database that the newly created table will belong to. 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:[schema] | warehouses: [snowflake] --> */}

    <ResponseField name="Schema" type="drop-down" required>
      The Snowflake schema that the newly created table will belong to. 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:[table] | warehouses: [snowflake] --> */}

    <ResponseField name="Table" type="string" required>
      The name of the table to create or replace. This field is case-sensitive by default, since {designer} uses quoted identifiers.
    </ResponseField>

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

    <ResponseField name="Table type" type="drop-down" required>
      Select the type of [Snowflake table](https://docs.snowflake.net/manuals/user-guide/tables-temp-transient.html#comparison-of-table-types) to create:

      * **Permanent** holds data indefinitely. This table type can be restored using Snowflake's [Time Travel](https://docs.snowflake.net/manuals/user-guide/data-availability.html).
      * **Transient** holds data indefinitely. This table type can't be restored.
    </ResponseField>

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

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

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

      **Data Type:** Select one of:

      * **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).
      * **Float:** This type is for values that are approximate numeric values with fractional components. [More...](https://docs.snowflake.com/en/sql-reference/data-types-numeric#data-types-for-floating-point-numbers).
      * **Number:** This type is suitable for numeric types, with or without decimals. [More...](https://docs.snowflake.com/en/sql-reference/data-types-numeric.html).
      * **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).
      * **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).
      * **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.

      **Default Value:** The default value under this column for any row. You can enter **AUTOINCREMENT** or **IDENTITY** as the default value for any numeric-type column and the column will automatically give an incremented value on each new row starting from 1. This feature is useful when creating a unique key on the table.

      **Not Null:** True if this column does not accept null values.

      **Unique:** Mark this column as unique, declaring that all values in it are unique with respect to one another. You may have multiple unique columns per table.

      **Comment:** A location to store descriptive VARCHAR comments against columns. Used to contextualize the content being stored in tables in your database.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Default DDL collation" type="string">
      Set the default DDL collation. Setting this parameter forces all subsequently created columns in the affected table to have the specified collation as the default, unless the collation for the column is explicitly defined in the DDL. For more information, refer to the [Snowflake documentation](https://docs.snowflake.com/en/sql-reference/parameters.html#default-ddl-collation).
    </ResponseField>

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

    <ResponseField name="Primary keys" type="dual listbox">
      Declare one column to be a primary key. Primary keys are, by default, unique. Users can only have one primary key per table.

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Clustering keys" type="dual listbox">
      Specify clustering key(s) to use. Defining clustering keys can allow for more efficient sorting and scanning of large tables. For more information, refer to the [Snowflake documentation](https://docs.snowflake.net/manuals/user-guide/tables-clustering-keys.html).

      To use grid variables, select the **Use Grid Variable** checkbox at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Data retention time in days" type="integer">
      Set a number of days for which data is retained after deletion. For more information, refer to the [Snowflake documentation](https://docs.snowflake.net/manuals/user-guide/data-time-travel.html).
    </ResponseField>

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

    <ResponseField name="Comment" type="string">
      Attach a comment to the table. For more information, refer to the [Snowflake documentation](https://docs.snowflake.net/manuals/sql-reference/sql/comment.html).
    </ResponseField>
  </Tab>

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

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

    <ResponseField name="Create method" type="drop-down" required>
      Select one of:

      * **Create:** This is the default option. This option creates a new table. Creating a new table will generate an error if a table with the same name already exists. However, existing data will **not** be destroyed.

      * **Create If Not Exists:** This option will only create a new table when a table of the same name does **not** already exist. This option will **not** destroy existing data. If the schema of the existing table does **not** match the schema defined in this component, no attempt is made to fix or correct the schema, which could lead to errors later on in the pipeline if:

        * Users did not expect a table to already exist.
        * Users did not expect to have a different schema to the one defined in this component.

      * **Replace:** If a table with the name you specify in the `Table` property already exists, the existing table is replaced by a new table when the pipeline finishes. Selecting this option guarantees that after the component succeeds, the table matches the schema defined in this component. However, any data from the existing table (to be replaced) will be lost.
    </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:[table] | warehouses: [databricks] --> */}

    <ResponseField name="Table" type="string" required>
      The name of the table to create or replace. This field is case-sensitive by default, since {designer} uses quoted identifiers.
    </ResponseField>

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

    <ResponseField name="Table metadata" type="column editor" required>
      * **Name:** The name of the new column.

      * **Type:** The data type of each column. For more information, read [Data types](https://docs.databricks.com/en/sql/language-manual/sql-ref-datatypes.html).

        * **Binary:** This data type represents byte sequence values. For more information, read [Databricks Binary type](https://docs.databricks.com/en/sql/language-manual/data-types/binary-type.html).
        * **Boolean:** This type is suitable for data that is either "true" or "false", or "1" or "0", respectively. For more information, read [Databricks Boolean type](https://docs.databricks.com/en/sql/language-manual/data-types/boolean-type.html).
        * **Date:** This type is suitable for dates without times. For more information, read [Databricks Date type](https://docs.databricks.com/en/sql/language-manual/data-types/date-type.html).
        * **Float:** This type is for values that are approximate numeric values with fractional components. For more information, read [Databricks Float type](https://docs.databricks.com/en/sql/language-manual/data-types/float-type.html).
        * **Integer:** This type is suitable for whole-numbers (no decimals). For more information, read [Databricks INT type](https://docs.databricks.com/en/sql/language-manual/data-types/int-type.html).
        * **Number:** This is suitable for numeric types, with or without decimals. For more information, read [Databricks Numeric Data types](https://docs.databricks.com/en/sql/language-manual/sql-ref-datatypes.html).
        * **Text:** Represents character string values. For more information, read [Databricks String type](https://docs.databricks.com/en/sql/language-manual/data-types/string-type.html).
        * **Timestamp:** This type is a timestamp left unformatted (exists as Unix/Epoch Time). For more information, read [Databricks timestamp type](https://docs.databricks.com/en/sql/language-manual/data-types/timestamp-type.html).
        * **Variant:** This is a semi-structured data type that can store data of multiple types within a single column—similar to how JSON objects work. For more information, read [Databricks Variant type](https://docs.databricks.com/aws/en/sql/language-manual/data-types/variant-type).

              <Note>
                The VARIANT data type is supported only in Databricks Runtime version 15.4 and above. It's recommended to verify the runtime version you're using in your default environment, as VARIANT isn't compatible with versions earlier than 15.4.
              </Note>

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

      * **Scale:** Set the data type scale.

      * **Comment:** A location to store descriptive text comments against columns. Used to contextualize the content being stored in tables in your database.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Table type" type="drop-down" required>
      Select whether the new table will be of type **Managed** or **External**. The default setting is **Managed**. Read [Managed table](https://docs.databricks.com/en/data-governance/unity-catalog/create-tables.html#managed-table) for more information.
    </ResponseField>

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

    <ResponseField name="Using" type="drop-down" required>
      Select the file type. Available types:

      * **CSV**
      * **Parquet**
      * **JSON**
      * **ORC**
      * **Delta**

      This property is only available when **Table type** is set to **External**.
    </ResponseField>

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

    <ResponseField name="Location" type="string" required>
      **(AWS only)** Specify the S3 bucket location. This property is only available when **Table type** is set to **External**.
    </ResponseField>

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

    <ResponseField name="Storage Account" type="drop-down" required>
      **(Azure only)** Select a storage account. An Azure storage account contains all of your Azure storage data objects: blobs, files, queues, tables, and disks. For more information, read [Storage account overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview). This property is only available when **Table type** is set to **External**.
    </ResponseField>

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

    <ResponseField name="Blob container" type="string" required>
      **(Azure only)** A Blob Storage location. The available blob containers will depend on the selected storage account. This property is only available when **Table type** is set to **External**.
    </ResponseField>

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

    <ResponseField name="Partition columns" type="dual listbox">
      Specify partition columns.

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Table properties" type="column editor">
      Specify any table metadata using key=value pairs:

      * **Key:** Specify the key.
      * **Value:** Specify the key's value.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Comment" type="string">
      Attach a comment to the table.
    </ResponseField>
  </Tab>

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

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

    <ResponseField name="Create/Replace" type="drop-down" required>
      Select one of:

      * **Create:** This is the default option. This option creates a new table. Creating a new table will generate an error if a table with the same name already exists. However, existing data will **not** be destroyed.

      * **Create if not exists:** This option will only create a new table when a table of the same name does **not** already exist. This option will **not** destroy existing data. If the schema of the existing table does **not** match the schema defined in this component, no attempt is made to fix or correct the schema, which could lead to errors later on in the pipeline if:

        * Users did not expect a table to already exist.
        * Users did not expect to have a different schema to the one defined in this component.

      * **Replace:** If a table with the name you specify in the `New table name` property already exists, the existing table is replaced by a new table when the pipeline finishes. Selecting this option guarantees that after the component succeeds, the table matches the schema defined in this component. However, any data from the existing table (to be replaced) will be lost.
    </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:[newTableName] | warehouses: [redshift] --> */}

    <ResponseField name="New table name" type="string" required>
      The name of the table to create or replace. This field is case-sensitive by default, since {designer} uses quoted identifiers.
    </ResponseField>

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

    <ResponseField name="Table metadata" type="column editor" required>
      * **Column Name:** The name of the new column.
      * **Data Type:** The data type of each column. For more information, read [Data types](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html).
        * [Boolean:](http://docs.aws.amazon.com/redshift/latest/dg/r_Boolean_type.html) Suitable for data that is either true or false.
        * [Date:](http://docs.aws.amazon.com/redshift/latest/dg/r_Datetime_types.html#r_Datetime_types-date) Suitable for dates without times.
        * [DateTime:](http://docs.aws.amazon.com/redshift/latest/dg/r_Datetime_types.html) Suitable for dates, times, or timestamps (both date and time).
        * [Double Precision:](https://docs.aws.amazon.com/redshift/latest/dg/r_Numeric_types201.html) Suitable for data of a double precision floating-point number.
        * [Integer:](http://docs.aws.amazon.com/redshift/latest/dg/r_Numeric_types201.html#r_Numeric_types201-integer-types) Suitable for whole-number types (no decimals).
        * [Numeric:](http://docs.aws.amazon.com/redshift/latest/dg/r_Numeric_types201.html#r_Numeric_types201-decimal-or-numeric-type) Suitable for numeric types, with or without decimals.
        * [Real:](https://docs.aws.amazon.com/redshift/latest/dg/r_Numeric_types201.html) Suitable for data of a single precision floating-point number.
        * [SUPER:](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html) Use the SUPER data type to store semi-structured data or documents as values.
        * [Text:](http://docs.aws.amazon.com/redshift/latest/dg/r_Character_types.html#r_Character_types-text-and-bpchar-types) Can hold any type of data, subject to a maximum size.
      * **Size:** For text types, this is the maximum length. This is a limit on the number of bytes, not characters. With Redshift, since all data is stored using UTF-8, any non-ASCII character will count as 2 or more bytes. For numeric types, this is the total number of digits allowed, whether before or after the decimal point.
      * **Decimal Places:** Relevant only for numeric data, it is the maximum number of digits that may appear to the right of the decimal point.
      * **Encoding Type:** The Redshift compression encoding. Read [Compression encodings](http://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html) for details of the various available encodings. Although users can manually specify the encoding type here, it is advised to use automatic compression analysis to select the optimal compression. When loading into empty tables, this is performed by the S3 Load (unless you disable COMPUPDATE). It can also be performed by the [Table Output](/docs/components/table-output), provided you are truncating the table.
      * **Allow Nullable:** When "True", specifies that the column accepts null values. When "False", specifies that the column is not allowed to contain null values. Default is "True".
      * **Comment:** A location to store descriptive text comments against columns. Used to contextualize the content being stored in tables in your database.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Distribution style" type="drop-down" required>
      * **All:** Copy rows to all nodes in the Redshift cluster.
      * **Auto:** (Default) Allow Redshift to manage your distribution style.
      * **Even:** Distribute rows around the Redshift cluster evenly.
      * **Key:** Distribute rows around the Redshift cluster according to the value of a key column.

      <Note>
        Table distribution is critical to good performance. Read the [Distribution styles](https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html) documentation for more information.
      </Note>
    </ResponseField>

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

    <ResponseField name="Distribution key" type="drop-down" required>
      If **Distribution style** is **Key**, select the column to use as the distribution key.
    </ResponseField>

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

    <ResponseField name="Sort key" type="dual listbox" required>
      This is optional, and lets users specify one or more columns from the input that should be set as the table's sort key.

      <Note>
        Sort keys are critical to good performance. Read [Working with sort keys](https://docs.aws.amazon.com/redshift/latest/dg/t_Sorting_data.html) for more information.
      </Note>

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Sort key options" type="drop-down" required>
      Decide whether the sort key is of a compound or interleaved variety.
    </ResponseField>

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

    <ResponseField name="Primary key" type="dual listbox" required>
      Select one or more columns to be designated as the table's primary key.

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Identity columns" type="column editor" required>
      * **Column Name:** The name of the column. It must match the name of a column defined in the **Table metadata** property, which will be set as an identity column. An identity column contains automatically generated values. The specified column must be of data type "Integer" or "Numeric" with zero (0) decimal places.
      * **Seed:** Specifies the starting value.
      * **Step:** Specifies the increment between values.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Backup table" type="drop-down" required>
      Specify whether the created table is to be included in automated and manual cluster snapshots. "No" has no effect on automatic replication of data to other nodes within the cluster, meaning that tables set with "No" in this property are restored in a node failure.

      The default setting is "Yes".
    </ResponseField>
  </Tab>

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

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

    <ResponseField name="Create method" type="drop-down" required>
      Select one of:

      * **Create:** This is the default option. This option creates a new table. Creating a new table will generate an error if a table with the same name already exists. However, existing data will **not** be destroyed.

      * **Create if not exists:** This option will only create a new table when a table of the same name does **not** already exist. This option will **not** destroy existing data. If the schema of the existing table does **not** match the schema defined in this component, no attempt is made to fix or correct the schema, which could lead to errors later on in the pipeline if:

        * Users did not expect a table to already exist.
        * Users did not expect to have a different schema to the one defined in this component.

      * **Replace:** If a table with the name you specify in the **Table** property already exists, the existing table is replaced by a new table when the pipeline finishes. Selecting this option guarantees that after the component succeeds, the table matches the schema defined in this component. However, any data from the existing table (to be replaced) will be lost.
    </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 Google BigQuery dataset where the table will be created or updated. The special value `[Environment Default]` uses the dataset defined in the environment.
    </ResponseField>

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

    <ResponseField name="Table" type="string" required>
      The name of the table to create or replace. This field is case-sensitive by default, since {designer} uses quoted identifiers.
    </ResponseField>

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

    <ResponseField name="Table metadata" type="column editor" required>
      * **Column Name:** The name of the new column.

      * **Data Type:** The data type of each column. For more information, read [BigQuery data types](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types).

        * **[STRING](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#string_type):** Suitable for variable-length character data.
        * **[INT64](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#integer_types):** Suitable for whole-number types (no decimals).
        * **[FLOAT64](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#floating_point_types):** Suitable for approximate numeric values with fractional components.
        * **[NUMERIC](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_type):** Suitable for exact numeric values with decimal precision.
        * **[BIGNUMERIC](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#bignumeric_type):** Suitable for exact numeric values that require higher precision than NUMERIC.
        * **[BOOL](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#boolean_type):** Suitable for data that is either "true" or "false".
        * **[BYTES](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#bytes_type):** A sequence of bytes (binary data).
        * **[DATE](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#date_type):** Suitable for dates without times.
        * **[DATETIME](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#datetime_type):** Suitable for dates and times, without a time zone.
        * **[TIME](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#time_type):** Suitable for time-of-day values, independent of a specific date.
        * **[TIMESTAMP](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp_type):** Suitable for timestamps with timezone information.
        * **[INTERVAL](https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type):** Represents a duration of time.

      * **Mode:** Specify whether the column is **Nullable**, **Required**, or **Repeated**.

      * **Comment:** A location to store descriptive text comments against columns. Used to contextualize the content being stored in tables in your database.

      Click the **Text mode** toggle 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).

      To use grid variables, toggle **Use Grid Variable** on at the bottom of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="Partitioning" type="drop-down">
      Select the partitioning strategy for the table. Partitioning improves query performance and reduces costs by limiting the data scanned per query. For more information, read [Introduction to partitioned tables](https://docs.cloud.google.com/bigquery/docs/partitioned-tables).
    </ResponseField>

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

    <ResponseField name="Partition column" type="drop-down">
      This property is visible when **Partitioning** is set. Select the column to partition the table by.
    </ResponseField>

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

    <ResponseField name="Partition expiration (ms)" type="integer">
      This property is visible when **Partitioning** is set. Enter the number of milliseconds after which each partition expires and is automatically deleted. Leave blank to disable partition expiration.
    </ResponseField>

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

    <ResponseField name="Cluster columns" type="dual listbox">
      This property is visible when **Partitioning** is set. Select one or more columns to cluster the table by. Clustering can improve query performance and reduce costs when filtering or aggregating on the selected columns. For more information, read [Introduction to clustered tables](https://docs.cloud.google.com/bigquery/docs/clustered-tables).

      To use grid variables, toggle **Use Grid Variable** on at the top of the dialog. For more information, read [Grid variables](/docs/guides/grid-variables).
    </ResponseField>

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

    <ResponseField name="KMS encryption" type="boolean">
      Select whether to encrypt the table using a customer-managed encryption key (CMEK). When set to **Yes**, the **KMS location**, **KMS key ring**, and **KMS key** properties become available. For more information, read [Protect data with Cloud KMS keys](https://docs.cloud.google.com/bigquery/docs/customer-managed-encryption).
    </ResponseField>

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

    <ResponseField name="KMS location" type="drop-down">
      This property is visible when **KMS encryption** is set to **Yes**. Select the Cloud KMS location that contains the key ring. The location must match the location of the BigQuery dataset.
    </ResponseField>

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

    <ResponseField name="KMS key ring" type="drop-down">
      This property is visible when **KMS encryption** is set to **Yes**. Select the Cloud KMS key ring that contains the encryption key.
    </ResponseField>

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

    <ResponseField name="KMS key" type="drop-down">
      This property is visible when **KMS encryption** is set to **Yes**. Select the Cloud KMS key to use for encrypting the table.
    </ResponseField>
  </Tab>
</Tabs>
