ClickHouse數(shù)據(jù)源
ClickHouse數(shù)據(jù)源為您提供讀取和寫入ClickHouse雙向通道的功能,本文為您介紹DataWorks的ClickHouse數(shù)據(jù)同步的能力支持情況。
支持的版本
支持阿里云ClickHouse的20.8、21.8內(nèi)核版本。
您需要確認驅動和您的ClickHouse服務之間的兼容能力,數(shù)據(jù)庫驅動使用如下版本。
<dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.2.4</version> </dependency>
使用限制
離線讀寫
支持使用JDBC連接ClickHouse,且僅支持使用JDBC Statement讀取數(shù)據(jù)。
支持篩選部分列、列換序等功能,您可以自行填寫列。
考慮到ClickHouse負載問題,ClickHouse Writer使用INSERT模式時,建議您限流系統(tǒng)吞吐量(TPS)最高為1,000。
支持的字段類型
支持阿里云ClickHouse以下常見的數(shù)據(jù)類型,阿里云ClickHouse的數(shù)據(jù)類型全集請參見數(shù)據(jù)類型,開源ClickHouse官方數(shù)據(jù)類型集合中的其他類型暫不支持,開源ClickHouse數(shù)據(jù)類型全集請參見ClickHouse Doc。
數(shù)據(jù)類型 | 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 | 部分支持。 數(shù)組元素類型是整型、浮點數(shù)、字符串類型、DateTime64毫秒精度時支持。 | 支持 |
Tuple | 支持 | 支持 |
Domain(IPv4,IPv6) | 支持 | 支持 |
Enum8 | 支持 | 支持 |
Enum16 | 支持 | 支持 |
Nullable | 支持 | 支持 |
Nested | 部分支持。 Nested內(nèi)嵌套數(shù)據(jù)類型是整型、浮點數(shù)、字符串類型、DateTime64毫秒精度時支持。 | 支持 |
創(chuàng)建數(shù)據(jù)源
在進行數(shù)據(jù)同步任務開發(fā)時,您需要在DataWorks上創(chuàng)建一個對應的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源,詳細的配置參數(shù)解釋可在配置界面查看對應參數(shù)的文案提示。
數(shù)據(jù)同步任務開發(fā)
數(shù)據(jù)同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過向導模式配置離線同步任務、通過腳本模式配置離線同步任務。
腳本模式配置的全量參數(shù)和腳本Demo請參見下文的附錄:腳本Demo與參數(shù)說明。
整庫離線讀同步配置指導
操作流程請參見數(shù)據(jù)集成側同步任務配置。
附錄:腳本Demo與參數(shù)說明
離線任務腳本配置方式
如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統(tǒng)一的腳本格式要求,在任務腳本中編寫相應的參數(shù),詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數(shù)據(jù)源的參數(shù)配置詳情。
Reader腳本Demo
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "clickhouse", //插件名。
"parameter": {
"fetchSize":1024,//該配置項定義了插件和數(shù)據(jù)庫服務器端每次批量數(shù)據(jù)獲取條數(shù)。
"datasource": "example",
"column": [ //列名。
"id",
"name"
],
"where": "", //過濾條件。
"splitPk": "", //切分鍵。
"table": "" //表名。
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "clickhouse",
"parameter": {
"postSql": [
"update @table set db_modify_time = now() where db_id = 1"
],
"datasource": "example", //數(shù)據(jù)源。
"batchByteSize": "67108864",
"column": [
"id",
"name"
],
"writeMode": "insert",
"encoding": "UTF-8",
"batchSize": 1024,
"table": "ClickHouse_table",
"preSql": [
"delete from @table where db_id = -1"
]
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"executeMode": null,
"errorLimit": {
"record": "0" //同步過程中的錯誤記錄限流數(shù)。
},
"speed": {
"throttle":true,//當throttle值為false時,mbps參數(shù)不生效,表示不限流;當throttle值為true時,表示限流。
"concurrent":1 //作業(yè)并發(fā)數(shù)。
"mbps":"12",//限流,此處1mbps = 1MB/s。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Reader腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項填寫的內(nèi)容必須要與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
table | 所選取的需要同步的表。使用JSON數(shù)據(jù)進行描述。 說明 table必須包含在connection配置單元中。 | 是 | 無 |
fetchSize | 該配置項定義了插件和數(shù)據(jù)庫服務器端每次批量數(shù)據(jù)獲取條數(shù),該值決定了數(shù)據(jù)同步系統(tǒng)和服務器端的網(wǎng)絡交互次數(shù),能夠提升數(shù)據(jù)抽取性能。 說明 fetchSize值過大會造成數(shù)據(jù)同步進程OOM,需要根據(jù)ClickHouse負載情況遞增。 | 否 | 1,024 |
column | 需要讀取的ClickHouse數(shù)據(jù),字段之間用英文逗號分隔。例如"column": ["id", "name", "age"]。 說明 column配置項必須指定,不能為空。 | 是 | 無 |
jdbcUrl | 到源端數(shù)據(jù)庫的JDBC連接信息,jdbcUrl包含在connection配置單元中。
| 是 | 無 |
username | 數(shù)據(jù)源的用戶名。 | 是 | 無 |
password | 數(shù)據(jù)源指定用戶名的密碼。 | 是 | 無 |
splitPk | ClickHouse進行數(shù)據(jù)抽取時,如果指定splitPk,表示您希望使用splitPk代表的字段進行數(shù)據(jù)分片,數(shù)據(jù)同步因此會啟動并發(fā)任務進行數(shù)據(jù)同步,提高數(shù)據(jù)同步的效率。 說明 當配置了splitPk時,fetchSize參數(shù)為必填項。 | 否 | 無 |
where | 篩選條件,在實際業(yè)務場景中,往往會選擇當天的數(shù)據(jù)進行同步,將where條件指定為 where條件可以有效地進行業(yè)務增量同步。如果不填寫where語句,包括不提供where的key或value,數(shù)據(jù)同步均視作同步全量數(shù)據(jù)。 | 否 | 無 |
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": [ //執(zhí)行數(shù)據(jù)同步任務之前率先執(zhí)行的SQL語句。
"TRUNCATETABLEIFEXISTStablename"
],
"postSql": [//執(zhí)行數(shù)據(jù)同步任務之后率先執(zhí)行的SQL語句。
"ALTERTABLEtablenameUPDATEcol1=1WHEREcol2=2"
],
"batchSize": "1024",
"batchByteSize": "67108864",
"writeMode": "insert"
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"http://錯誤記錄數(shù)。
},
"speed":{
"throttle":true,//當throttle值為false時,mbps參數(shù)不生效,表示不限流;當throttle值為true時,表示限流。
"concurrent":1, //作業(yè)并發(fā)數(shù)。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer腳本參數(shù)
參數(shù) | 描述 | 是否必選 | 默認值 |
jdbcUrl | 到對端數(shù)據(jù)庫的JDBC連接信息,jdbcUrl包含在connection配置單元中。
| 是 | 無 |
username | 數(shù)據(jù)源的用戶名。 | 是 | 無 |
password | 數(shù)據(jù)源指定用戶名的密碼。 | 是 | 無 |
table | 需要同步寫出的表名稱,使用JSON的數(shù)組進行描述。 說明 table必須包含在connection配置單元中。 | 是 | 無 |
column | 目標表需要寫入數(shù)據(jù)的字段,字段之間用英文所逗號分隔。例如 說明 column配置項必須指定,不能為空。 | 是 | 無 |
preSql | 寫入數(shù)據(jù)至目標表前,會先執(zhí)行此處的標準語句。 | 否 | 無 |
postSql | 寫入數(shù)據(jù)至目標表后,會執(zhí)行此處的標準語句。 | 否 | 無 |
batchSize | 一次性批量提交的記錄數(shù)大小,該值可以極大減少數(shù)據(jù)同步系統(tǒng)與ClickHouse的網(wǎng)絡交互次數(shù),并提升整體吞吐量。如果該值設置過大,會導致數(shù)據(jù)同步運行進程OOM異常。 | 否 | 1,024 |