mirror of
https://github.com/alibaba/DataX.git
synced 2025-05-02 06:32:24 +08:00
5.9 KiB
5.9 KiB
DataX DatabendWriter
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驱动程序的进一步版本。