ClickHouse是面向联机分析处理(OLAP)和列式存储的开源的数据库管理系统(DBMS),本文为您介绍ClickHouse Writer的实现原理、参数说明及配置示例。

使用限制

  • 当前仅支持阿里云ClickHouse的20.8、21.8内核版本。
  • ClickHouse Writer仅支持使用新增和使用独享数据集成资源组,不支持使用使用公共资源组自定义资源组
  • ClickHouse Writer使用JDBC连接ClickHouse,且仅支持使用JDBC Statement插入数据。
  • ClickHouse Writer支持筛选部分列、列换序等功能,您可以自行填写列。
  • 考虑到ClickHouse负载问题,ClickHouse Writer使用INSERT模式时,建议您限流系统吞吐量(TPS)最高为1,000。
  • ClickHouse Writer在所有Task写入任务后,Job Post单进程执行Flush工作,保证数据在ClickHouse整体更新。
  • 您需要确认驱动和您的ClickHouse服务之间的兼容能力,数据库驱动使用如下版本。
    <dependency>
        <groupId>ru.yandex.clickhouse</groupId>
        <artifactId>clickhouse-jdbc</artifactId>
        <version>0.2.4.ali2-SNAPSHOT</version>
    </dependency>

支持的数据类型

支持阿里云ClickHouse以下常见的数据类型,阿里云ClickHouse的数据类型全集请参见数据类型,开源ClickHouse官方数据类型不支,开源ClickHouse数据类型全集请参见ClickHouse Doc
数据类型 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毫秒精度时支持。

支持

背景信息

ClickHouse Writer实现了向ClickHouse写出数据的功能。在底层实现上,ClickHouse Writer通过JDBC连接远程ClickHouse数据库,并执行相应的insert into语句,写入数据至ClickHouse。

ClickHouse Writer面向ETL开发工程师,通过ClickHouse Writer从数仓导入数据至ClickHouse。同时ClickHouse Writer可以作为数据迁移工具,为数据库管理员等用户提供服务。

ClickHouse Writer通过数据集成框架获取Reader生成的协议数据,并利用ClickHouse暴露的INSERT接口写入ClickHouse,根据您的配置生成相应的SQL插入语句。

参数说明

参数 描述 是否必选 默认值
jdbcUrl 到对端数据库的JDBC连接信息,jdbcUrl包含在connection配置单元中。
  • 在一个数据库上只能配置一个值。
  • jdbcUrl的格式和ClickHouse官方一致,并可以连接附加参数信息。例如,jdbc:clickhouse://127.0.0.1:3306/database
username 数据源的用户名。
password 数据源指定用户名的密码。
table 需要同步写出的表名称,使用JSON的数组进行描述。
说明 table必须包含在connection配置单元中。
column 目标表需要写入数据的字段,字段之间用英文所逗号分隔。例如"column": ["id", "name", "age"]
说明 column配置项必须指定,不能为空。
preSql 写入数据至目标表前,会先执行此处的标准语句。
postSql 写入数据至目标表后,会执行此处的标准语句。
batchSize 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与ClickHouse的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。 1,024

脚本开发介绍

使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务
说明 实际执行时,请删除下述代码中的注释。
向ClickHouse写出数据的JSON配置,如下所示。
{
    "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语句。
                    "TRUNCATE TABLE IF EXISTS tablename"
                ],
                "postSql": [//执行数据同步任务之后率先执行的SQL语句。
                    "ALTER TABLE tablename UPDATE col1=1 WHERE col2=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"//限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}