ClickHouse 对接 Kafka,将数据导入到 SummingMergeTree 表中

一、ClickHouse 和 Kafka 对接

1、官方文档地址

https://clickhouse.tech/docs/zh/engines/table-engines/integrations/kafka/

2、三个步骤

(1)使用引擎创建一个 Kafka 消费者并作为一条数据流(这个表中的数据只能被查询一次,查询完之后会被清空)。

CREATE TABLE `queue`
(
    `date` UInt64, 
    `name` String, 
    `operation` String
)
ENGINE = Kafka('node01:9092:node02:9092,node03:9092', 'topic-name', 'topic-group-id', 'JSONEachRow');

(2)创建一个结构表(结构化的表,count字段是`date`,`name`,`operation`记录出现的次数,count字段会有聚合操作)。

CREATE TABLE `test`
(
    `date` Date, 
    `name` String, 
    `operation` String, 
    `count` UInt64
)
ENGINE = SummingMergeTree((count))
PARTITION BY toYYYYMMDD(date)
ORDER BY (`date`,`name`,`operation`);

(3)创建物化视图,改视图会在后台转换引擎中的数据并将其放入之前创建的表中。

CREATE MATERIALIZED VIEW `queue-view` TO `test` AS
SELECT 
    toDate(date/1000) AS date, 
    name, 
    operation, 
    1 AS count
FROM `queue`
WHERE name IS NOT NULL;

二、将数据导入到 SummingMergeTree

1、SummingMergeTree 简介

(1)主要参数参数

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

SummingMergeTree([columns]):[]为选填项,0个或1个参数,columns为一个元组,表示需要进行 sum 操作的列。

[PARTITION BY expr]:按照 expr 进行分区。

[ORDER BY expr]:按照 order by 后面的列(也就是主键)进行聚合,累加 [columns] 这些列。

 

你可能感兴趣的:(ClickHouse,Kafka,ClickHouse,Kafka,聚合,主键)