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 | |
| 22.6 | clickhouse4j-1.4.4-SNAPSHOT.jar |
Clickhouse 8.5.zip |
2.3 具體連結步驟
建立資料連結步驟請參見:建立並管理資料源
配置資料連結時,驅動需要切換為「自訂」,換為本文 2.2 節的驅動。

3. 使用資料源
3.1 資料開發-定時任務
配置好資料源後即可在「定時任務」中使用資料源,詳情參見:資料開發概述
3.2 資料開發-實時任務
當 DB表匯出選擇 clickhouse:
5.0.0.4 及之後版本,當前任務中存在產生更新流的算子&寫入 clickhouse 時,不支援無主鍵同步;會產生更新流的算子:CDC輸入、分組匯總、資料聯動(多個實時資料源進行聯動)。
| 選擇去向類型 | 說明 |
|---|---|
| 已存在表 | 表類型為除 collapsingMergeTree 外的其他表引擎
|
表引擎為 collapsingMergeTree 時 欄位映射:
寫入方式:
| |
| 自動建表 | 僅支援 collapsingMergeTree 的邏輯 欄位映射
寫入方式:
|
1)當匯出到除 collapsingMergeTree 外的其他表引擎時:
將插入事件的資料直接插入到目標表。
遇到刪除事件、更新事件時則報錯。
2)當匯出到 collapsingMergeTree 時,映射說明詳情參見本文 3.3 節內容。
3)目標端使用已存在表時,表中需要有_fdl_sign欄位來標記刪除情況。
3.3 實時管道
實時管道任務中支援寫入 ClickHouse 資料庫。如下圖所示:

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 中使用集合方式,集合範例如下所示:
方式二:在使用前觸發一次合併,「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 資料服務
配置好資料源後即可在「資料服務」中將使用資料源,詳情參見:資料服務概述
