最新历史版本 :配置ClickHouse数据源 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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 输出功能支持新增流的无主键插入
4.2.8.4适配高版本驱动
4.2.11.3
实时管道任务写入 ClickHouse 逻辑优化

1.2 简介

ClickHouse 是面向列的数据库管理系统(DBMS),用于对查询进行联机分析处理(OLAP)。

FineDataLink 支持连接 ClickHouse,进行定时任务读写、管道任务写入、作为数据服务数据发布源、实时任务写入。

注:ClickHouse 数据库的引擎需要是 Atomic 引擎,才支持写入时自动建表功能。

2. 配置数据连接编辑

2.1 前提条件

详情请参见:前提条件

2.2 版本和驱动

下载驱动,并将其上传至 FineDataLink,如何上传可参见:驱动管理 第 2 节。

支持的数据库版本驱动下载
20.1

clickhouse

22.6

clickhouse4j-1.4.4-SNAPSHOT.jar


Clickhouse 8.5.zip
注:DateTime64 类型的完整范围为:[1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999],若需使用完整范围,请使用此驱动。当 DateTime64 类型写入超出完整范围时,会随机填入一个在范围内的日期值。

2.3 具体连接步骤

创建数据连接步骤请参见:创建并管理数据源

配置数据连接时,驱动需要切换为「自定义」,换为本文 2.2 节的驱动。

39.png

3. 使用数据源编辑

3.1 数据开发-定时任务

配置好数据源后即可在「定时任务」中使用数据源,详情参见:数据开发概述

3.2 数据开发-实时任务

当 DB表输出选择 clickhouse:

5.0.0.4 及之后版本,当前任务中存在产生更新流的算子&写入 clickhouse 时,不支持无主键同步;会产生更新流的算子:CDC输入、分组汇总、数据关联(多个实时数据源进行关联)。

选择去向类型说明
已存在表

表类型为除 collapsingMergeTree 外的其他表引

  • 字段映射处,不展示主键列

  • 写入方式处,不支持配置主键映射,不支持配置逻辑删除

表引擎为 collapsingMergeTree 

字段映射:

  • 展示该表的排序键,即order by字段

  • 展示该表声明的sign字段,且该字段不能配置与来源表字段的映射关系

  • 当选择的表没有排序键时,报错:该表没有声明排序键,不支持写入

写入方式:

  • 直接使用排序键配置进行映射,不支持自定义

  • 支持配置逻辑删除

自动建表

仅支持 collapsingMergeTree 的逻

字段映射

  • 用户手动设置排序键,且必须配置排序键

  • 自动添加一个字段为sign字段,且该字段不能配置与来源表字段的映射关系在字段行中用提示 icon对sign字段进行说明:用于 clickhouse 表引擎进行数据合并

写入方式:

  • 直接使用排序键配置进行映射,不支持自定义

  • 支持配置逻辑删除

    1)当输出到除 collapsingMergeTree 外的其他表引擎时:

    • 将插入事件的数据直接插入到目标表。

    • 遇到删除事件、更新事件时则报错。

    2)当输出到 collapsingMergeTree 时,映射说明详情参见本文 3.3 节内容。

    3)目标端使用已存在表时,表中需要有_fdl_sign字段来标记删除情况。

    3.3 实时管道

    实时管道任务中支持写入 ClickHouse 数据库。如下图所示:

    55.png

    3.3.1 目标表类型

    当向目标表写入数据时,按照 CollapsingMergeTree 表引擎进行写入。

    选择去向类型说明
    自动建表

    1)使用 CollapsingMergeTree 表引擎,将逻辑主键设置为 order by 字段

    注:创建表时,来源表字段不能出现 sign ,会和标识增删改的 sign 字段重名导致同步失败

    2)如果来源表有物理主键,对应的目标表字段也自动为逻辑主键

    如果来源表没有物理主键,需要用户手动设置逻辑主键

    3)4.2.11.3 及之后版本,自动识别来源表物理主键,默认设置为目标表的「排序键,也可以手动指定排序键,排序键同时联动指定非空」约束,不可取消

    已存在表

    如果能获取表的 order by 字段,则支持设置已存在表为目标表,否则不支持设置为目标表

    1)当选择已存在表时,只能选择由 CollapsingMergeTree 表引擎创建的表

    2)4.2.11.3 之前版本,需要识别排序键,勾选为逻辑主键展示出来

    4.2.13.3 及之后版本,将已存在表中的排序键自动识别并展示出来,写入方式中主键映射处自动填入排序键

    3.3.2 写入逻辑说明

    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 数据服务

    配置好数据源后即可在「数据服务」中将使用数据源,详情参见:数据服务概述