Skip to main content
Version: 1.5.0

ClickHouse

Overview

The ClickHouse Load Node supports to write data into ClickHouse database. This document describes how to set up the ClickHouse Load Node to run SQL queries against ClickHouse database.

Supported Version

Load NodeDriverGroup IdArtifact IdJAR
ClickHouseClickHouseru.yandex.clickhouseclickhouse-jdbcDownload

Dependencies

In order to set up the ClickHouse Load Node, the following provides dependency information for both projects using a build automation tool (such as Maven or SBT) and SQL Client with Sort Connectors JAR bundles.

Maven dependency

<dependency>
<groupId>org.apache.inlong</groupId>
<artifactId>sort-connector-jdbc</artifactId>
<version>1.5.0</version>
</dependency>

How to create a ClickHouse Load Node

Usage for SQL API


-- MySQL extract node
CREATE TABLE `mysql_extract_table`(
PRIMARY KEY (`id`) NOT ENFORCED,
`id` BIGINT,
`name` STRING,
`age` INT
) WITH (
'connector' = 'mysql-cdc-inlong',
'url' = 'jdbc:mysql://localhost:3306/read',
'username' = 'inlong',
'password' = 'inlong',
'table-name' = 'user'
)

-- ClickHouse load node
CREATE TABLE `clickhouse_load_table`(
PRIMARY KEY (`id`) NOT ENFORCED,
`id` BIGINT,
`name` STRING,
`age` INT
) WITH (
'connector' = 'jdbc-inlong',
'dialect-impl' = 'org.apache.inlong.sort.jdbc.dialect.ClickHouseDialect',
'url' = 'jdbc:clickhouse://localhost:8123/demo',
'username' = 'inlong',
'password' = 'inlong',
'table-name' = 'demo.user'
)

-- write data into ClickHouse
INSERT INTO clickhouse_load_table
SELECT id, name , age FROM mysql_extract_table;

Usage for InLong Dashboard

When creating a data flow, select ClickHouse for the data stream direction, and click "Add" to configure it.

ClickHouse Configuration

Usage for InLong Manager Client

TODO: It will be supported in the future.

ClickHouse Load Node Options

OptionRequiredDefaultTypeDescription
connectorrequired(none)StringSpecify what connector to use, here should be 'jdbc-inlong'.
urlrequired(none)StringThe JDBC database url.
dialect-implrequired(none)Stringorg.apache.inlong.sort.jdbc.dialect.ClickHouseDialect
table-namerequired(none)StringThe name of JDBC table to connect, for example database.tableName
driveroptional(none)StringThe class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.
usernameoptional(none)StringThe JDBC user name. 'username' and 'password' must both be specified if any of them is specified.
passwordoptional(none)StringThe JDBC password.
connection.max-retry-timeoutoptional60sDurationMaximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.
sink.buffer-flush.max-rowsoptional100IntegerThe max size of buffered records before flush. Can be set to zero to disable it.
sink.buffer-flush.intervaloptional1sDurationThe flush interval mills, over this time, asynchronous threads will flush data. Can be set to '0' to disable it. Note, 'sink.buffer-flush.max-rows' can be set to '0' with the flush interval set allowing for complete async processing of buffered actions.
sink.max-retriesoptional3IntegerThe max retry times if writing records to database failed.
sink.parallelismoptional(none)IntegerDefines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.
sink.ignore.changelogoptionalfalseBooleanIgnore all RowKind, ingest them as INSERT.
inlong.metric.labelsoptional(none)StringInlong metric label, format of value is groupId={groupId}&streamId={streamId}&nodeId={nodeId}.

Data Type Mapping

ClickHouse typeFlink SQL type
StringCHAR
String
IP
UUID
VARCHAR
String
EnumL
STRING
UInt8BOOLEAN
FixedStringBYTES
Decimal
Int128
Int256
UInt64
UInt128
UInt256
DECIMAL
Int8TINYINT
Int16
UInt8
SMALLINT
Int32
UInt16
Interval
INTEGER
Int64
UInt32
BIGINT
Float32FLOAT
DateDATE
DateTimeTIME
DateTimeTIMESTAMP
DateTimeTIMESTAMP_LTZ
Int32INTERVAL_YEAR_MONTH
Int64INTERVAL_DAY_TIME
ArrayARRAY
MapMAP
Not supportedROW
Not supportedMULTISET
Not supportedRAW