# doris_stream_load

> 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: doris_stream_load
latest-connect-version: 4.104.0
latest-operator-version: v26.2.1
latest-console-tag: v3.9.0
latest-redpanda-tag: v26.2.1
docname: outputs/doris_stream_load
page-component-name: connect
page-version: master
page-component-version: master
page-component-title: Connect
page-relative-src-path: outputs/doris_stream_load.adoc
page-edit-url: https://github.com/redpanda-data/rp-connect-docs/edit/main/modules/components/pages/outputs/doris_stream_load.adoc
description: Writes batches of messages into Apache Doris using Stream Load.
page-git-created-date: "2026-06-16"
page-git-modified-date: "2026-06-16"
---

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

Writes batches of messages into Apache Doris using Stream Load.

Introduced in version 4.96.0.

Each output batch is encoded into a single Doris Stream Load request. The output first contacts a Doris frontend (FE) node and follows the Stream Load redirect to a backend (BE) node before uploading the batch body. A batch is only acknowledged when Doris reports success.

## [](#performance)Performance

This output benefits from sending multiple messages in flight in parallel for improved performance. You can tune the max number of in flight messages (or message batches) with the field `max_in_flight`.

This output benefits from sending messages as a batch for improved performance. Batches can be formed at both the input and output level. You can find out more [in this doc](https://docs.redpanda.com/connect/configuration/batching/).

### Common

```yml
outputs:
  label: ""
  doris_stream_load:
    fe_urls: []
    database: "" # No default (required)
    table: "" # No default (required)
    username: "" # No default (required)
    password: "" # No default (required)
    format: json
    read_json_by_line: true
    strip_outer_array: false
    columns: []
    label_prefix: redpanda_connect
    timeout: 30s
    max_in_flight: 8
    batching:
      count: 0
      byte_size: 0
      period: ""
      check: ""
      processors: [] # No default (optional)
```

### Advanced

```yml
outputs:
  label: ""
  doris_stream_load:
    url: "" # No default (optional)
    fe_urls: []
    database: "" # No default (required)
    table: "" # No default (required)
    username: "" # No default (required)
    password: "" # No default (required)
    query_port: 9030
    format: json
    read_json_by_line: true
    strip_outer_array: false
    jsonpaths: ""
    json_root: ""
    columns: []
    where: ""
    column_separator: ,
    line_delimiter:

    group_commit: ""
    max_filter_ratio: 0
    partitions: []
    temporary_partitions: []
    skip_lines: 0
    empty_field_as_null: false
    trim_double_quotes: false
    num_as_string: false
    fuzzy_parse: false
    label_prefix: redpanda_connect
    headers: {}
    strict_mode: false
    timeout: 30s
    max_in_flight: 8
    batching:
      count: 0
      byte_size: 0
      period: ""
      check: ""
      processors: [] # No default (optional)
```

## [](#fields)Fields

### [](#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**: `array<processor>`

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

# ---

processors:
  - archive:
      format: lines

# ---

processors:
  - archive:
      format: json_array
```

### [](#column_separator)`column_separator`

Column separator used for csv format.

**Type**: `string`

**Default**: `,`

### [](#columns)`columns[]`

Optional Doris columns header. When set the values are joined with commas.

**Type**: `array<string>`

**Default**: `[]`

### [](#database)`database`

Target Doris database.

**Type**: `string`

```yaml
# Examples:
database: test_db
```

### [](#empty_field_as_null)`empty_field_as_null`

Whether Doris should treat empty input fields as NULL.

**Type**: `bool`

**Default**: `false`

### [](#fe_urls)`fe_urls[]`

A list of Doris FE HTTP URLs. The sink will try these FE endpoints in order with per-request failover, and the starting FE is rotated across requests.

**Type**: `array<string>`

**Default**: `[]`

```yaml
# Examples:
fe_urls:
  - "http://fe1:8030"
  - "http://fe2:8030"
```

### [](#format)`format`

Body format sent to Doris Stream Load.

**Type**: `string`

**Default**: `json`

**Options**: `json`, `csv`

### [](#fuzzy_parse)`fuzzy_parse`

Whether Doris should enable fuzzy\_parse for JSON inputs.

**Type**: `bool`

**Default**: `false`

### [](#group_commit)`group_commit`

Optional Doris group\_commit mode. Valid values are sync\_mode, async\_mode, and off\_mode. When omitted Doris uses the server default behavior.

**Type**: `string`

**Default**: `""`

### [](#headers)`headers`

Optional additional static Stream Load headers. Reserved Doris headers configured by this component take precedence.

**Type**: `object`

**Default**: `{}`

### [](#json_root)`json_root`

Optional Doris json\_root header value.

**Type**: `string`

**Default**: `""`

### [](#jsonpaths)`jsonpaths`

Optional Doris jsonpaths header value.

**Type**: `string`

**Default**: `""`

### [](#label_prefix)`label_prefix`

Prefix used when generating Doris labels.

**Type**: `string`

**Default**: `redpanda_connect`

### [](#line_delimiter)`line_delimiter`

Line delimiter used for csv batches.

**Type**: `string`

**Default**: \` \`

### [](#max_filter_ratio)`max_filter_ratio`

Optional Doris max\_filter\_ratio header value.

**Type**: `float`

**Default**: `0`

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

Maximum number of parallel in-flight Doris Stream Load requests.

**Type**: `int`

**Default**: `8`

### [](#num_as_string)`num_as_string`

Whether Doris should treat JSON numbers as strings.

**Type**: `bool`

**Default**: `false`

### [](#partitions)`partitions[]`

Optional Doris partitions header. Values are joined with commas.

**Type**: `array<string>`

**Default**: `[]`

### [](#password)`password`

Doris password.

> ⚠️ **CAUTION**
>
> This field contains sensitive information that usually shouldn’t be added to a configuration directly. For more information, see [Secrets](https://docs.redpanda.com/connect/configuration/secrets/).

**Type**: `string`

### [](#query_port)`query_port`

Doris FE MySQL query port, used by ConnectionTest to verify that the target database and table exist. Set to 0 to disable query-port checks.

**Type**: `int`

**Default**: `9030`

### [](#read_json_by_line)`read_json_by_line`

Encode a JSON batch as newline-delimited JSON and set the Doris header read\_json\_by\_line=true.

**Type**: `bool`

**Default**: `true`

### [](#skip_lines)`skip_lines`

Optional Doris skip\_lines header.

**Type**: `int`

**Default**: `0`

### [](#strict_mode)`strict_mode`

Whether to set Doris strict\_mode=true.

**Type**: `bool`

**Default**: `false`

### [](#strip_outer_array)`strip_outer_array`

Encode a JSON batch as a single JSON array and set the Doris header strip\_outer\_array=true.

**Type**: `bool`

**Default**: `false`

### [](#table)`table`

Target Doris table.

**Type**: `string`

```yaml
# Examples:
table: events
```

### [](#temporary_partitions)`temporary_partitions[]`

Optional Doris temporary\_partitions header. Values are joined with commas.

**Type**: `array<string>`

**Default**: `[]`

### [](#timeout)`timeout`

Timeout for each Doris HTTP request.

**Type**: `string`

**Default**: `30s`

### [](#trim_double_quotes)`trim_double_quotes`

Whether Doris should trim double quotes in CSV/text imports.

**Type**: `bool`

**Default**: `false`

### [](#url)`url`

Backward-compatible single Doris FE HTTP URL, for example [http://fe\_host:8030](http://fe_host:8030). When fe\_urls is provided it takes precedence.

**Type**: `string`

```yaml
# Examples:
url: http://127.0.0.1:8030
```

### [](#username)`username`

Doris username.

**Type**: `string`

```yaml
# Examples:
username: root
```

### [](#where)`where`

Optional Doris where header for filtering imported rows.

**Type**: `string`

**Default**: `""`

## [](#examples)Examples

### [](#json-lines-from-stdin)JSON lines from stdin

Read newline-delimited JSON messages and write them into Doris using one Stream Load request per batch.

```yaml
input:
  stdin:
    scanner:
      lines: {}

output:
  doris_stream_load:
    url: http://127.0.0.1:8030
    database: test_db
    table: events
    username: root
    password: secret
    format: json
    read_json_by_line: true
    columns: [id, name, ts]
```