TCHouse-C分布式表创建指南

在 TCHouse-C(腾讯云云原生 ClickHouse)中创建分布式表,核心遵循 ClickHouse 的标准架构模式:先创建存储数据的本地表 (Local Table),再创建指向这些本地表的分布式表(Distributed Table)。TCHouse-C 作为云原生弹性版,底层基于存算分离架构,但在 SQL 语法层面完全兼容开源 ClickHouse 。

1. 核心创建流程与代码示例

创建过程分为两步:首先定义数据落盘的本地表结构,然后定义负责路由分发的分布式表。

第一步:创建本地表 (Local Table)

本地表是实际存储数据的实体,通常在集群的每个分片(Shard)上执行。需指定引擎为 MergeTree 系列,并定义排序键。

sql 复制代码
-- 在集群的每个节点上执行此语句
-- 数据库名:default, 表名:user_local
CREATE TABLE default.user_local ON CLUSTER tchouse_c_cluster
(
    `user_id` UInt64 COMMENT '用户 ID',
    `event_time` DateTime COMMENT '事件时间',
    `action_type` String COMMENT '行为类型', `amount` Decimal(18, 2) COMMENT '金额'
)ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time) -- 按月分区
ORDER BY (user_id, event_time)    -- 排序键,必须包含主键或常用查询字段
SETTINGS index_granularity = 8192;

注:ON CLUSTER tchouse_c_cluster 子句用于在 TCHouse-C集群的所有分片上自动同步执行建表语句,无需手动逐台连接 。

第二步:创建分布式表 (Distributed Table)

分布式表本身不存储数据,仅作为路由层,将写入请求分发到后端的本地表,或将查询请求聚合后返回。

sql 复制代码
-- 仅在任意一个节点执行一次即可(若使用了 ON CLUSTER 则会自动同步)
-- 数据库名:default, 表名:user_all
CREATE TABLE default.user_all ON CLUSTER tchouse_c_cluster
(
    `user_id` UInt64,
    `event_time` DateTime,
    `action_type` String,
    `amount` Decimal(18, 2)
)
ENGINE = Distributed('tchouse_c_cluster', 'default', 'user_local', rand());

参数解析:

  • 'tchouse_c_cluster':TCHouse-C 实例内部的集群名称(需在控制台确认具体集群名)。
  • 'default':本地表所在的数据库名。
  • 'user_local':第一步创建的本地表名称。
  • rand():分片键(Sharding Key)。此处使用随机函数将数据均匀打散到各分片;若需按业务主键(如 user_id)路由,可替换为 user_id

2. 关键配置与写入策略

在通过分布式表写入数据时,TCHouse-C 支持同步与异步两种模式,需根据业务对一致性和吞吐量的要求进行配置。

| 配置项 | 参数名称 | 默认行为 | 适用场景 | 风险/优势 |

| :--- | :--- | :--- | :--- :--- |

| 同步写入 | insert_distributed_sync | 0 (异步) | 金融对账、强一致性要求场景 | 优势 :确保数据已落盘到本地分片才返回成功。

劣势 :延迟较高,受限于最慢分片性能 。 |

| 异步写入 | insert_distributed_sync=0 | 开启 | 日志采集、高吞吐实时监控 | 优势 :写入极快,立即返回。

风险 :若节点故障,缓冲区数据可能丢失,需配合重试机制 。 |

| 批量聚合 | async_insert | 0 (关闭) | 高频小批量写入场景 | 将多次小写入合并为一次大写入,显著降低 MergeTree 合并压力,提升吞吐量 。 |

代码示例:设置会话级同步写入以确保数据可靠性

sql 复制代码
-- 在当前会话中开启同步写入,确保 INSERT语句等待所有分片确认
SET insert_distributed_sync = 1;

-- 执行插入操作,此时只有当数据在所有相关分片的本地表落盘后,语句才会返回成功
INSERT INTO default.user_all (user_id, event_time, action_type, amount)
VALUES 
(1001, '2023-10-27 10:00:00', 'click', 0.00),
(1002, '2023-10-27 10:00:05', 'buy', 99.50);

3. TCHouse-C 云原生特性适配

在使用 TCHouse-C 构建实时数仓时,需注意其云原生架构带来的最佳实践:

  • 存算分离架构:TCHouse-C 采用计算与存储分离设计,创建表时无需关心底层磁盘挂载,扩容计算节点即可提升写入/查询并发能力,适用于 Oceanus (Flink) 等上游来源的高并发写入场景 。
  • 集群名称确认 :不同于自建 ClickHouse 修改 config.xml,TCHouse-C 的集群名称(如 tchouse_c_cluster)由云平台统一管理,建表前务必在腾讯云控制台的实例详情页获取准确的集群标识,否则 ON CLUSTER 语句会报错。
  • 分层设计建议:在实时数仓建设中,建议利用分布式表作为 ODS 层接入层,配合 Flink DataSync 进行多链路分发,再下沉至明细层(DWD)本地表,以实现端到端延迟≤200ms 的性能指标 。

参考来源

相关推荐
问君能有几多愁~9 小时前
C++ 数据结构复习笔记
数据结构·c++·笔记
r_oo_ki_e_10 小时前
Java Map 集合学习笔记
java·笔记·学习
liuyicenysabel11 小时前
大模型学习笔记 · 第八篇 · 进阶:偏好对齐与多卡训练
人工智能·笔记·学习
番茄育学园15 小时前
我的三款主流云存储音乐库实测笔记
笔记·分类·媒体
十月的皮皮18 小时前
C语言学习笔记20260706-栈的压入、弹出序列验证
c语言·笔记·学习
维他奶糖6119 小时前
基于 DrissionPage 实现小红书搜索笔记批量采集
笔记
hssfscv20 小时前
QT的学习笔记4——QMainWindow、资源文件以及主要控件的介绍
笔记·qt·学习
克里斯蒂亚诺更新20 小时前
电脑关闭密码的操作
笔记
小小的代码里面挖呀挖呀挖20 小时前
杰理蓝牙耳机开发--LE Audio与游戏耳机应用
笔记·单片机·物联网·学习