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

# Oracle Unload from Snowflake

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"]} unsupportedWarehouses={["Databricks", "Amazon Redshift", "Google BigQuery"]} componentType="Connector, Orchestration" connectionInputs="One" connectionOutputs="Unlimited" />

The **Oracle Unload** orchestration component lets you write data in your Snowflake source to a target Oracle database. In a Snowflake {maia} project, the Snowflake account credentials are taken from the environment the current branch is connected to. This means you only need to configure parameters to identify the data being written and to set up the connection to the target Oracle database.

***

## Properties

Reference material is provided below for the Configure and Destination properties.

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

### Configure

<ResponseField name="Mode" type="drop-down" required>
  * **Basic:** This mode will build a query for you using settings from the **Schema**, **Data Source**, **Data Selection**, **Data Source Filter**, **Combine Filters**, and **Limit** parameters. In most cases, this mode will be sufficient.
  * **Advanced:** This mode will require you to write an SQL-like query to call data from the service you're connecting to. The available fields and their descriptions are documented in the data model.

  There are some special pseudo columns that can form part of a query filter, but are not returned as data. This is fully described in the data model.

  <Note>
    While the query is exposed in an SQL-like language, the exact semantics can be surprising, for example, filtering on a column can return more data than not filtering on it. This is an impossible scenario with regular SQL.
  </Note>
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.warehouse] | warehouses: [snowflake] --> */}

<ResponseField name="Warehouse" type="drop-down" required>
  The Snowflake *source* warehouse. The special value `[Environment Default]` uses the warehouse defined in the environment. Read [Snowflake's Virtual Warehouses documentation](https://docs.snowflake.com/en/user-guide/warehouses.html) to learn more.
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.database] | warehouses: [snowflake] --> */}

<ResponseField name="Database" type="drop-down" required>
  The Snowflake *source* 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:[snowflake-on-snowflake-environment-input-v1.schema] | warehouses: [snowflake] --> */}

<ResponseField name="Schema" type="drop-down" required>
  The Snowflake *source* 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:[snowflake-on-snowflake-environment-input-v1.dataSource] | warehouses: [snowflake] --> */}

<ResponseField name="Data Source" type="drop-down" required>
  Select a single data source to be extracted from the source system and loaded into a table in the destination. The source system defines the data sources available. Use multiple components to load multiple data sources.
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.dataSelection] | warehouses: [snowflake] --> */}

<ResponseField name="Data Selection" type="dual listbox" required>
  Choose one or more columns to return from the query. The columns available are dependent upon the data source selected. Move columns left-to-right to include in the query.

  To use [grid variables](/docs/guides/grid-variables), select the **Use Grid Variable** checkbox at the bottom of the **Data Selection** dialog.
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.dataSourceFilter] | warehouses: [snowflake] --> */}

<ResponseField name="Data Source Filter" type="column editor">
  Define one or more filter conditions that each row of data must meet to be included in the load.

  * **Input Column:** Select an input column. The available input columns vary depending upon the data source.
  * **Qualifier:**
    * **Is:** Compares the column to the value using the comparator.
    * **Not:** Reverses the effect of the comparison, so "Equals" becomes "Not equals", "Less than" becomes "Greater than or equal to", etc.
  * **Comparator:** Choose a method of comparing the column to the value. Possible comparators include: "Equal to", "Greater than", "Less than", "Greater than or equal to", "Less than or equal to", "Like", "Null". Not all data sources support all comparators.
  * **Value:** The value to be compared.

  Click the **Text Mode** toggle at the bottom of the **Connection Options** 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#component-properties).
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.combineFilters] | warehouses: [snowflake] --> */}

<ResponseField name="Combine Filters" type="drop-down" required>
  The data source filters you have defined can be combined using either **And** or **Or** logic. If **And**, then all filter conditions must be satisfied to load the data row. If **Or**, then only a single filter condition must be satisfied. The default is **And**.

  If you have only one filter, or no filters, this parameter is essentially ignored.
</ResponseField>

{/* <!-- param-start:[snowflake-on-snowflake-environment-input-v1.limit] | warehouses: [snowflake] --> */}

<ResponseField name="Row Limit" type="integer">
  Set a numeric value to limit the number of rows that are loaded. The default is an empty field, which will load all rows.
</ResponseField>

### Destination

