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

# JDBC Table Metadata to Grid

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

The JDBC Table Metadata to Grid component takes the metadata from a JDBC table and uses this data to populate a [grid variable](/docs/guides/grid-variables).

If the target table doesn't exist, the component function is dependent on the database type. Sybase and MySQL return a fail. Other drivers pass with an empty grid returned.

<Note>
  In Snowflake, unquoted object identifiers are resolved as uppercase. Object identifiers encased in double quotes are resolved exactly as entered.

  * For example, `tablename` and `tableNAME` both resolve to `TABLENAME`.
  * Conversely, `"tablename"` would resolve to `tablename`.

  This means that a table whose name is all uppercase will resolve to uppercase *with or without* double quotes. It may be preferable to use table names in all uppercase when working with Snowflake.

  Read [Identifier Resolution](https://docs.snowflake.com/en/sql-reference/identifiers-syntax#label-identifier-casing) for more information.
</Note>

***

## Properties

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

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

<ResponseField name="Database type" type="drop-down" required>
  Select the database type. Choose from:

  * Amazon Redshift
  * IBM Db2 for i
  * MariaDB
  * Microsoft SQL Server
  * Oracle
  * PostgreSQL
  * Snowflake
  * SQL Server (Microsoft Driver)
  * Sybase ASE
</ResponseField>

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

<ResponseField name="Connection URL" type="string" required>
  The URL for your chosen JDBC database.

  Although many parameters and options can be added to the end of the URL, it's generally easier to add them in the **Connection options** property, documented below.
</ResponseField>

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

<ResponseField name="Authentication type" type="drop-down">
  When `Database type` is set to **Snowflake**, select whether to use a username and password or a key pair to authenticate. The default is key pair.
</ResponseField>

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

<ResponseField name="Username" type="string">
  A valid username for the database connection.
</ResponseField>

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

<ResponseField name="Password" type="string">
  Available when `Authentication type` is set to **Username and password**.

  Select the secret definition that represents your credentials for this connector.

  If you have not already saved your credentials for this connector as a secret definition, click **Add secret** to create a secret definition representing these credentials. Read [Secrets and secret definitions](/docs/guides/secrets-and-secret-definitions) for details about creating a secret definition.
</ResponseField>

{/* <!-- param-start:[privateKey, keyPairAuth.sshPrivateKey] | warehouses: [snowflake] --> */}

<ResponseField name="Private key" type="drop-down">
  When `Database type` is set to **Snowflake**, use the drop-down to select the corresponding secret definition that denotes the value of your private key.

  Read [AWS Secrets Manager](/docs/administration/aws-secrets-manager) to learn how to store secrets in AWS.

  <Note>The key/value JSON pattern shown in the warning below (with `\n` for newlines) is specific to key/value formatted secrets used by this component. Environment-level Snowflake connections use plaintext storage instead. Read [Using Snowflake key-pair authentication](/docs/administration/snowflake-key-pair-authentication) for details.</Note>

  <Warning>
    For AWS users:

    If you're storing a multi-line secret in AWS Secrets Manager:

    1. Add your key and value to the **Key/value** tab of the **Secret value** section when storing your secret.
    2. Click the **Plaintext** tab.
    3. Replace any whitespace characters before and after `-----` with `\n`. Do not remove whitespace characters in the `BEGIN/END RSA PRIVATE KEY` parts.

    Example: `{"dwh-bash-private-key":"-----BEGIN RSA PRIVATE KEY-----\nline1\nline2\nline3\n-----END RSA PRIVATE KEY-----"}`

    Alternatively, you can run the following code in your terminal, replacing values where appropriate:

    ```
        PEM_CONTENT=$(awk '{printf "%s\\n", $0}' /path/to/your/file.pem)

        aws secretsmanager create-secret \
          --name "MyKeyValueSecretWithPem" \
          --description "Secret with PEM file content" \
          --secret-string "{\"pem\":\"$PEM_CONTENT\"}"
    ```
  </Warning>

  <Warning>
    For Azure users:

    Do not store multi-line secrets via the Azure Key Vault GUI, as newlines may be stripped. Instead, use the Azure CLI depending on your use case. Read [Store a multi-line secret in Azure Key Vault](https://learn.microsoft.com/en-us/azure/key-vault/secrets/multiline-secrets) to work around this issue.

    The following CLI command will maintain newlines:

    ```
        az keyvault secret set --vault-name <vault-name> --name <secet-name> --file <key-file-name>
    ```
  </Warning>
</ResponseField>

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

<ResponseField name="Require passphrase" type="boolean" required>
  Select whether to require a passphrase as part of using key pair authentication. Default is **No**.
</ResponseField>

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

<ResponseField name="Passphrase" type="drop-down">
  Available when `Require passphrase` is set to **Yes**.

  Use the drop-down to select the corresponding secret definition that denotes the value of your passphrase.

  If your private key is passphrase protected, you will also need to add a secret to store the passphrase. Read [Using Snowflake key-pair authentication](/docs/administration/snowflake-key-pair-authentication) to learn how to store the Snowflake private key using a secret.
</ResponseField>

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

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

  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:[schema] | warehouses: [snowflake, databricks, redshift, bigquery] --> */}

<ResponseField name="Schema" type="drop-down">
  Select a table schema.

  In Databricks, this property is known as `Schema (Database)`.
</ResponseField>

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

<ResponseField name="Table" type="drop-down" required>
  Select the table to pull metadata from.
</ResponseField>

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

<ResponseField name="Grid variable" type="drop-down" required>
  Drop-down list of grid variables. To learn more, read [Grid variables](/docs/guides/grid-variables).
</ResponseField>

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

<ResponseField name="Grid variable mapping" type="multiple drop-downs" required>
  Map each column in the grid variable to a particular "type" of metadata by selecting from the available drop-downs.

  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>

<Note>
  Due to licensing restrictions, this component uses the MariaDB driver when interacting with MySQL databases in Full SaaS deployments. For customers using a Hybrid SaaS deployment, the native MySQL driver can be used to interact directly with MySQL databases.
</Note>
