ClickHouse数据源为您提供读取和写入ClickHouse双向通道的功能,本文为您介绍DataWorks的ClickHouse数据同步的能力支持情况。
支持的版本
支持阿里云ClickHouse的20.8、21.8内核版本。
您需要确认驱动和您的ClickHouse服务之间的兼容性,数据库驱动使用如下版本。
<dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.2.4</version> </dependency>
使用限制
ClickHouse数据源仅支持离线读写能力,以下为具体内容。
支持使用JDBC连接ClickHouse,且仅支持使用JDBC Statement读取数据。
支持筛选部分列、列换序等功能,您可以自行填写列。
考虑到ClickHouse负载问题,ClickHouse Writer使用INSERT模式时,建议您限流系统吞吐量(TPS)最高为1,000。
支持的字段类型
支持阿里云ClickHouse以下常见的数据类型,阿里云ClickHouse的数据类型全集请参见数据类型,开源ClickHouse官方数据类型集合中的其他类型暂不支持,开源ClickHouse数据类型全集请参见ClickHouse Doc。
数据类型 | ClickHouse Reader | ClickHouse Writer |
数据类型 | ClickHouse Reader | ClickHouse Writer |
Int8 | 支持 | 支持 |
Int16 | 支持 | 支持 |
Int32 | 支持 | 支持 |
Int64 | 支持 | 支持 |
UInt8 | 支持 | 支持 |
UInt16 | 支持 | 支持 |
UInt32 | 支持 | 支持 |
UInt64 | 支持 | 支持 |
Float32 | 支持 | 支持 |
Float64 | 支持 | 支持 |
Decimal | 支持 | 支持 |
String | 支持 | 支持 |
FixedString | 支持 | 支持 |
Date | 支持 | 支持 |
DateTime | 支持 | 支持 |
DateTime64 | 支持 | 支持 |
Boolean | 支持 ClickHouse没有单独的Boolean类型,可使用UInt8、Int8 | 支持 |
Array | 部分支持。 数组元素类型是整型、浮点数、字符串类型、DateTime64毫秒精度时支持。 | 支持 |
Tuple | 支持 | 支持 |
Domain(IPv4,IPv6) | 支持 | 支持 |
Enum8 | 支持 | 支持 |
Enum16 | 支持 | 支持 |
Nullable | 支持 | 支持 |
Nested | 部分支持。 Nested内嵌套数据类型支持整型、浮点数、字符串类型、DateTime64毫秒精度。 | 支持 |
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。
脚本模式配置的全量参数和脚本Demo请参见下文的附录:脚本Demo与参数说明。
整库离线读同步配置指导
操作流程请参见数据集成侧同步任务配置。
附录:脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本参数
参数 | 描述 | 是否必选 | 默认值 |
参数 | 描述 | 是否必选 | 默认值 |
datasource | 数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须要与添加的数据源名称保持一致。 | 是 | 无 |
table | 所选取的需要同步的表,使用JSON数据进行描述。 table必须包含在connection配置单元中。 | 是 | 无 |
fetchSize | 该配置项定义了插件和数据库服务器端每次批量数据获取条数,该值决定了数据同步系统和服务器端的网络交互次数,能够提升数据抽取性能。 fetchSize值过大会造成数据同步进程OOM,需要根据ClickHouse负载情况递增。 | 否 | 1,024 |
column | 需要读取的ClickHouse数据,字段之间用英文逗号分隔。例如"column": ["id", "name", "age"]。 column配置项必须指定,不能为空。 | 是 | 无 |
jdbcUrl | 到源端数据库的JDBC连接信息,jdbcUrl包含在connection配置单元中。
| 是 | 无 |
username | 数据源的用户名。 | 是 | 无 |
password | 数据源指定用户名的密码。 | 是 | 无 |
splitPk | ClickHouse进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高数据同步的效率。 当配置了splitPk时,fetchSize参数为必填项。 | 否 | 无 |
where | 筛选条件,在实际业务场景中,往往会选择当天的数据进行同步,将where条件指定为 where条件可以有效地进行业务增量同步。如果不填写where语句,包括不提供where的key或value,数据同步均视作同步全量数据。 | 否 | 无 |
Writer脚本Demo
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"clickhouse",//插件名。
"parameter":{
"username": "",
"password": "",
"column": [//字段。
"id",
"name"
],
"connection": [
{
"table": [//表名。
"ClickHouse_table"
],
"jdbcUrl": "jdbc:clickhouse://ip:port/database"
}
],
"preSql": [ //执行数据同步任务之前率先执行的SQL语句。
"TRUNCATETABLEIFEXISTStablename"
],
"postSql": [//执行数据同步任务之后率先执行的SQL语句。
"ALTERTABLEtablenameUPDATEcol1=1WHEREcol2=2"
],
"batchSize": "1024",
"batchByteSize": "67108864",
"writeMode": "insert"
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//错误记录数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1, //作业并发数。
"mbps":"12"//限流,此处1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer脚本参数
参数 | 描述 | 是否必选 | 默认值 |
参数 | 描述 | 是否必选 | 默认值 |
jdbcUrl | 到对端数据库的JDBC连接信息,jdbcUrl包含在connection配置单元中。
| 是 | 无 |
username | 数据源的用户名。 | 是 | 无 |
password | 数据源指定用户名的密码。 | 是 | 无 |
table | 需要同步写出的表名称,使用JSON的数组进行描述。 table必须包含在connection配置单元中。 | 是 | 无 |
column | 目标表需要写入数据的字段,字段之间用英文所逗号分隔。例如 column配置项必须指定,不能为空。 | 是 | 无 |
preSql | 写入数据至目标表前,会先执行此处的标准语句。 | 否 | 无 |
postSql | 写入数据至目标表后,会执行此处的标准语句。 | 否 | 无 |
batchSize | 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与ClickHouse的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。 | 否 | 1,024 |
- 本页导读 (1)
- 支持的版本
- 使用限制
- 支持的字段类型
- 创建数据源
- 数据同步任务开发
- 单表离线同步任务配置指导
- 整库离线读同步配置指导
- 附录:脚本Demo与参数说明
- 离线任务脚本配置方式
- Reader脚本Demo
- Reader脚本参数
- Writer脚本Demo
- Writer脚本参数