# DataX DatabendWriter [简体中文](./databendwriter-CN.md) | [English](./databendwriter.md) ## 1 快速介绍 Databend Writer 是一个 DataX 的插件,用于从 DataX 中写入数据到 Databend 表中。 该插件基于[databend JDBC driver](https://github.com/databendcloud/databend-jdbc) ,它使用 [RESTful http protocol](https://databend.rs/doc/integrations/api/rest) 在开源的 databend 和 [databend cloud](https://app.databend.com/) 上执行查询。 在每个写入批次中,databend writer 将批量数据上传到内部的 S3 stage,然后执行相应的 insert SQL 将数据上传到 databend 表中。 为了最佳的用户体验,如果您使用的是 databend 社区版本,您应该尝试采用 [S3](https://aws.amazon.com/s3/)/[minio](https://min.io/)/[OSS](https://www.alibabacloud.com/product/object-storage-service) 作为其底层存储层,因为 它们支持预签名上传操作,否则您可能会在数据传输上浪费不必要的成本。 您可以在[文档](https://databend.rs/doc/deploy/deploying-databend)中了解更多详细信息 ## 2 实现原理 Databend Writer 将使用 DataX 从 DataX Reader 中获取生成的记录,并将记录批量插入到 databend 表中指定的列中。 ## 3 功能说明 ### 3.1 配置样例 * 以下配置将从内存中读取一些生成的数据,并将数据上传到databend表中 #### 准备工作 ```sql --- create table in databend drop table if exists datax.sample1; drop database if exists datax; create database if not exists datax; create table if not exsits datax.sample1(a string, b int64, c date, d timestamp, e bool, f string, g variant); ``` #### 配置样例 ```json { "job": { "content": [ { "reader": { "name": "streamreader", "parameter": { "column" : [ { "value": "DataX", "type": "string" }, { "value": 19880808, "type": "long" }, { "value": "1926-08-08 08:08:08", "type": "date" }, { "value": "1988-08-08 08:08:08", "type": "date" }, { "value": true, "type": "bool" }, { "value": "test", "type": "bytes" }, { "value": "{\"type\": \"variant\", \"value\": \"test\"}", "type": "string" } ], "sliceRecordCount": 10000 } }, "writer": { "name": "databendwriter", "parameter": { "writeMode": "replace", "onConflictColumn": ["id"], "username": "databend", "password": "databend", "column": ["a", "b", "c", "d", "e", "f", "g"], "batchSize": 1000, "preSql": [ ], "postSql": [ ], "connection": [ { "jdbcUrl": "jdbc:databend://localhost:8000/datax", "table": [ "sample1" ] } ] } } } ], "setting": { "speed": { "channel": 1 } } } } ``` ### 3.2 参数说明 * jdbcUrl * 描述: JDBC 数据源 url。请参阅仓库中的详细[文档](https://github.com/databendcloud/databend-jdbc) * 必选: 是 * 默认值: 无 * 示例: jdbc:databend://localhost:8000/datax * username * 描述: JDBC 数据源用户名 * 必选: 是 * 默认值: 无 * 示例: databend * password * 描述: JDBC 数据源密码 * 必选: 是 * 默认值: 无 * 示例: databend * table * 描述: 表名的集合,table应该包含column参数中的所有列。 * 必选: 是 * 默认值: 无 * 示例: ["sample1"] * column * 描述: 表中的列名集合,字段顺序应该与reader的record中的column类型对应 * 必选: 是 * 默认值: 无 * 示例: ["a", "b", "c", "d", "e", "f", "g"] * batchSize * 描述: 每个批次的记录数 * 必选: 否 * 默认值: 1000 * 示例: 1000 * preSql * 描述: 在写入数据之前执行的SQL语句 * 必选: 否 * 默认值: 无 * 示例: ["delete from datax.sample1"] * postSql * 描述: 在写入数据之后执行的SQL语句 * 必选: 否 * 默认值: 无 * 示例: ["select count(*) from datax.sample1"] * writeMode * 描述:写入模式,支持 insert 和 replace 两种模式,默认为 insert。若为 replace,务必填写 onConflictColumn 参数 * 必选:否 * 默认值:insert * 示例:"replace" * onConflictColumn * 描述:on conflict 字段,指定 writeMode 为 replace 后,需要此参数 * 必选:否 * 默认值:无 * 示例:["id","user"] ### 3.3 类型转化 DataX中的数据类型可以转换为databend中的相应数据类型。下表显示了两种类型之间的对应关系。 | DataX 内部类型 | Databend 数据类型 | |------------|-----------------------------------------------------------| | INT | TINYINT, INT8, SMALLINT, INT16, INT, INT32, BIGINT, INT64 | | LONG | TINYINT, INT8, SMALLINT, INT16, INT, INT32, BIGINT, INT64 | | STRING | STRING, VARCHAR | | DOUBLE | FLOAT, DOUBLE | | BOOL | BOOLEAN, BOOL | | DATE | DATE, TIMESTAMP | | BYTES | STRING, VARCHAR | ## 4 性能测试 ## 5 约束限制 目前,复杂数据类型支持不稳定,如果您想使用复杂数据类型,例如元组,数组,请检查databend和jdbc驱动程序的进一步版本。 ## FAQ