> For the complete documentation index, see [llms.txt](https://docs.selfuel.digital/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.selfuel.digital/data-integration-with-nexus/nexus-elements/connectors/sink/db2.md).

# DB2

> JDBC DB2 Sink Connector

### Description[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#description) <a href="#description" id="description"></a>

Write data through jdbc. Support Batch mode and Streaming mode, support concurrent writing, support exactly-once semantics (using XA transaction guarantee).

### Key Features[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#key-features) <a href="#key-features" id="key-features"></a>

* [x] &#x20;exactly-once
* [ ] &#x20;cdc

> Use `Xa transactions` to ensure `exactly-once`. So only support `exactly-once` for the database which is support `Xa transactions`. You can set `is_exactly_once=true` to enable it.

### Data Type Mapping[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#data-type-mapping) <a href="#data-type-mapping" id="data-type-mapping"></a>

| DB2 Data Type                                                                                        | Nexus Data Type   |
| ---------------------------------------------------------------------------------------------------- | ----------------- |
| BOOLEAN                                                                                              | BOOLEAN           |
| SMALLINT                                                                                             | SHORT             |
| <p>INT<br>INTEGER<br></p>                                                                            | INTEGER           |
| BIGINT                                                                                               | LONG              |
| <p>DECIMAL<br>DEC<br>NUMERIC<br>NUM</p>                                                              | DECIMAL(38,18)    |
| REAL                                                                                                 | FLOAT             |
| <p>FLOAT<br>DOUBLE<br>DOUBLE PRECISION<br>DECFLOAT</p>                                               | DOUBLE            |
| <p>CHAR<br>VARCHAR<br>LONG VARCHAR<br>CLOB<br>GRAPHIC<br>VARGRAPHIC<br>LONG VARGRAPHIC<br>DBCLOB</p> | STRING            |
| BLOB                                                                                                 | BYTES             |
| DATE                                                                                                 | DATE              |
| TIME                                                                                                 | TIME              |
| TIMESTAMP                                                                                            | TIMESTAMP         |
| <p>ROWID<br>XML</p>                                                                                  | Not supported yet |

### Sink Options[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#sink-options) <a href="#sink-options" id="sink-options"></a>

| Name                                            | Type    | Required | Default | Description                                                                                                                                                                                                                                         |
| ----------------------------------------------- | ------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| url                                             | String  | Yes      | -       | The URL of the JDBC connection. Refer to a case: jdbc:db2://127.0.0.1:50000/dbname                                                                                                                                                                  |
| driver                                          | String  | Yes      | -       | <p>The jdbc class name used to connect to the remote data source,<br>if you use DB2 the value is <code>com.ibm.db2.jdbc.app.DB2Driver</code>.</p>                                                                                                   |
| user                                            | String  | No       | -       | Connection instance user name                                                                                                                                                                                                                       |
| password                                        | String  | No       | -       | Connection instance password                                                                                                                                                                                                                        |
| query                                           | String  | No       | -       | Use this sql write upstream input datas to database. e.g `INSERT ...`,`query` have the higher priority                                                                                                                                              |
| database                                        | String  | No       | -       | <p>Use this <code>database</code> and <code>table-name</code> auto-generate sql and receive upstream input datas write to database.<br>This option is mutually exclusive with <code>query</code> and has a higher priority.</p>                     |
| table                                           | String  | No       | -       | <p>Use database and this table-name auto-generate sql and receive upstream input datas write to database.<br>This option is mutually exclusive with <code>query</code> and has a higher priority.</p>                                               |
| primary\_keys                                   | Array   | No       | -       | This option is used to support operations such as `insert`, `delete`, and `update` when automatically generate sql.                                                                                                                                 |
| support\_upsert\_by\_query\_primary\_key\_exist | Boolean | No       | false   | Choose to use INSERT sql, UPDATE sql to process update events(INSERT, UPDATE\_AFTER) based on query primary key exists. This configuration is only used when database unsupport upsert syntax. **Note**: that this method has low performance       |
| connection\_check\_timeout\_sec                 | Int     | No       | 30      | The time in seconds to wait for the database operation used to validate the connection to complete.                                                                                                                                                 |
| max\_retries                                    | Int     | No       | 0       | The number of retries to submit failed (executeBatch)                                                                                                                                                                                               |
| batch\_size                                     | Int     | No       | 1000    | <p>For batch writing, when the number of buffered records reaches the number of <code>batch\_size</code> or the time reaches <code>checkpoint.interval</code><br>, the data will be flushed into the database</p>                                   |
| is\_exactly\_once                               | Boolean | No       | false   | <p>Whether to enable exactly-once semantics, which will use Xa transactions. If on, you need to<br>set <code>xa\_data\_source\_class\_name</code>.</p>                                                                                              |
| generate\_sink\_sql                             | Boolean | No       | false   | Generate sql statements based on the database table you want to write to                                                                                                                                                                            |
| xa\_data\_source\_class\_name                   | String  | No       | -       | <p>The xa data source class name of the database Driver, for example, DB2 is <code>com.db2.cj.jdbc.Db2XADataSource</code>, and<br>please refer to appendix for other data sources</p>                                                               |
| max\_commit\_attempts                           | Int     | No       | 3       | The number of retries for transaction commit failures                                                                                                                                                                                               |
| transaction\_timeout\_sec                       | Int     | No       | -1      | <p>The timeout after the transaction is opened, the default is -1 (never timeout). Note that setting the timeout may affect<br>exactly-once semantics</p>                                                                                           |
| auto\_commit                                    | Boolean | No       | true    | Automatic transaction commit is enabled by default                                                                                                                                                                                                  |
| properties                                      | Map     | No       | -       | <p>Additional connection configuration parameters,when properties and URL have the same parameters, the priority is determined by the<br>specific implementation of the driver. For example, in MySQL, properties take precedence over the URL.</p> |
| common-options                                  |         | no       | -       | Sink plugin common parameters, please refer to [Sink Common Options](/data-integration-with-nexus/nexus-elements/connectors/sink/sink-common-options.md)  for details                                                                               |

#### Tips[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#tips) <a href="#tips" id="tips"></a>

> If partition\_column is not set, it will run in single concurrency, and if partition\_column is set, it will be executed in parallel according to the concurrency of tasks.

### Task Example[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#task-example) <a href="#task-example" id="task-example"></a>

#### Simple:[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#simple) <a href="#simple" id="simple"></a>

> This example defines a Nexus synchronization task that automatically generates data through FakeSource and sends it to JDBC Sink. FakeSource generates a total of 16 rows of data (row\.num=16), with each row having two fields, name (string type) and age (int type). The final target table is test\_table will also be 16 rows of data in the table. Before run this job, you need create database test and table test\_table in your DB2.&#x20;

```
# Defining the runtime environment
env {
  parallelism = 1
  job.mode = "BATCH"
}

source {
  # This is a example source plugin **only for test and demonstrate the feature source plugin**
  FakeSource {
    parallelism = 1
    result_table_name = "fake"
    row.num = 16
    schema = {
      fields {
        name = "string"
        age = "int"
      }
    }
  }
  # If you would like to get more information about how to configure Nexus and see full list of source plugins,
  # please go to https://nexus.apache.org/docs/category/source-v2
}

transform {
  # If you would like to get more information about how to configure Nexus and see full list of transform plugins,
    # please go to https://nexus.apache.org/docs/category/transform-v2
}

sink {
    jdbc {
        url = "jdbc:db2://127.0.0.1:50000/dbname"
        driver = "com.ibm.db2.jdbc.app.DB2Driver"
        user = "root"
        password = "123456"
        query = "insert into test_table(name,age) values(?,?)"
        }
  # If you would like to get more information about how to configure Nexus and see full list of sink plugins,
  # please go to sink page
}
```

#### Generate Sink SQL[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#generate-sink-sql) <a href="#generate-sink-sql" id="generate-sink-sql"></a>

> This example not need to write complex sql statements, you can configure the database name table name to automatically generate add statements for you

```
sink {
    jdbc {
        url = "jdbc:db2://127.0.0.1:50000/dbname"
        driver = "com.ibm.db2.jdbc.app.DB2Driver"
        user = "root"
        password = "123456"
        # Automatically generate sql statements based on database table names
        generate_sink_sql = true
        database = test
        table = test_table
    }
}
```

#### Exactly-once :[​](https://seatunnel.apache.org/docs/2.3.7/connector-v2/sink/DB2#exactly-once-) <a href="#exactly-once" id="exactly-once"></a>

> For accurate write scene we guarantee accurate once

```
sink {
    jdbc {
        url = "jdbc:db2://127.0.0.1:50000/dbname"
        driver = "com.ibm.db2.jdbc.app.DB2Driver"
    
        max_retries = 0
        user = "root"
        password = "123456"
        query = "insert into test_table(name,age) values(?,?)"
    
        is_exactly_once = "true"
    
        xa_data_source_class_name = "com.db2.cj.jdbc.Db2XADataSource"
    }
}
```
