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 的性能指标 。

参考来源

相关推荐
摇滚侠4 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Ztt6666666665 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
依然范特东5 小时前
强化学习笔记4--TD算法
笔记
AOwhisky5 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
茯苓gao6 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
一起努力啊~6 小时前
DataWhale组队学习笔记--llm-algo-leetcode(七)
笔记·学习·llm
ajassi20008 小时前
AI语音智能体开发日记(一)如何为“小智”服务器启用并调试 License 功能
笔记·ai·嵌入式·ai编程
疯狂打码的少年8 小时前
【面向对象】面向对象概述:从“按步骤做”到“找谁来做”
笔记
今夜有雨.9 小时前
C++JSON 解析器
c++·笔记·后端·学习·json
xian_wwq9 小时前
【学习笔记】框架层坍缩——LangChain 们正在被重新定义-14/15
笔记·学习·langchain