Clickhouse集群中创建多副本物化视图的方法(重要)

Clickhouse集群中创建多副本物化视图的方法(重要)

  • 创建4个节点的Clickhouse高可用集群,host_name为ck01、ck02、ck03、ck04,分片与副本情况见下图:在这里插入图片描述

  • 使用nginx配置轮询dns写入数据到2个片区的本地表,此处选择ck02、ck03为写入节点,ck01为ck04的副本节点。

  1. 所有节点创建集群数据分区表,用于接收初始数据
cREATE TABLE sdecdmp.D20Data
(
    `CreateDate` Date DEFAULT toDate(now(), 'Asia/Shanghai'),
    `CreateTime` DateTime DEFAULT now(),
    `ein` String,
    `callType` String,
    `command` String,
    `deviceType` String,
    `deviceID` String,
    `uploadTime` Int64,
    `items` Array(String)
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/dmp/D20Data', '{replica}')-- 
PARTITION BY CreateDate
ORDER BY (CreateTime, ein, deviceID, uploadTime) SETTINGS storage_policy='dist', index_granularity = 8192;
  1. 所有节点创建初始数据分布式表
CREATE TABLE sdecdmp.D20Data_all
AS sdecdmp.D20Data 
ENGINE = Distributed(dmp, sdecdmp, D20Data, rand());
  1. ck02、ck03创建数据物化视图,用于实时解析数据
CREATE MATERIALIZED VIEW sdecdmp.D20DataM 
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/dmp/D20DataM', '{replica}')
PARTITION BY CreateDate
ORDER BY (ein ,uploadTime1 )
SETTINGS storage_policy='dist', index_granularity = 8192
--POPULATE
AS 
SELECT arrayMap(x-> visitParamExtractFloat(toString(x),'value'),items ) as `params.valueM`,
arrayMap(x-> visitParamExtractString(toString(x),'code'),items ) as `params.codeM`,
toDateTime(toInt64(uploadTime)/1000,'Asia/Shanghai' ) as uploadTime1,
ein,deviceID,CreateDate,CreateTime from sdecdmp.D20Data
where  command = 'ENGINE_D20'
  1. ck01、ck04创建集群表,不是物化视图,用来保存ck02、ck03的副本,注意使用的是 create table 命令
CREATE table sdecdmp.D20DataM (
    `params.valueM` Array(Float64),
`params.codeM` Array(String),
`uploadTime1` DateTime('Asia/Shanghai'),
`ein` String,
`deviceID` String,
`CreateDate` Date,
`CreateTime` DateTime
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/dmp/D20DataM', '{replica}')
PARTITION BY CreateDate
ORDER BY (ein ,uploadTime1 )
SETTINGS  storage_policy='dist',index_granularity = 8192;
  1. 所有节点创建物化视图分布式表
CREATE TABLE sdecdmp.D20DataM_all
AS sdecdmp.D20DataM 
ENGINE = Distributed(dmp, sdecdmp, D20DataM, rand());

使用ZooInspector可以查看集群D20Data、D20DataM主副表关系。
详细搭建集群方法后期整理,有坑的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值