databendwriter-CN.md 5.9 KB

DataX DatabendWriter

简体中文 | English

1 快速介绍

Databend Writer 是一个 DataX 的插件,用于从 DataX 中写入数据到 Databend 表中。 该插件基于databend JDBC driver ,它使用 RESTful http protocol 在开源的 databend 和 databend cloud 上执行查询。

在每个写入批次中,databend writer 将批量数据上传到内部的 S3 stage,然后执行相应的 insert SQL 将数据上传到 databend 表中。

为了最佳的用户体验,如果您使用的是 databend 社区版本,您应该尝试采用 S3/minio/OSS 作为其底层存储层,因为 它们支持预签名上传操作,否则您可能会在数据传输上浪费不必要的成本。

您可以在文档中了解更多详细信息

2 实现原理

Databend Writer 将使用 DataX 从 DataX Reader 中获取生成的记录,并将记录批量插入到 databend 表中指定的列中。

3 功能说明

3.1 配置样例

  • 以下配置将从内存中读取一些生成的数据,并将数据上传到databend表中

准备工作

--- 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);

配置样例

{
  "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。请参阅仓库中的详细文档
    • 必选: 是
    • 默认值: 无
    • 示例: 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