<ResponseField name="Authentication Type" type="drop-down" required>
  Currently, only **Username & Password** credentials are supported.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.username] | warehouses: [snowflake] --> */}

<ResponseField name="Username" type="string" required>
  Your Oracle login username.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.password] | warehouses: [snowflake] --> */}

<ResponseField name="Password" type="string" required>
  Your Oracle password. This is stored as a secret definition. Read [Secrets and secret definitions](/docs/guides/secrets-and-secret-definitions) to learn how to store a password as a secret definition.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.server] | warehouses: [snowflake] --> */}

<ResponseField name="Endpoint" type="string" required>
  The Oracle database endpoint. Typically, this is your Oracle database IP. For example, `10.12.2.15`.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.port] | warehouses: [snowflake] --> */}

<ResponseField name="Port Number" type="integer" required>
  The port number that follows your Oracle database endpoint. The default value is `1521`.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.connectionIdentifier] | warehouses: [snowflake] --> */}

<ResponseField name="Connection Identifier" type="drop-down" required>
  Select a method of identifying the Oracle database to connect to.

  * **Service Name:** In Oracle, the SERVICE\_NAMES parameter specifies one or more names by which clients can connect to the Oracle instance.
  * **SID:** The Oracle Service Identifier prefix is the first 8 characters of the database name. This prefix can only contain the characters a-z, A-Z, and 0-9.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connection.overrides.database] | warehouses: [snowflake] --> */}

<ResponseField name="Database" type="string" required>
  Specify the full name of your Oracle database. This is the name of the database as it is known to the Oracle instance. It can be up to 30 characters long and can contain alphanumeric, underscore `_` dollar `$`, and pound `#` characters, but must begin with an alphabetic character. No other special characters are permitted in a database name.

  Read [Selecting a Database Name](https://docs.oracle.com/en/database/oracle/oracle-database/19/rilin/selecting-a-database-name.html) to learn more about Oracle database names.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.connectionOptions] | warehouses: [snowflake] --> */}

<ResponseField name="Connection Options" type="column editor">
  * **Parameter:** A JDBC parameter supported by the database driver. The parameters available to your database will usually be explained in the database's data model.
  * **Value:** A value for the given parameter.

  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).
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.schema] | warehouses: [snowflake] --> */}

<ResponseField name="Schema" type="string" required>
  The name of the Oracle schema to output the target table into. For information about using Oracle schemas, read [Schemas and Schema Objects](https://docs.oracle.com/en/database/oracle/oracle-database/23/dbiad/db_schemas.html).
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.table] | warehouses: [snowflake] --> */}

<ResponseField name="Table Name" type="string" required>
  A name for the output table that is to be created in the Oracle database.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.createTableMode] | warehouses: [snowflake] --> */}

<ResponseField name="Load Strategy" type="drop-down" required>
  Define what happens if the table name already exists in the specified database and schema.

  * **Replace:** If the specified table name already exists, that table will be destroyed and replaced by the table created during this pipeline run. If the table name doesn't already exist, a new table will be created.
  * **Truncate and Insert:** If the specified table name already exists, all rows within that table will be removed and new rows will be inserted per the next run of this pipeline.
  * **Append:** If the specified table name already exists, new rows will be appended to that existing table.

  In each case, if the specified table name doesn't already exist then a new table will be created.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.primaryKeys] | warehouses: [snowflake] --> */}

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

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

{/* <!-- param-start:[oracle-output-connector-v2.updateStrategy] | warehouses: [snowflake] --> */}

<ResponseField name="Update Strategy" type="drop-down" required>
  If **Load Strategy** is **Append** and **Primary Keys** have been specified, this property determines the behavior if there are existing rows with the same primary keys as an appended row.

  * **Ignore:** Existing rows with the same primary key values will be ignored. This is the default behavior.
  * **Replace:** Existing rows with the same primary key values will be replaced.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.stagePlatform] | warehouses: [snowflake] --> */}

<ResponseField name="Stage Platform" type="drop-down" required>
  Data read from the Snowflake source will be written directly to the Oracle target, without using an intermediate stage. Currently, therefore, the only option here is **Batch Load**.
</ResponseField>

{/* <!-- param-start:[oracle-output-connector-v2.batchLoad#batchSize] | warehouses: [snowflake] --> */}

<ResponseField name="Batch Size" type="integer">
  The number of rows batched for passing to the Oracle database. Default is `1000`.
</ResponseField>
