文章目录
前言
之前从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表中。