1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
3.2 | 定时任务中支持读取 ClickHouse |
3.7 | 定时任务支持写入 ClickHouse |
4.0.28 | 管道任务支持写入 ClickHouse |
4.1.6.3 | 数据服务支持 ClickHouse |
4.1.13.3 | 数据开发-实时任务写入支持 ClickHouse |
4.2.1.4 | 数据开发-实时任务中的 DB 输出功能支持新增流的无主键插入 |
1.2 简介
ClickHouse 是面向列的数据库管理系统(DBMS),用于对查询进行联机分析处理(OLAP)。
FineDataLink 支持连接 ClickHouse,进行定时任务读写、管道任务写入、作为数据服务数据发布源、实时任务写入。
注:ClickHouse 数据库的引擎需要是 Atomic 引擎,才支持写入时自动建表功能。
2. 配置数据连接
2.1 前提条件
详情请参见:前提条件
2.2 版本和驱动
下载驱动,并将其上传至 FineDataLink,如何上传可参见:驱动管理 第 2 节。
支持的数据库版本 | 驱动下载 |
---|---|
20.1 | |
22.6 | clickhouse4j-1.4.4-SNAPSHOT.jar |
2.3 具体连接步骤
创建数据连接步骤请参见:创建并管理数据源
配置数据连接时,驱动需要切换为「自定义」,换为本文 2.2 节的驱动。
3. 使用数据源
3.1 数据开发-定时任务
配置好数据源后即可在「定时任务」中使用数据源,详情参见:数据开发概述
3.2 数据开发-实时任务
当 DB表输出选择 clickhouse:
选择去向类型 | 说明 |
---|---|
已存在表 | 表类型为除 collapsingMergeTree 外的其他表引擎
|
表引擎为 collapsingMergeTree 时 字段映射:
写入方式:
| |
自动建表 | 仅支持 collapsingMergeTree 的逻辑 字段映射
写入方式:
|
1)当输出到除 collapsingMergeTree 外的其他表引擎时:
将插入事件的数据直接插入到目标表。
遇到删除事件、更新事件时则报错。
2)当输出到 collapsingMergeTree 时,映射说明详情参见本文 3.3 节内容。
3)目标端使用已存在表时,表中需要有_fdl_sign字段来标记删除情况。
3.3 数据管道
配置好数据源后即可在「数据管道」中将使用数据源,详情参见:数据管道概述
clickhouse 作为写入端时字段映射说明
当向目标表写入数据时,按照 CollapsingMergeTree 表引擎进行写入。
选择去向类型 | 说明 |
---|---|
自动建表 | 使用 CollapsingMergeTree 表引擎,将逻辑主键设置为 order by 字段 注:创建表时,来源表字段不能出现 sign ,会和标识增删改的 sign 字段重名导致同步失败。 |
已存在表 | 当选择已存在表时,只能选择由 CollapsingMergeTree 表引擎创建的表,并且要指定 order by 字段,在逻辑主键一列中进行展示。 注:如果能获取表的 order by 字段,则支持设置已存在表为目标表,否则不支持设置为目标表。 |
clickhouse 作为目标端的写入逻辑为:
对于插入的数据,直接 insert,并标记其 sign 为 1
对于删除的数据,直接insert一条,逻辑主键的数据,并标记其sign为-1 如果是逻辑删除,insert 更新数据、sign 为 1 的数据即可
对于更新的数据, insert 更新数据、sign 为 1 的数据即可。
注:因为 CollapsingMergeTree 表的合并不定时,所以使用实时同步的表时,需要在使用前手动触发一次合并,或者在查询 SQL 使用集合方式,计算时去除掉重复数据的影响。
方式一:直接在 SQL 中使用集合方式,集合示例如下所示:
select name, sum(order_amt*sign) as order_amt from default.test_version_collapsing
group by name
having sum(sign) > 0
方式二:在使用前触发一次合并,「OPTIMIZE TABLE test.ods_real_time_order FINAL」
方式三:直接在查询的 SQL 。select 表名后加 final ,比如 SELECT * FROM gbn_onl_mix.union_order_onl_all_test final WHERE dt = '2023-05-28'。
3.4 数据服务
配置好数据源后即可在「数据服务」中将使用数据源,详情参见:数据服务概述