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

# dbt Core

export const m_runner = "Maia runner";

export const maia = "Maia";

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" connectionInputs="One" connectionOutputs="Three" />

Run [dbt](https://www.getdbt.com/product/what-is-dbt) commands as part of an orchestration pipeline.

When using [dbt environment variables](https://docs.getdbt.com/docs/build/environment-variables) in this component, the variables must have the prefix `DBT_`.

For extracting data from dbt Cloud, use the [dbt Cloud](/docs/components/dbt-cloud) Flex connector instead.

<Note>
  * Snowflake credentials, including key-pair authentication, are securely passed from the environment to dbt in the background. For more information about how to use key-pair authentication, read [Using Snowflake key-pair authentication](/docs/administration/snowflake-key-pair-authentication).
  * This component supports the use of pipeline and project variables. For more information, read [Project and pipeline variables](/docs/guides/variables).
  * This component programmatically generates the `profiles.yml` file and doesn't provide a parameter to specify an external or custom `profiles.yml`.
</Note>

***

## Video example

<p style={{textAlign: "center"}}>
  <iframe width="560" height="315" src="https://www.youtube.com/embed/pyZRCus2-gU?si=4WwpOCJsEgMnrnXW&enablejsapi=1" title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen />
</p>

***

## Properties

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

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

<ResponseField name="dbt core version" type="drop-down" required>
  Select the dbt Core version to use. This drop-down shows the current version of dbt Core which is available to your {m_runner}. A warning will be displayed in the pipeline run details if this doesn't match the {m_runner}'s dbt Core version. In the future, Full SaaS {m_runner}s will support multiple versions of dbt Core and will decline to execute the component instead if the selected version isn't supported.
</ResponseField>

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

<ResponseField name="dbt project location" type="drop-down" required>
  Choose how to access your [dbt project](https://docs.getdbt.com/docs/build/projects).

  If your Git repository uses Multi-Factor Authentication (MFA), ensure you are using a {maia} project that is associated with your Git repository and then select **Current Project** from the options below.

  * **External Repository:** Select this option if your dbt project is located in an external Git repository that is not connected to your current {maia} project. This is the default setting. This setting uses username and password authentication.
  * **Current project:** The dbt Core component will look for a dbt project in the associated project repository. This will make available the **dbt Project** property. Select this option if your dbt project is either:
    * Already located in the Git repository that you have connected to your {maia} project.
    * Available to import into the current {maia} project. To do this:
      1. Clone your dbt project Git repository to your local machine.
      2. Compress the dbt project folder (the folder containing `dbt_project.yml`) into a `.zip` file.
      3. Click **Add** → **Import** and select the `.zip` file.

  <Note>
    A directory is only considered a dbt project if the directory includes a `dbt_project.yml` file. Read more about [dbt\_project.yml](https://docs.getdbt.com/reference/dbt_project.yml).
  </Note>
</ResponseField>

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

<ResponseField name="dbt project" type="drop-down" required>
  Select the dbt Project to use. The drop-down will list the top-level name of any directories that are classed as dbt projects (defined by including a `dbt_project.yml` file). Only required if **dbt project location** is **Current project**.
</ResponseField>

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

<ResponseField name="dbt command" type="string" required>
  A dbt command to execute. A single instance of the component runs a single dbt command.

  To learn more about dbt commands, read [dbt Command reference](https://docs.getdbt.com/reference/dbt-commands).

  The dbt `run` command runs dbt models stored in the Git repository you have synced with. The `run` command will run all models stored in your repository unless you specify a particular model.

  Specify a model by running `dbt run --{name_of_dbt_model}`.
</ResponseField>

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

<ResponseField name="Git URL" type="string" required>
  URL to the external Git repository to sync to. Only required if **dbt project location** is **External repository**.
</ResponseField>

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

<ResponseField name="Git branch" type="string" required>
  The Git branch to sync with. Only required if **dbt project location** is **External repository**.
</ResponseField>

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

<ResponseField name="Git folder path" type="string">
  Path to the folder in your repository that contains the dbt project. Leave empty if the dbt project is at the top of the repository. Only required if **dbt project location** is **External repository**.
</ResponseField>

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

<ResponseField name="Git username" type="string" required>
  Your username for the service that hosts your repository, such as GitHub, Azure DevOps, GitLab, or Bitbucket. If your username and your email address are *not* the same value, you must use your username. Only required if **dbt project location** is **External repository**.
</ResponseField>

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

<ResponseField name="Git password" type="drop-down" required>
  Choose the secret definition that represents your credentials for this connector. Only required if **dbt project location** is **External repository**.

  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.

  To create a new secret:

  1. Click **Manage** to open the **Secret definitions** tab of your project in a new browser tab.

  2. Click **Add secret definition**.

  3. Configure your secret definition using the table as reference if required.

     | Property                   | Description                                                                                                                                                                                                                                                                                                     |
     | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | Secret definition name     | A name for the secret definition. Any whitespace added to the start or end of the secret definition name is automatically trimmed.                                                                                                                                                                              |
     | Description                | An optional, referential description for the project. Max 256 characters.                                                                                                                                                                                                                                       |
     | Agent                      | Select the {m_runner} that will be used by the pipelines that use this secret. This is only required if you have a [Hybrid SaaS solution](/docs/guides/runner-overview#matillion-fully-managed-vs-hybrid-cloud). To learn how to create a {m_runner}, read [Create a {m_runner}](/docs/guides/create-a-runner). |
     | Secret Name                | For a Hybrid SaaS solution only, select a named entry created in [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html).                                                                                                                                                 |
     | Secret Key                 | For a Hybrid SaaS solution only, select a named secret key tied to your secret name.                                                                                                                                                                                                                            |
     | Use multi-line text input? | For a [Matillion Full SaaS solution](/docs/guides/runner-overview#matillion-fully-managed-vs-hybrid-cloud) only, toggle "Yes" to enable multi-line text input for secret values that require multi-line input. For example, certificates and SSH keys.                                                          |
     | Secret value               | For a Matillion Full SaaS solution only, give a secret value in the field provided.                                                                                                                                                                                                                             |

  4. Click **Create Secret**.

  5. Return to the Git Password drop-down and select your new secret definition from the drop-down list.
</ResponseField>

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

<ResponseField name="Map dbt environment variables" type="column editor">
  Specify any dbt environment variables and their values.

  <Note>
    Environment variables passed to this component must have the prefix `DBT_`.
  </Note>
</ResponseField>

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

<ResponseField name="Global configuration in profiles.yml" type="column editor">
  Append configuration parameters to the `profiles.yml` file.

  * **Key:** The parameter name.
  * **Value:** The parameter value.
  * **Data Type:** String, number, or Boolean.

  Read dbt's [About profiles.yml](https://docs.getdbt.com/docs/core/connect-data-platform/profiles.yml) to learn more.
</ResponseField>

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

<ResponseField name="Profile configuration in profiles.yml" type="column editor">
  Assign additional output parameters or override existing parameters of the `profiles.yml` file. {maia} generates the profile.yml file based on the [environment](/docs/guides/environments) you have configured in {maia}—for instance, if your environment is set up for Snowflake, the Snowflake connection is included in the profile.yml file.

  * **Key:** The parameter name.
  * **Value:** The parameter value.
  * **Data Type:** String, number, or Boolean.

  Cloud data warehouse parameter documentation is available below:

  * [Snowflake](https://docs.getdbt.com/docs/core/connect-data-platform/snowflake-setup)
  * [Databricks](https://docs.getdbt.com/docs/core/connect-data-platform/databricks-setup)
  * [Amazon Redshift](https://docs.getdbt.com/docs/core/connect-data-platform/redshift-setup)
  * [Google BigQuery](https://docs.getdbt.com/docs/core/connect-data-platform/bigquery-setup)
</ResponseField>
