腾讯云数据仓库 TCHouse-X 表设计

这里说明如何通过科学设计表结构(包括表类型、分桶、主键、排序键及分区)来榨干 TCHouse-X 的性能,实现查询加速与存储成本的平衡。

相关产品
腾讯云数据仓库 TCHouse-X 产品页,含版本规格、价格与购买入口。

一、分桶

分桶是 TCHouse-X 实现并行计算的核心。通过 PARTITIONED BY SPEC(BUCKET(n, column)),数据会根据指定列的 Hash 值分布到不同的节点上。

二、示例代码

CREATE TABLE supplier ( s_suppkey INT NOT NULL, s_name STRING NOT NULL, s_nationkey INT NOT NULL, PRIMARY KEY (s_suppkey))PARTITIONED BY SPEC ( BUCKET(128, s_suppkey) — 建议分桶数为 2 的幂次方);

三、最佳实践与避坑

·高基数列优先: 选择值分布均匀的字段(如 user_id, order_id),避免数据倾斜。

·严禁使用时间列: 避免使用 DATE 或 TIMESTAMP 作为分桶键。否则,查询最近数据时压力会集中在少数桶,导致“一核有难,多核围观”。

·本地 Join 优化:将经常需要相互关联(Join)的字段设为分桶键。当两张表以相同分桶键关联时,可触发 Colocated Join,省去昂贵的数据网络传输(Shuffle)。

·查询裁剪: 优先选择 WHERE 条件中高频出现的过滤字段。

四、主键

主键不仅是数据的唯一标识,更是实现高效更新(Upsert/Delete)的基石。

五、核心规则

·更新必备: 只有定义了主键的表才支持 UPDATE 和 DELETE 操作。

·字段精简: 推荐使用数值类型(如 BIGINT)作为主键。主键越短,索引维护成本越低。

·包含关系: 主键必须包含所有的分桶键和分区键。建议将分桶键/分区键放在组合主键的前部。

六、排序

底层存储会按照 SORT BY LEXICAL 指定的列进行物理排序,这就像为图书馆的图书编码。

七、收益分析

·查询加速: 排序键能显著收窄扫描范围。对于范围查询(>、<、BETWEEN),TCHouse-X 可以快速跳过不相关的数据块(Block Skipping)。

·压缩效率: 相同或相似的值由于物理位置相邻,压缩算法能获得更高的压缩比,降低存储开销。

八、分区

分区是数据管理的第一层边界,通常按时间或业务大类划分。

九、规避方案:分区不支持函数表达式

目前不支持 PARTITIONED BY SPEC(HOUR(ts)) 这种写法。

·解决方案: 冗余分区列。

·建表时显式增加分区字段:start_time_hour INT。

·写入时手动计算:INSERT INTO … VALUES (…, HOUR(now()))。

十、规避方案:不支持 INSERT OVERWRITE 目标分区

若需刷新特定分区数据:

·标准流程: ALTER TABLE … DROP PARTITION (…) → INSERT INTO …。

赞 (0)
上一篇 4天前
下一篇 4天前