# sql

> For the complete documentation index, see [llms.txt](https://docs.redpanda.com/llms.txt). Component-specific: [connect-full.txt](https://docs.redpanda.com/connect-full.txt)

---
title: sql
latest-connect-version: 4.93.0
latest-operator-version: v26.1.4
latest-console-tag: v3.7.3
latest-redpanda-tag: v26.1.9
docname: outputs/sql
page-component-name: connect
page-version: master
page-component-version: master
page-component-title: Connect
page-relative-src-path: outputs/sql.adoc
page-edit-url: https://github.com/redpanda-data/rp-connect-docs/edit/main/modules/components/pages/outputs/sql.adoc
page-git-created-date: "2024-05-24"
page-git-modified-date: "2026-05-26"
---

<!-- Source: https://docs.redpanda.com/connect/components/outputs/sql.md -->

**Type:** Output ▼

[Output](https://docs.redpanda.com/connect/components/outputs/sql/)[Cache](https://docs.redpanda.com/connect/components/caches/sql/)[Processor](https://docs.redpanda.com/connect/components/processors/sql/)

**Available in:** Self-Managed

> ⚠️ **WARNING: Deprecated**
>
> Deprecated
>
> This component is deprecated and will be removed in the next major version release. Please consider moving onto [alternative components](#alternatives).

Executes an arbitrary SQL query for each message.

Introduced in version 3.65.0.

#### Common

```yml
outputs:
  label: ""
  sql:
    driver: "" # No default (required)
    data_source_name: "" # No default (required)
    query: "" # No default (required)
    args_mapping: "" # No default (optional)
    max_in_flight: 64
    batching:
      count: 0
      byte_size: 0
      period: ""
      check: ""
      processors: [] # No default (optional)
```

#### Advanced

```yml
outputs:
  label: ""
  sql:
    driver: "" # No default (required)
    data_source_name: "" # No default (required)
    query: "" # No default (required)
    args_mapping: "" # No default (optional)
    max_in_flight: 64
    batching:
      count: 0
      byte_size: 0
      period: ""
      check: ""
      processors: [] # No default (optional)
```

## [](#alternatives)Alternatives

For basic inserts use the [`sql_insert`](https://docs.redpanda.com/connect/components/outputs/sql_insert/) output. For more complex queries use the [`sql_raw`](https://docs.redpanda.com/connect/components/outputs/sql_raw/) output.

## [](#fields)Fields

### [](#args_mapping)`args_mapping`

An optional [Bloblang mapping](https://docs.redpanda.com/connect/guides/bloblang/about/) which should evaluate to an array of values matching in size to the number of placeholder arguments in the field `query`.

**Type**: `string`

```yaml
# Examples:
args_mapping: root = [ this.cat.meow, this.doc.woofs[0] ]

# ---

args_mapping: root = [ meta("user.id") ]
```

### [](#batching)`batching`

Allows you to configure a [batching policy](https://docs.redpanda.com/connect/configuration/batching/).

**Type**: `object`

```yaml
# Examples:
batching:
  byte_size: 5000
  count: 0
  period: 1s

# ---

batching:
  count: 10
  period: 1s

# ---

batching:
  check: this.contains("END BATCH")
  count: 0
  period: 1m
```

### [](#batching-byte_size)`batching.byte_size`

An amount of bytes at which the batch should be flushed. If `0` disables size based batching.

**Type**: `int`

**Default**: `0`

### [](#batching-check)`batching.check`

A [Bloblang query](https://docs.redpanda.com/connect/guides/bloblang/about/) that should return a boolean value indicating whether a message should end a batch.

**Type**: `string`

**Default**: `""`

```yaml
# Examples:
check: this.type == "end_of_transaction"
```

### [](#batching-count)`batching.count`

A number of messages at which the batch should be flushed. If `0` disables count based batching.

**Type**: `int`

**Default**: `0`

### [](#batching-period)`batching.period`

A period in which an incomplete batch should be flushed regardless of its size.

**Type**: `string`

**Default**: `""`

```yaml
# Examples:
period: 1s

# ---

period: 1m

# ---

period: 500ms
```

### [](#batching-processors)`batching.processors[]`

A list of [processors](https://docs.redpanda.com/connect/components/processors/about/) to apply to a batch as it is flushed. This allows you to aggregate and archive the batch however you see fit. Please note that all resulting messages are flushed as a single batch, therefore splitting the batch into smaller batches using these processors is a no-op.

**Type**: `processor`

```yaml
# Examples:
processors:
  - archive:
      format: concatenate

# ---

processors:
  - archive:
      format: lines

# ---

processors:
  - archive:
      format: json_array
```

### [](#data_source_name)`data_source_name`

Data source name.

**Type**: `string`

### [](#driver)`driver`

A database [driver](#drivers) to use.

**Type**: `string`

**Options**: `mysql`, `postgres`, `pgx`, `clickhouse`, `mssql`, `sqlite`, `oracle`, `snowflake`, `trino`, `gocosmos`, `spanner`, `databricks`

### [](#max_in_flight)`max_in_flight`

The maximum number of inserts to run in parallel.

**Type**: `int`

**Default**: `64`

### [](#query)`query`

The query to execute. The style of placeholder to use depends on the driver, some drivers require question marks (`?`) whereas others expect incrementing dollar signs (`$1`, `$2`, and so on) or colons (`:1`, `:2` and so on). The style to use is outlined in this table:

| Driver | Placeholder Style |
| --- | --- |
| clickhouse | Dollar sign ($) |
| gocosmos | Colon (:) |
| mysql | Question mark (?) |
| mssql | Question mark (?) |
| oracle | Colon (:) |
| postgres | Dollar sign ($) |
| snowflake | Question mark (?) |
| spanner | Question mark (?) |
| sqlite | Question mark (?) |
| trino | Question mark (?) |

**Type**: `string`

```yaml
# Examples:
query: INSERT INTO footable (foo, bar, baz) VALUES (?, ?, ?);
```