Clickhouse实时数据的另一种实现思路

前言

之前从kafka出来的数据是实时写入到clickhouse和pg的,现在提出另一种通过view实现的方案。 具体来说,把当天的数据存放到clickhouse的pg引擎表中,把历史数据同步到clickhouse表中,然后通过view把这两张表组合到一起。 每天晚上定时将当天的数据从pg库里同步到clickhouse的历史表。

步骤

1. 在pg库里建表

CREATE TABLE t_city(
   cjsj varchar,
    province     varchar(40),
   city varchar
);
-- 插入一条当天的数据
insert into t_city (cjsj, province, city)
values (2021-07-22 10:00:01, HuNan, changSha);

2. 在clickhouse里建相同的表,用来存放历史数据

create table t_city
(
    cjsj String   default ,
    province    String   default ,
    city String   default 
)
    engine = MergeTree PARTITION BY tuple()
        ORDER BY city
        SETTINGS index_granularity = 8192;

-- 给几条昨天的数据(历史数据)
insert into t_city (cjsj, province, city)
values (2021-07-21 08:01:10, HuBei, xiaoGan);   
insert into t_city (cjsj, province, city)
values (2021-07-21 08:01:20, HuBei, wuHan);

3. 在clickhouse里建立PG引擎表,此表可以提供当天的实时数据

create table t_city_from_pg
(
    cjsj String   default ,
    province    String   default ,
    city String   default 
)
ENGINE = PostgreSQL(ip:port, 库, t_city, 用户名, 密码, schema);

4. 最后在clickhouse中建立view

CREATE VIEW city_view
(
    cjsj String   ,
    province    String   ,
    city String
) AS
SELECT * FROM t_city_from_pg where toDate(cjsj) = today()
UNION ALL
select * from t_city;

5. 每晚同步

做一个定时任务,每晚把当天的数据从pg同步到ck。这里的当天是2021-07-22 ,到了2021-07-23 00:01:00,启动定时任务,我用的是datax做同步,会将 2021-07-22 这一整天的数据同步到clickhouse的t_city表中。

经验分享 程序员 微信小程序 职场和发展